Voivo2Vocalo
日本語のテキストを、VOCALOID6 に朗読させるプロジェクトファイル(.vpr)に一発で変換するツールです。
絶対音感がなくても、ピアノロールに1音ずつ高さを打ち込まなくても、テキストを渡すだけで「それっぽく読む」VOCALOID プロジェクトができます。
青空文庫の HTML ──aozora2txt.py──▶ テキスト ──voicevox2midi.py──▶ .vpr ──▶ VOCALOID6 で再生
│
VOICEVOX エンジン(アクセントだけ借りる)
⚠️ 歌声合成で朗読させる「遊び」のためのツールです。トーク専用ソフト(VOICEVOX など)の自然さには届きません。 そのかわり、好きな VOCALOID ボイスで、テキストから一発で読ませられます。
しくみ
- VOICEVOX エンジンに文を渡し、
audio_queryで「モーラごとの読み・長さ・高さ」を受け取ります。 漢字の読みとアクセントは VOICEVOX が決めます。VOICEVOX の音声そのものは使いません。 - 1モーラを1ノートにして、VOCALOID の発音記号(
k a、S i、N\…)に変換します。 - 歌声合成のままだと「歌っている」感じになるので、朗読向けに次の調整をします。
- 高さを VOICEVOX の話者と同じ高さ に合わせる(
--target orig+1) - 抑揚の幅を 3割 に圧縮する(
--range 0.3) - ノートのピッチ設定(トランジション・ドリフト)を すべて 0 にする
- リバーブ(雛形に入っていれば)・歌唱スキル・自動ブレス・ビブラートを オフ にする
- 高さを VOICEVOX の話者と同じ高さ に合わせる(
- 歌詞・発音記号・パラメータ入りの
.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つ作っておきます。
- VOCALOID6 Editor で新規プロジェクトを作り、ボイスを選んでノートを1つ置く
(手元の
.vprを開いて VOICE を切り替えるのでも OK) miku.vprなどの名前で保存する
雛形の 最初のノートの設定 が、出力する全ノートに引き継がれます(ピッチのトランジション・ドリフトは毎回0で上書き)。
1. 青空文庫の HTML をテキストにする
python aozora2txt.py 46605_31178.html -o yamanashi.txt
- ルビは読み仮名に置き換えます(
幻燈《げんとう》→げんとう)。 - 括弧、区切りの「*」、図書カードなどは取り除きます。
- お試し用に先頭だけ切り出すなら
--head 5。漢字を残したいなら--keep-kanji。
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 で直すのがいちばん楽です。
- VOICEVOX の GUI でテキストを読み込み、読み・アクセント・間を直す
- プロジェクト(
.vvproj)として保存する 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」になります |
できないこと・既知の制限
- VOICEVOX ほど自然にはなりません。 1モーラの中で高さが一定(階段状)になる、無声化(「です」の「す」など)を再現できない、音量が一定、といった歌声合成の性質は残ります。
- 歌詞は VOICEVOX の発音どおりに入るので、助詞の「は」は「わ」と表示されます。
- 促音「っ」はノートにせず、無音にしています。
- VOCALOID6(VOCALOID:AI)以外のエディタでの
.vprの動作は確認していません。
トラブルシューティング
ConnectionResetError: [WinError 10054] で VOICEVOX につながらない
ブラウザや curl.exe http://127.0.0.1:50021/version では応答するのに Python だけ失敗する場合、セキュリティソフトや広告ブロッカー(AdGuard for Windows など)が python.exe の通信に割り込んでいる 可能性が高いです。
- フィルタリング対象のアプリから
python.exeを除外する - または「localhost をフィルタリング」をオフにする
[接続エラー] が出る
- VOICEVOX の GUI が起動して、キャラクター選択画面まで進んでいるか(起動直後はエンジン準備中)
- ブラウザで
http://127.0.0.1:50021/docsが開けるか。開けなければポート違いなので、GUI の設定で確認して--hostで指定
422 や speaker not found
--speaker の ID が存在しません。/speakers の一覧で確認してください。
--template で FileNotFoundError
雛形の .vpr は自分で作る必要があります(クイックスタートの 0.)。
再生すると歌っぽい/キーが変
- まず
--target origにして、VOICEVOX の元の声と交互に聞き比べてください。違和感の多くはキーのずれです。 - 抑揚が大げさなら
--rangeを下げてください。 - 声に響きが乗る場合は、エディタのオーディオエフェクトを確認してください。スクリプトがオフにするのは、雛形の中の
Reverb Timeを持つエフェクト・歌唱スキル・自動ブレスです(実行時にOFF:の行で確認できます)。
利用上の注意
- VOICEVOX: 本ツールは VOICEVOX の音声データは出力せず、読み・長さ・高さの情報だけを使います。それでも、各キャラクター(話者)の利用規約に目を通し、作品を公開するときは「VOICEVOX:冥鳴ひまり」のようにクレジットを入れておくことをおすすめします。
- VOCALOID: 生成した
.vprと、そこから書き出した音声の扱いは、お使いの VOCALOID ボイスバンクの使用許諾に従ってください。 - キャラクター: 初音ミクなどのキャラクターを使った作品を公開する場合は、各キャラクターのガイドライン(ピアプロ・キャラクター・ライセンスなど)に従ってください。
- 青空文庫: 著作権の切れた作品は自由に使えますが、各作品の図書カードで状態を確認してください。
ファイル構成
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
謝辞
- VOICEVOX — アクセント情報の取得に使用しています
- 冥鳴ひまり様はミクさん読み上げプロジェクトの母です。ひまりちゃんありがとう!!
- ピッチのトランジション・ドリフトを0にするアイデアは、SeleDreams さん(@seledreams_dev)に X でアドバイスをいただいたものです。ありがとうございます!
このページは README.md と同じ内容です。ダブルクリックでブラウザで開けます。