DeepLearningでアニメキャラのボイロを作った話
はじめに
みなさんは Siri とかカーナビとか音声ガイダンスの声が自分の好きなキャラクターの声だったらなーと思ったことはありますか?ありますよね?私は別に思ったことはありませんが。
あの辺りの音声生成は音声合成と呼ばれる技術が使われていて可愛い系の声だと VOICEROID シリーズ (ゆかりさん、琴葉姉妹) とかが有名ですね。
私もあんな感じのが自分の好きなキャラクターで欲しいなーと思ったので Deep Learning の力を借りてとあるアニメキャラの VOICEROID 作りに挑戦してみました。
闇に葬ろうかとも考えていましたが溜まった知見が失われるのもちょっと勿体無い気がしたのでブログでまとめていこうと思ってます。
出来上がったもの
- サンプル1 (誰かわかるかな? 発言は適当)
もうちょっとサンプルも載せておきます。
サンプル2
サンプル3
うまく行かないケースについて説明してもらっています。
サンプル4
サンプル5
ついでに声の高さの情報を入力に入れることで高さをコントロールできるようにしました。
(厳密に高さが変わる訳ではなく、その高さのデータの分布に生成結果が寄るだけ。)
サンプル2 の声を高くした版
サンプル2 の声を低くした版
さらに今回は単語単位で声の高さを調節できるようにもしてみました。
こんな感じの UI を作ってまして、手でいじれるようにしています。
UI イメージ
生成音声
声の高さの調整を変えた版
生成音声
まぁ思った通りに変わることはほとんどないのですが、色々試しているといいものが出来たりして調整するのがすごく楽しいです。
全部固定値で入れてもある程度変わってくれますが文が長くなるとイントネーションは残念な感じになります。固定値でなくここも推論させてもいい気がしますが、めんどくさいので手で調整するのが楽しいのでやってません。
あと、こんな感じに音声速度も変えられます。
0.5 倍速
2 倍速
作り方
出来上がるまでの大まかな流れはこんな感じ。細かいことは書ききれないのでまた別記事でまとめていく予定です。
- アニメから音声抽出
- 声とBGM分離
- キャラクターが話しているところのみ切り取り
- 音声に対応するテキストを作成
- 前処理
- Deep Learning モデル学習
データに関しては結構手作業でつくるゴリ押し方法をとってます (一番つらい作業だった...)。 ちゃんと計算はしてないですがだいたい合計 1時間 くらいのデータになりました。
オープンデータと違って出来上がったデータセットはノイズが多いとか発話のテンションがバラバラとかテキストの分布が(音素のバランスが)偏っているとか問題だらけだったのでそこが難しいポイントだった気がします。ただ、テンションがバラバラなのはうまくモデルを作ればいろんなテンションの発言を生成できるということなので、これはメリットかもしれません。
Deep Learning モデルは Nvidia の Tacotron2 + Waveglow をベースに使用しました。 あとは この方の手法 も大変参考にさせていただいてます。
おわりに
クオリティに関しては全体的に少しノイズが乗った感じになっていて自分的にはもうあと一歩足りないくらいかなと思ってます。 ですが、モデルをここまで作って燃え尽きてしまったので (すでに 5, 6 ヶ月は作業してるし...)、何かモチベがない限りはもう更新はしないつもりです。誰かが一緒に開発してくれるとか、面白い論文が出るとか、2期が始まるとか、があれば...全部待ってます!
次回はデータの作り方の細かい方法の話をまとめます。