0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【歌声合成】VOICEVOXの苦手音域をPrettyPitchでカバーする

0
Last updated at Posted at 2026-10-19

背景

歌詞やメロディから動画を生成するSoramimic Videoで、VOICEVOXの歌声合成を使っています。VOICEVOXはライセンス面で利用しやすく、環境構築も簡単で、歌声の品質も気に入っています。

一方、実際にいろいろな曲を歌わせると、音域によって音程が外れたり、苦しそうに聞こえたりします。そこで、まずは曲全体をオクターブ単位で移調し、なるべく歌いやすい音域に収めています。それでも、曲の最高音と最低音の幅が広いと、一部の音符がはみ出します。

これまでは、はみ出した音符のF0(声の基本周波数)を補正していました。しかし、音程を合わせるだけでは、発声のかすれや不自然さが残ることがありました。

そこでPrettyPitchを試してみました。PrettyPitchはwavtechyukkyさんが2026年9月22日に公開した、音程の抑揚やビブラートを生成するモデルです。実際の歌声合成では音響モデルのLeapSingerとボコーダのNHVSingを組み合わせます。以下では、この組み合わせを「PrettyPitch」と呼びます。

PrettyPitchでは、VOICEVOXでも使っている波音リツを選べます。同じ波音リツを由来とする歌声でも、合成モデルと出力される声質は異なります。筆者は基本的にはVOICEVOXの歌声が好みだったため、VOICEVOXを中心に使い、苦手音域を含む部分だけPrettyPitchで補うことにしました。

比較条件

音域の基準とF0補正

今回の実装では、VOICEVOXの歌の先生スタイルについて、MIDIノート番号54〜78(F♯3〜F♯5)を得意音域の目安にしています。これはアプリ側で実測をもとに設けた基準で、VOICEVOXの全キャラクターに共通する公式の推奨音域ではありません。

比較の基準となるF0補正は、次の処理です。

  1. 音域外の音符について、有声区間のF0の中央値を求める。
  2. 指定音高とのずれが1半音以上あるとき、中央値が指定音高に合う倍率をF0に掛ける。
  3. 無声音の0 Hzは維持し、音符の端では補正量をなだらかに変える。

PrettyPitchに任せる範囲

F0補正だけの場合と、PrettyPitchで置き換える範囲を変えた3方式を比べました。

方式 PrettyPitchに任せる範囲
VOICEVOX+F0補正 全体をVOICEVOXで合成する
音符単位 得意音域をはみ出す音符だけ。連続する対象音はまとめる
前後1音 対象音符に前後1音を加える。120 ms以上の休符は越えない
フレーズ単位 120 ms以上の休符で区切り、音域外の音符を含むフレーズ全体を任せる

音符単位の場合も、PrettyPitchには前後約0.6秒の音符を渡しています。前後関係を含めて生成する範囲と、完成音声に採用する範囲を分けています。

フレーズ単位では、休符内に切り替え位置を置き、前後の余白を最大150 msまで取ります。

PrettyPitchを使う3方式とも、境界は20 msのクロスフェードで接続し、両エンジンの音量も合わせました。

使用した曲と設定

比較曲はEveの「廻廻奇譚」です。理由は開発中にf0補正の限界を感じたのがこの曲だったからです。高音が続き、オクターブ調整後も音域外の音符が多く残ります。この曲では、音域内に入る音符数を優先した結果、オクターブ移調量は0半音になっています。

項目 条件
比較対象の長さ 約223.9秒
推定音符の音域 MIDI 53〜86
音域外の音符 174音、合計約34.3秒
歌声 波音リツ(VOICEVOX:スタイル6000、PrettyPitch:話者2・スタイル0)
PrettyPitchの設定 seed 0、抑揚・ビブラートとも倍率1.0

聴き比べ

高音が続く約0:56〜1:11を、歌声だけで切り出しました。同じ音量係数を使い、PrettyPitchの3方式には共通の合成波形を使っています。

VOICEVOX+F0補正

別画面で再生する

PrettyPitch:音域外の音符だけ

別画面で再生する

PrettyPitch:前後1音も含める

別画面で再生する

PrettyPitch:フレーズ単位

別画面で再生する

筆者の聴感では、PrettyPitchを使った3方式はどれも、F0補正だけの場合より高音の苦しそうな感じが改善しました。その中では、フレーズ単位が最も自然に聞こえました。

