
Pythonのオープンソースリポジトリでボイチェンを作ってみた
概要
2017年秋よりオープンソース化されている統計的声質変換(ボイチェン)のライブラリ「sprocket」をフォークし、リアルタイム声質変換機能を頑張って作っている。
元のリポジトリ
私がフォークしたリポジトリ `realtime`というフォルダを新しく作った
sprocketでリアルタイム音声変換を行うまでの2ステップ
①sprocketの既存の機能を用いて声質変換モデルを作成する。
②作成したモデルを用いてリアルタイム音声変換を行う。
①声質変換モデルを作成する
リアルタイム音声変換を行うためには、まずは声質変換モデルを作らなければならない。
パラレルデータの収録
sprocketでは、声質変換モデルの学習データとして「パラレルデータ」を用意する必要がある。パラレルデータとは、目標話者と同じ内容を同じように喋って収録した音声データのこと。
私はJVSコーパスというボイスを使った。ここには声優や俳優等100人のボイスが収録されている。私は10番目の方の声になりたかったので、この方のボイスのパラレルデータを収録した。
これがかなり大変で、収録にだいたい1ヶ月くらいかかった。そして、目標話者と比べて自分の滑舌の悪さ、発声の鈍さが顕著に分かり、かなり辛い!!声優さんってすごいーー
ただし、目標話者とタイミングを合わせようと頑張りすぎる必要はない。後ほどやるモデルの学習過程において、両者の収録音声のテンポやタイミングを自動的に合わせてくれるからだ。
ファイルを整える
声質変換モデルを作るためには、パラレルデータの
①ファイル名
②サンプリング周波数
が合致している必要がある。
ファイル名については、例えばパラレルデータの音声ファイルを`1.wav` `2.wav` ... `100.wav` のように収録したとして、これをJVSコーパスの音声ファイル名に合わせたい時は
などとすればよい。また、サンプリング周波数についてはffmpegを呼び出すことで簡単に変換できる。sprocketでは 16000Hz,22050Hz,44100Hz,48000Hz のパラレルデータを読み込むことができるので、この内のどれかのサンプリング周波数にする。
自分の分の音声ファイルと目標話者の分の音声ファイルを別々のディレクトリに入れ、このリポジトリの example/data/wavへ入れて準備完了。
声質変換モデルの学習
親切なことに、ここから先は元リポジトリにある `example` 内のソースコードを動かすだけでモデルを作れてしまう。モデルの学習方法は全てリポジトリに詳しく書かれているので、そちらを参照されたい。
学習が完了すると
・example/conf/pair/
・data/pair/
に新しいディレクトリがそれぞれ作成されて、声質変換に必要な色々なファイルがその中に入っている。
sprocketの詳しい仕組みについては以下に詳しく載っている。
②リアルタイム音声変換を行う
①での学習で生成されたファイルを使ってリアルタイム音声変換を行う。なお、生成されたファイルは名前を変えたり動かしたりする必要はない。全てリアルタイム音声変換器が読み込んでくれる。
パラレルデータのうち、自分の分のディレクトリ名を`SOURCE`、目標話者の分のディレクトリ名を`TARGET`にしたすると次のようにして実行する。
python realtime/main.py SOURCE TARGET
実行すると入出力についてそれぞれ使用可能なドライバ一覧が出てくるので、使用したいドライバの番号を指定する。なお、決まったドライバをコマンドラインに指定することもできる。
python realtime/main.py SOURCE TARGET --i 2 --o 4
入力デバイスの番号は --i で指定し、出力デバイスの番号は --o で指定する。
少し遅延はあるものの変換された声が聞こえてくると思う。自分の声を録音してから変換された声が再生されるまで、中間には2つのプロセスが起動している。これらのプロセスが声質変換を分担して行うことにより、途切れることのない声質変換を行えるようにしている。
録音した声の特徴量抽出がかなり時間がかかるのだが、特徴量変換(ボイチェンの核となる機能)は結構早く終わる。また、音声合成もあまり時間を取らない。このような事を考え、今回はプロセスを「特徴量抽出」と「特徴量変換+音声合成」に分けたのだ。
今の問題
・最尤系列変換法での声質変換しか対応していないのでそれ以外の方法での声質変換にも対応させたい。
・入力デバイスと出力デバイスそれぞれの取得方法が分からなくて、入出力デバイスをごっちゃにしたものを表示している。
・やはり音質がいいとは言えない。なんというか、結月ゆかりのような電子的な感じが残っている。リバーブ等を付けて音質向上を図りたい。
・私の持っているデバイス環境上で動くようにしか作ってないので、他人がこのプログラムを動かしたときに入力デバイスや出力デバイスを開けない可能性がある。
今後やりたいこと
・どうにかして音質を上げる(ように聞こえる)処置を行う
・つくよみちゃんコーパスを学習してつくよみちゃんになる
↓からダウンロードできる。
© Rei Yumesaki
・この方 ↓ みたいに「おじさんだよ~(美少女声)」する
🥕配信告知🥕
— 兎鞠まり🥕 (@tomari_mari) February 22, 2021
今日は20時からたこ焼き作りながら15万人記念配信するよおおおおお!!!!🐙❤️❤️
へへへ、、久々のたこ焼き作りだからたのしみ~!!!🥳✨
▼待機場所▼
15万人記念!雑談しながら久々にたこ焼き焼いて食べよ~!!!【兎鞠まり】 https://t.co/eldgYjZLPu pic.twitter.com/DgZW6ze5FY
(・ボイストレーニングを行なってから再収録する)