はじめに
私は作曲が趣味で、音声合成技術を使った歌を作る、いわゆるボカロPなんかもやっています。近年ではフリーの音声合成エンジンも出ていて、中でもAIの技術を用いたNEUTRINOは調声なしでいい歌い方をしてくれて、なおかつGPUを用いた高速な出力にも対応しているので重宝しています。
本記事はNEUTRINOを使った時のトラブルシューティングについて記載しています。
エラー内容
私の制作環境ではグラフィックカードNVIDIA GeForce RTX 3070搭載です。VRAMは8GBなので、推奨環境の6GBを超えています。それにも関わらず、GPUを用いて出力しようとすると、NSFで以下のエラーが発生します。
2023-02-13 20:12:28.1606929 [E:onnxruntime:, sequential_executor.cc:369
onnxruntime::SequentialExecutor::Execute] Non-zero status code returned while running Pad node.
Name:'Pad_1108' Status Message: D:\a\_work\1\s\onnxruntime\core\framework\bfc_arena.cc:342
onnxruntime::BFCArena::AllocateRawInternal
Failed to allocate memory for requested buffer of size 885197568
バッファのためのメモリを確保できないと言っています。CPUのみでの出力だとエラーが出ずに回避はできますが、せっかく割といいGPUを搭載しているマシンですので、何とかしたいところです。
原因
NEUTRINOのNSFでは、GPUを用いた場合のVRAMの使用量は楽譜中のフレーズの長さによって決まります。フレーズは休符またはブレス記号で囲まれた区間となります。このフレーズが長すぎる場合、メモリ不足が起きます。そういえば、楽譜作成ソフトで楽譜を見た時、休符もブレスもなくて、休みの無い歌わせ方をしていました。
対処方法
楽譜作成ソフトで休符またはブレス記号を入れます。休符だと、歌のメロディを変える必要が出てくるので、例ではメロディに影響がないブレス記号を入れました。ちなみに、このブレス記号を入れると、息つぎしている音もリアルに入ってきます。
例:
楽譜作成ソフトは、配布元が推奨しているMuseScoreを使っています。ブレス記号の入れ方ですが、画面左側上の方の、ブレスと休止を開いて、カンマをドラッグ&ドロップすることで入れることができます。画面右側、楽譜の赤枠で囲っているところが実際にブレス記号を入れた個所になります。試行錯誤は必要ですが、こうしてブレス記号で区切ることによって、NSFでエラーが出なくなりました。
おわりに
NEUTRINOは本当に強力なソフトウェアですので、どんどん広まっていってほしいです。もし同じ事象で悩んでいる人がいたら、この記事で解決できることを願っています。