Voivo2Vocalo

日本語のテキストを、VOCALOID6 に朗読させるプロジェクトファイル(.vpr)に一発で変換するツールです。

絶対音感がなくても、ピアノロールに1音ずつ高さを打ち込まなくても、テキストを渡すだけで「それっぽく読む」VOCALOID プロジェクトができます。

青空文庫の HTML ──aozora2txt.py──▶ テキスト ──voicevox2midi.py──▶ .vpr ──▶ VOCALOID6 で再生
                                                    │
                                          VOICEVOX エンジン(アクセントだけ借りる)

⚠️ 歌声合成で朗読させる「遊び」のためのツールです。トーク専用ソフト(VOICEVOX など)の自然さには届きません。 そのかわり、好きな VOCALOID ボイスで、テキストから一発で読ませられます。


しくみ

  1. VOICEVOX エンジンに文を渡し、audio_query で「モーラごとの読み・長さ・高さ」を受け取ります。 漢字の読みとアクセントは VOICEVOX が決めます。VOICEVOX の音声そのものは使いません。
  2. 1モーラを1ノートにして、VOCALOID の発音記号(k a、S i、N\ …)に変換します。
  3. 歌声合成のままだと「歌っている」感じになるので、朗読向けに次の調整をします。
    • 高さを VOICEVOX の話者と同じ高さ に合わせる(--target orig+1)
    • 抑揚の幅を 3割 に圧縮する(--range 0.3)
    • ノートのピッチ設定(トランジション・ドリフト)を すべて 0 にする
    • リバーブ(雛形に入っていれば)・歌唱スキル・自動ブレス・ビブラートを オフ にする
  4. 歌詞・発音記号・パラメータ入りの .vpr を書き出します。そのまま VOCALOID6 Editor で開けます。

既定値は、冥鳴ひまり(VOICEVOX)× 初音ミク V6 の組み合わせで、聞きながら調整した値です。


必要なもの

もの 備考
Python 3.8 以上 標準ライブラリのみ。pip install 不要
VOICEVOX テキストから変換するときだけ起動しておく(GUI を起動すればエンジンも立ち上がる)
VOCALOID6 Editor + VOCALOID:AI ボイスバンク 体験版でも動作

動作確認した環境:Windows 11 / Python 3.14 / VOICEVOX エンジン 0.26.0 / VOCALOID6 Editor 6.5.1(体験版)/ 初音ミク V6・HARUKA


クイックスタート

0. 使いたいボイスの雛形を作る(最初に1回だけ)

--template を省略すると、内蔵の HARUKA 用雛形で出力されます。 ミクなど別のボイスで出したい場合は、雛形を1つ作っておきます。

  1. VOCALOID6 Editor で新規プロジェクトを作り、ボイスを選んでノートを1つ置く (手元の .vpr を開いて VOICE を切り替えるのでも OK)
  2. miku.vpr などの名前で保存する

雛形の 最初のノートの設定 が、出力する全ノートに引き継がれます(ピッチのトランジション・ドリフトは毎回0で上書き)。

1. 青空文庫の HTML をテキストにする

python aozora2txt.py 46605_31178.html -o yamanashi.txt

2. .vpr に変換する

VOICEVOX を起動した状態で:

python voicevox2midi.py -f yamanashi.txt -o yamanashi.vpr --template miku.vpr --dump-json yamanashi_q.json

3. VOCALOID6 Editor で開く

yamanashi.vpr を開いて再生するだけです。


調整のしかた

--dump-json で保存した JSON を使えば、VOICEVOX を起動せずに 何度でも書き出し直せます。

python voicevox2midi.py --from-json yamanashi_q.json -o test.vpr --template miku.vpr --target orig-1

高さ(--target)

絶対音感がなくても、VOICEVOX の元の声と交互に聞いて「同じくらいか、高いか、低いか」 で決められます。

指定 意味
orig VOICEVOX の話者と同じ高さ
orig+1 / orig-2 そこから ±半音(既定は orig+1)
60 など数値 中心を MIDI ノート番号で固定(60=約262Hz)

実行すると、元の話者の高さと出力の高さがコンソールに表示されます。

VOICEVOX側の高さの中央値: 240Hz(ノート58.5) → 出力の中央: ノート59.5(元より+1.0半音)

抑揚の幅(--range)

値 聞こえ方
0.8〜1.0 歌っている/節がついている感じ
0.3(既定) 普通のしゃべりに近い
0 完全に平坦(比較実験用)

読み手(--speaker)

抑揚と間の取り方は、VOICEVOX の話者で変わります。落ち着いた話者ほど朗読向きです。

ID 話者
14 冥鳴ひまり(既定)
47 ナースロボ_タイプT(ノーマル)
31 No.7(読み聞かせ)
3 ずんだもん(ノーマル。抑揚が大きめ)

一覧は VOICEVOX 起動中にブラウザで http://127.0.0.1:50021/speakers を開くと見られます("id" がスタイル ID)。 話者を変えたときは、高さを --target orig 基準で探し直してください。

まとめて書き出して聞き比べる(PowerShell)

mkdir cmp -Force | Out-Null

