😽

色々なボイチェンの遅延を実測した話

に公開

こんにちは。GokRackこと極落にんじんです。

こちらの記事は、先日のBeatrice VST の遅延を実測した記事の続きです。
https://zenn.dev/gokrack/articles/2f50ef6cb9531f

私生活でもう少ししたら嵐のような忙しさになることが予見されているのと、前回記事を書いてからBeatrice のスタンドアロンのGUIツールである beatrice-clientが公開されたり、低遅延声質変換を謳うParavov2.0がリリースされたり、CoeFont Voice Changerがリリースされたりと、声質変換界隈で気になる対象が増えたので、この嵐の前の静けさのような時間のあるうちに前回記事でやり残していたVCClientの遅延測定と一緒にまとめて遅延を測定してみた話となります。

測定条件

詳しい測定機材のセットアップや測定手法については前回記事と同じですのでそちらをご参照ください。
なお、使用したオーディオインタフェースと設定は下記の通りとなります。

  • オーディオインタフェース: Yamaha/Steinberg UR12
    • サンプリング周波数(fs): 48kHz
  • ASIOフレームサイズ: 128 サンプル

また、PCについては下記のようなスペックです。

  • OS : Windows 11Pro 24h2
  • CPU : Ryzen 5600X
  • GPU : RTX 2080 Ti
  • Mem : DDR4-2933 32GB

測定に使ったモデルは、beatrice と RVC については前回同様東北きりたん歌唱データベースを用いて私の手元で学習して作ったモデル、 paravo については無料で使えるずんだもん(ノーマル)、CoeFontについてもデフォルトの Alli を使用しています。[1]

測定結果

  • beatrice-client (v0.2.0)

    • 遅延量: 約 138.7ms (6659サンプル)
  • paravo (v2.1.1)

    • 変換速度:5 の場合、遅延量: 約233.5ms (11206サンプル)
    • 変換速度:10 の場合、遅延量: 約163.3ms (7839サンプル)
  • CoeFont (v0.3.0)

    • 遅延量: 約350.2ms (16809サンプル)
  • beatrice v2 @ vcclient v2.0.78b

    • chunk: 2400[0.05sec] の場合、遅延量: 約426.8ms (20488サンプル)
    • chunk: 4800[0.1sec] の場合、遅延量: 約518.7ms (24899サンプル)
  • RVC @ vcclient v1.5.3.18a

    • chunk:128[341.3ms]、extra:4096、rmvpe の場合、遅延量: 約 1034ms (49633サンプル)
    • chunk:192[512.0ms]、extra:4096、rmvpe の場合、遅延量: 約 1375ms (66011サンプル)
    • chunk:320[853.3ms]、extra:4096、rmvpe の場合、遅延量: 約 1717ms (82403サンプル)
  • RVC @ vcclient v2.0.78b

    • chunk:12000[0.25sec]、extra:3840[0.08sec]、rmvpe_onnx の場合、遅延量: 約 817.5ms (39239サンプル)
    • chunk:24000[0.5sec]、extra:3840[0.08sec]、rmvpe_onnx の場合、遅延量: 約 1609ms (77209サンプル)
  • 参考までに前回結果: beatrice-vst (v2.0.0-beta4)

    • API:ASIO、フレームサイズ:128の場合、遅延量: 約 50.7ms (2435サンプル)

所感

beatrice-client の遅延は前回記事でWASAPIを使用した場合の遅延と近いので、おそらく内部的にはWASAPIが使われてる感じなんでしょうか。
前回記事で述べました通り、オーディオインタフェースとオーディオAPIの遅延を除いた beatrice のアルゴリズム遅延は大体 36ms 程度なので、UR12 & WASAPI 単体での遅延は約 100ms ということになりますね。

paravo については一見公称値の 0.06秒と乖離があるように見えますが、beatrice-client と同程度のオーディオインタフェース&APIの遅延の約 100ms が入ってるとすると、それを除いたアルゴリズム遅延は変換速度10の時に概ね 60ms となるため、公称値がアルゴリズム遅延の部分を指しているのであれば順当な結果であると言えそうです。
となると、beatrice-client と paravo については内部的に ASIO が選択できたらもっと速くなりそうですね。[2]

vcclient については beatrice を使用することで RVC に比べて大幅に遅延量を減らすことは出来ますが、流石に beatrice-client や beatrice-vst に比べると遅延が生じていますね。
また、chunkの値に記載されている遅延量から概ね2~3倍程度時間がかかっています。これは想像ですが、chunkがダブルバッファになってるとかで2倍になって、更にオーディオインタフェース&API遅延と通信の遅延が固定で300msくらい乗っかってこんな感じになってるのかなという気がします。
なお、RVCについては設定画面上はもっと下げる設定はできるのですが、今回のパラメータよりも下げると動作が不安定になっていたため、私の環境ではこれくらいが限度っぽいです。

今回は、前回の補足みたいな記事なのでこんなところで。

脚注
  1. どれもピッチ変換は大体同じくらい(beatriceやRVCで言うところの+12)で調整してます ↩︎

  2. beatrice-client についてはコードが公開されてるんだし改造しようかという思いが一瞬頭をよぎったんですが、Rust+TypeScriptは扱ったことがないので流石にちょっと手が出せなかったですね… ↩︎

Discussion