曲全体での置き換え範囲は次のとおりです。

方式 置き換え区間数 置き換える長さ
音符単位 62 34.3秒
前後1音 38 48.6秒
フレーズ単位 13 87.0秒

フレーズ単位では、得意音域内の音符もPrettyPitchに任せることになります。VOICEVOXの声を残す範囲との交換条件ですが、今回の曲では、切り替えの少なさを優先するほうが筆者の好みに合いました。

低音側:女々しくて

「廻廻奇譚」は高音側の補正が主だったので、低音側の検証として、ゴールデンボンバーの「女々しくて」で、高音側と同じ4条件を比較しました。約0:17〜0:31の歌声を切り出し、同じ音量係数でそろえています。

VOICEVOX+F0補正

別画面で再生する

PrettyPitch:音域外の音符だけ

別画面で再生する

PrettyPitch:前後1音も含める

別画面で再生する

PrettyPitch:フレーズ単位

別画面で再生する

筆者の聴感では、こちらもフレーズ単位が最もよく聞こえました。

処理時間

約224秒の「廻廻奇譚」で、VOICEVOXとPrettyPitchを併用する3方式の合成時間を比べました。Ryzen 7 5700X・RTX 4060 Ti 16 GBの環境で、VOICEVOXはGPU版、PrettyPitchはCPU・4スレッドです。モデル読み込みと初回ウォームアップを除く各3回の中央値を使い、合計は両エンジンを順番に動かす場合の時間を足しています。

方式 VOICEVOX PrettyPitch 合計
音符単位 7.7秒 11.3秒 19.0秒
前後1音 6.3秒 11.3秒 17.6秒
フレーズ単位 4.9秒 15.1秒 20.0秒

PrettyPitchに任せる部分では、接続用の余白を残してVOICEVOXの波形生成を省いています。フレーズ単位はPrettyPitchの生成範囲が広がる一方、VOICEVOXの生成範囲を減らせるため、合計時間の増加はほかの2方式に対して最大約2.4秒に収まりました。実アプリケーションで他の時間がかかる処理とも組み合わせることを考えると、聴感の改善を優先できる時間差と判断しました。

2026/10/21追記:開発者の方より、PrettyPitchをGPUで高速化する方法をご教示いただきました。この方法でGPUを使ったところ、合計時間の目安もフレーズ単位が最短となりました。(末尾に詳細追記)

フレーズ単位を採用

今回の比較では、F0補正だけに比べてPrettyPitchを使ったほうが、高音部分の歌唱が好みに近づきました。PrettyPitch同士では、フレーズ単位でまとめる方法が最も自然に聞こえたため、Soramimic Videoに採用しました。

使用モデルとクレジット

歌声:VOICEVOX・PrettyPitch:波音リツ(カノン)

PrettyPitchのコードのMITライセンスと、配布モデル・ボコーダの利用条件は別です。本記事の比較は個人・非商用で行っています。モデル利用時はPrettyPitchの利用条件と第三者の権利・利用条件を確認してください。

比較楽曲:廻廻奇譚(作詞・作曲:Eve)。女々しくて(ゴールデンボンバー)。

追記: prettypitchをGPUで高速化(2026/10/21)

記事執筆当時は、PrettyPitchをGPUで動かしても十分な高速化が得られなかったため、上記の比較ではPrettyPitchをCPUで実行していました。その後、開発者の方から、PyTorch版でGPU実行すると高速化できると情報提供をいただきました。

実際に試したところ、かなり高速化されました。同じ「廻廻奇譚」の入力で、初回ウォームアップを除く3回の中央値を取ると、PrettyPitch担当部分の合成時間は、音符単位・前後1音で約1.6秒、フレーズ単位で約1.7秒でした。
今回は、NHVSingの波形生成をONNX版からPyTorch版に切り替え、GPU上で実行しています。この合成プロセスのVRAM使用量の観測ピークは約0.53 GiBでした。

別計測のVOICEVOXの値と合算した目安では、音符単位が約9.3秒、前後1音が約7.9秒、フレーズ単位が約6.6秒となります。フレーズ単位ではVOICEVOXの生成範囲を減らせるため、この条件では合計時間も最短になる計算です。この程度のVRAM使用量を許容できる環境であれば、聴感に加えて速度の面でも、フレーズ単位を選びやすくなりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?