# 高さを振る
foreach ($t in "orig-2","orig-1","orig","orig+1","orig+2") {
  python voicevox2midi.py --from-json yamanashi_q.json -o "cmp\k_$t.vpr" --template miku.vpr --target $t
}

# 抑揚の幅を振る
foreach ($r in 0.2,0.3,0.4,0.5) {
  python voicevox2midi.py --from-json yamanashi_q.json -o "cmp\r_$r.vpr" --template miku.vpr --range $r
}

# 読み手を比べる(VOICEVOX の起動が必要)
foreach ($s in 14,47,31) {
  python voicevox2midi.py -f yamanashi.txt -o "cmp\sp$s.vpr" --template miku.vpr --speaker $s --target orig --dump-json "cmp\q$s.json"
}

読み間違い・アクセントを直す

VOICEVOX の読みやアクセントが変なところは、VOICEVOX の GUI で直すのがいちばん楽です。

  1. VOICEVOX の GUI でテキストを読み込み、読み・アクセント・間を直す
  2. プロジェクト(.vvproj)として保存する
  3. python voicevox2midi.py --vvproj yamanashi.vvproj -o yamanashi.vpr --template miku.vpr

青空文庫のルビは初出の語にしか振られていないため、2回目以降の難読語(「蟹」「三疋」など)は漢字のまま残ります。読みを確認してください。

.vvproj の読み込みは、まだ実ファイルでの確認が十分ではありません。エラーになったら X(@MikuTealSerene)までお知らせください。


オプション一覧

オプション 既定値 説明
-t / -f / --vvproj / --from-json (どれか1つ必須) 入力:文字列 / テキストファイル / VOICEVOX プロジェクト / 保存した JSON
-o out.vpr 出力先。拡張子 .vpr / .mid で形式を切り替え
--template 内蔵 HARUKA 雛形の .vpr。使いたいボイスで保存したもの
--speaker 14 VOICEVOX の話者(スタイル)ID
--target orig+1 高さの中心
--range 0.3 抑揚の幅の倍率
--speed 0.9 読む速さ(小さいほどゆっくり)
--gap 0.6 文と文の間(秒)
--dump-json — VOICEVOX から取得した query を保存
--host http://127.0.0.1:50021 VOICEVOX エンジンの URL
--keep-fx オフ リバーブ・歌唱スキル・自動ブレスを切らずに残す
--sing-pitch オフ ピッチのトランジション・ドリフトを0にしない(比較用)
--aiexp 名前=値 — ノートの AI パラメータを個別に上書き(0.0〜1.0、複数可)
--bpm 120 プロジェクトのテンポ(秒→拍の換算用。読む速さは変わらない)
--enc shift_jis .mid 出力時の歌詞の文字コード

朗読向けに 0 にしているノートのパラメータ

VOCALOID6 Editor の NOTE → PARAMETER → ピッチ(表示 0〜100)と、.vpr 内の名前の対応です。

エディタ表示 .vpr 内の名前
前方トランジション pitchTransitionStart
後方トランジション pitchTransitionEnd
前方ドリフト pitchDriftStart
後方ドリフト pitchDriftEnd
全体ドリフト pitchScalingOrigin

出力されるファイル

ファイル 内容
xxx.vpr VOCALOID6 プロジェクト(本命)
xxx_lyrics.txt 歌詞(ひらがな)をスペース区切りで。流し込み用
xxx_notes.csv 各ノートの時刻・周波数・音程。確認用
xxx.mid -o xxx.mid のとき。VOCALOID6 は MIDI の歌詞を読み込まないため、全部「a」になります

できないこと・既知の制限


トラブルシューティング

ConnectionResetError: [WinError 10054] で VOICEVOX につながらない

ブラウザや curl.exe http://127.0.0.1:50021/version では応答するのに Python だけ失敗する場合、セキュリティソフトや広告ブロッカー(AdGuard for Windows など)が python.exe の通信に割り込んでいる 可能性が高いです。

[接続エラー] が出る

  1. VOICEVOX の GUI が起動して、キャラクター選択画面まで進んでいるか(起動直後はエンジン準備中)
  2. ブラウザで http://127.0.0.1:50021/docs が開けるか。開けなければポート違いなので、GUI の設定で確認して --host で指定

422 や speaker not found

--speaker の ID が存在しません。/speakers の一覧で確認してください。

--template で FileNotFoundError

雛形の .vpr は自分で作る必要があります(クイックスタートの 0.)。

再生すると歌っぽい/キーが変


利用上の注意


ファイル構成

voivo2vocalo/
├── README.md
├── README.html      この説明書のブラウザ版(ダブルクリックで開けます)
├── LICENSE            MIT License
├── voicevox2midi.py   テキスト / JSON / vvproj → .vpr(.mid)
└── aozora2txt.py      青空文庫 HTML / テキスト → 読み上げ用テキスト

ライセンス

MIT License です。改変・再配布・商用利用は自由です(著作権表示と LICENSE の同梱だけお願いします)。

配布元:https://tealtranquility.pages.dev/projects/voivo2vocalo

謝辞

このページは README.md と同じ内容です。ダブルクリックでブラウザで開けます。