Hiho's Blog

声優統計コーパスをアライメントしてみる

2017-11-03

目次

  • (背景)声質変換用のデータを作るために音声アライメントを試してみたい
  • (手法)声優統計コーパスのデータを使用し、MFCCでアライメントした
  • (結果)アライメント後の音声はところどころ伸びていた。無音とする閾値を下げると伸びは抑制された。
  • (考察)もっと完璧に揃うと思っていた。
話者1のメルスペクトログラム
話者2のメルスペクトログラム

背景

DeeeeepLearingを使って声質変換してみたい。 どうやら最初に、違う話者による同じ発話内容の音声を揃える必要があるらしい。 声質変換用のデータを作るために音声アライメントを試してみた。

手法

データセットは声優統計コーパスの音声データを使用した。 話者はfujitou_normal(話者1)とtsuchiya_normal(話者2)を選んだ。

アライメント用の特徴量はいろんな文献に従いMFCCとした。 MFCC抽出にはWorldと、そのpythonラッパーpyworldを用いた。

音声のアライメントはMFCCにDTWを適用した結果を用いた。 DTWは音声変換の実装例アライメントされた音声の生成は、DTW結果のindexに従ってSTFTを並び替え、STFTを逆変換して求めた。

比較用にメルスペクトログラムを求め、作図に用いた。 これの生成はtacotronの実装例を参考にした。

コードはgistに公開した。 無音とする閾値はlibrosa.effects.splittop_dbで変更できる。

結果

アライメントされた音声

話者1と話者2の音声をアライメント結果は以下のようになった。

話者1の元ボイス
話者2の元ボイス
アライメントされた話者1のボイス
アライメントされた話者2のボイス

前半はきれいに揃っているが、後半の最後は伸びた感じになっていた。

アライメントされたメルスペクトログラム

先程の音声のメルスペクトログラムは以下のようになった。

話者1の元ボイスのメルスペクトログラム
話者2の元ボイスのメルスペクトログラム
アライメントされた話者1の元ボイスのメルスペクトログラム
アライメントされた話者2の元ボイスのメルスペクトログラム

無音区間の部分アライメントに悪影響しているようだった。

無音区間の閾値を下げてアライメントした結果

無音区間とする音圧の閾値を下げてアライメントした。 librosa.effects.splittop_dbをデフォルト値から20にした。

話者1のボイス
話者2のボイス
話者1のメルスペクトログラム
話者2のメルスペクトログラム

ところどころブザーのような音になった。よくなっているように思える。

考察

DTWの仕組みから考えて無音区間は点的なのだろう。積極的に排除した方がいい。 (声質変換の論文の実験データ項目を見ても、MFCCを使った、程度のことしか書いてなかった。)

DTWで音声が完璧に揃えられると思っていたけど、いまいちだった。 とりあえずこのまま機械学習の入出力にしたいと思う。

MFCCでDTWして別のデータを並び替えるために、DTWAlignerに別のデータを与える設計にしたが、これは良くない。 librosa.effects.trimのように、インデックスを返す実装の方がいい。