bark-with-voice-cloneをGoogle Colaboratoryで試す
Bark is a transformer-based text-to-audio model created by Suno. Bark can generate highly realistic, multilingual speech as well as other audio - including music, background noise and simple sound effects. The model can also produce nonverbal communications like laughing, sighing and crying. To support the research community, we are providing access to pretrained model checkpoints ready for inference.
Barkはプロンプトでいろいろ話し方を制御できるTTS。
で、これをforkしてカスタムな音声からvoice cloneできるようにしたのが今回のやつ
To create a voice clone sample, you need an audio/text pair of less than 7 seconds. (limited testing shows better results with shorter samples (2-4 seconds))
10秒未満の音声でクローンができるとある。ちょっと期待。
で、notebookが提供されているけど、そのままだと動かないので、Google Colaboratory用に修正したnotebookを作ってみた。
公式のものとは以下が異なる。
- Google Colaboratoryでこのnotebookだけで完結するように修正
- 音声の録音用のインタフェースを追加(wavファイルをアップロードする必要なし)
かんたんに試せるようにしてあるので用法を守ってお試しください。
以下は補足。
notebook形式のスクリプトがいくつか用意されている
- generate.ipynb
- clone_voice.ipynb
単にTTSを動かしてみたいだけならgenerate.ipynbを使う。こちらはBark本家のものだと思う。もしくはHuggingFaceでUIがついているデモもある。
clone_voice.ipynbのほうが音声クローンの方。上にある通り、そのままでは動かないので修正済み。
ちなみに、最初、公式のnotebookを修正しつつ試していたときは、クローンまでは生成までされたんだけど、それを使ってTTSさせてみたら、
- 元音声とは似ても似つかない
- ノイズ混じりになる
- 音声が正しく出力されない
になってて、うーん、って感じだったのだけど、以下でヒントを貰えて、動くようになりました。ありがとうごさいます。
issueやコードの中身は追いかけてたのだけど、自分のそれが浅かった・・・
あと、Colaboratory上で音声録音できるインタフェース部分については以下を参考にさせてもらいました。
元のnotebookだとwavファイルを使うのだけど、上記のコードだとmp3を生成するようになってる様子。wavに書き換えればいいのかと思ったんだけど、JavaScriptでwavファイルを生成するのは結構めんどくさそうだった。
ただtorchaudioはmp3もそのまま扱えるようなので、そのまま渡しても何も問題なかった。ちゃんと読み込めてるか?は気になったので、matplotlibで波形出力するようにしてある。
所感
- 短い音声サンプルからここまでできるのはかなりすごいのでは。
- ただし、出力は安定してないし、品質的にもElevenLabsあたりのデモ見てるとさすがに劣る感がある。(それでも十分すごいんだけど)
- パラメータいろいろいじってみて試すのが良さそう。
あと、このあたりのテクノロジー、精度が上りすぎるとそれはそれでいろいろ問題になりそうと思う部分もある・・・
試してないけどこういうのもある。こっちのほうが以前からあるものの様子。
colaboratoryでpythonのバージョンが変わっていたので動かなくなっていた。修正した。