All Projects → r9y9 → Stav

r9y9 / Stav

Licence: other
Statistical voice conversion written in Go for signal processing backend, Python for model training and parameter conversions

Programming Languages

python
139335 projects - #7 most used programming language

STAV


VoiceConversion.jl を作る前に、統計的声質変換の実験に使っていたコードです。僕のお遊び用です。信号処理バックエンドはGo、モデルの学習、変換はPythonで書いていました。VoiceConversion.jlのほうが色々改善されていますが、このコードも役に立つこともあるのかなぁと思いながら、とりあえずアゲてみました。

  • [Go] Feature extraction from speech signals
  • [Go] Parallel data generation
  • [Python] Model training
  • [Python] Speech paramter conversion
  • [Go] Waveform generation

すべてをフルスクラッチで書くのは大変なので、楽をするために、信号処理のバックエンドにはSPTKとWORLDを使っています。Cで書きたくなかったので、Goでラップしたものを使っていました。

学術的な新しさはありませんので、ご了承ください。

おぼえがき

音声からの特徴抽出

gostav/extact_mcep.go を使って、wavファイルからWORLDベースのメルケプストラムを抽出します。scripts/extract_mcep.py を使えばOK

例.

python  extract.py --src_dir=~/data/cmu_arctic/cmu_us_clb_arctic/wav --dst_dir=~/data/vc/clb
python  extract.py --src_dir=~/data/cmu_arctic/cmu_us_slt_arctic/wav --dst_dir=~/data/vc/slt

データはJSONで出力されます。フォーマットは、コード参照(おぼえてない)

パラレルデータを作る

gostav/align.goを使って、DPマッチングを行います。scripts/parallel.pyを使えばOK。

python parallel.py --src_dir=~/data/vc/clb --tgt_dir=~/data/vc/slt --dst_dir=~/data/vc/clb_to_slb --diff

diffとつけると、差分特徴量として、パラレルデータを保存されます(これ設計が悪い、本当は学習時に、差分特徴にするか選択出来たほうがよい。VoiceConversion.jlではそうしました)

パラレルデータもJSONで出力されます。フォーマットは、コード見てくださいおねがいします

変換モデル学習

GMMのみサポート

python train.py --conf recipes/settings.yaml 

学習条件は、yamlで書けるようにしていました。しばらく待つと、デフォルトの設定では gmm_clb_to_slt.pklというファイルにGMMのパラメータが保存されます。

パラメータ変換

学習したGMMを元に、メルケプストラムを変換します。

python vc.py --gmm gmm_clb_to_slt.pkl ~/data/vc/clb/arctic_a0028.json converted.json   

convered.json に変換後のパラメータが出力されます。

音声波形の再合成

python diff_synthesis.py --input ~/data/cmu_arctic/cmu_us_clb_arctic/wav/arctic_a0028.wav --mcep converted.json

converted.wav ができるので、聴いてみる。

以上、適当に覚えてることを書いてみました。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].