目次
- (背景)声質変換用のデータを作るために音声アライメントを試してみたい
- (手法)声優統計コーパスのデータを使用し、MFCCでアライメントした
- (結果)アライメント後の音声はところどころ伸びていた。無音とする閾値を下げると伸びは抑制された。
- (考察)もっと完璧に揃うと思っていた。
背景
DeeeeepLearingを使って声質変換してみたい。 どうやら最初に、違う話者による同じ発話内容の音声を揃える必要があるらしい。 声質変換用のデータを作るために音声アライメントを試してみた。
手法
データセットは声優統計コーパスの音声データを使用した。
話者はfujitou_normal
(話者1)とtsuchiya_normal
(話者2)を選んだ。
アライメント用の特徴量はいろんな文献に従いMFCCとした。 MFCC抽出にはWorldと、そのpythonラッパーpyworldを用いた。
音声のアライメントはMFCCにDTWを適用した結果を用いた。 DTWは音声変換の実装例アライメントされた音声の生成は、DTW結果のindexに従ってSTFTを並び替え、STFTを逆変換して求めた。
比較用にメルスペクトログラムを求め、作図に用いた。 これの生成はtacotronの実装例を参考にした。
コードはgistに公開した。
無音とする閾値はlibrosa.effects.split
のtop_db
で変更できる。
結果
アライメントされた音声
話者1と話者2の音声をアライメント結果は以下のようになった。
前半はきれいに揃っているが、後半の最後は伸びた感じになっていた。
アライメントされたメルスペクトログラム
先程の音声のメルスペクトログラムは以下のようになった。
無音区間の部分アライメントに悪影響しているようだった。
無音区間の閾値を下げてアライメントした結果
無音区間とする音圧の閾値を下げてアライメントした。
librosa.effects.split
のtop_db
をデフォルト値から20
にした。
ところどころブザーのような音になった。よくなっているように思える。
考察
DTWの仕組みから考えて無音区間は点的なのだろう。積極的に排除した方がいい。 (声質変換の論文の実験データ項目を見ても、MFCCを使った、程度のことしか書いてなかった。)
DTWで音声が完璧に揃えられると思っていたけど、いまいちだった。 とりあえずこのまま機械学習の入出力にしたいと思う。
MFCCでDTWして別のデータを並び替えるために、DTWAlignerに別のデータを与える設計にしたが、これは良くない。 librosa.effects.trimのように、インデックスを返す実装の方がいい。