Voice changerを作りたくて(5): WORLDでボイチェ
出田 守です。
このシリーズは、ほとんど何もわからない状況からVoice changerを作る過程の記録です。
環境(私も含めて)
[私について]
算数・数学: 苦手で避けてきた(後悔中)。おそらく中学2年生で止まっている。
プログラミング: 努力中
[開発環境 - PC0]
OS: Windows10 Home 64bit 1903
CPU: Intel Core i5-3470 @ 3.20GHz
Rust: 1.39.0
RAM: 8.00GB
Editor: Vim 8.1.1
Terminal: PowerShell
WORLD
WORLDとは
WORLDは、高品質な音声分析合成システムです。音声から、基本周波数、スペクトル包絡、非周期性指標というパラメータを高精度に推定できます。また、これら3つのパラメータを変換し、再び音声として合成することも簡単にできます。
既に、C++やPythonでWORLDは実装されており、簡単に使うことができます。
参考:
http://www.kisc.meiji.ac.jp/~mmorise/world/introductions.html
https://github.com/mmorise/World
https://github.com/JeremyCCHsu/Python-Wrapper-for-World-Vocoder/blob/master/pyworld/pyworld.pyx
https://qiita.com/ohtaman/items/84426cee09c2ba4abc22
Rustラッパーを作る
今回のソフトウェア版Voice changerはRustで作ることに決めていました。しかも、2019年中に!
私が調べた限りでは、WORLDのRust用ラッパーがなかったので、FFIの勉強もかねて作ってみることにしました。
そしてRustのSlackコミュニティの方々にお世話になりつつ、暗中模索の末、(一応)完成したWORLDのRustラッパーが以下です。
github.com
crates.io - Rust-WORLD
Rust-WORLDでVoice changer(Vocoder)を作る
上で作ったWORLDのRust用ラッパーで作ったVoice changerが以下になります。
github.com
動作としては、
- 3秒間音声を読込み
- 音声データに対してWORLDを使ってパラメータを抽出
- パラメータを変換
- パラメータを音声に変換
ロボット声や、女性の(ような)声、早口、モザイク声に変換したりできます。一人でやっていて笑ってしまいました。結構面白いです。
これで、一応ソフトウェア版Voice changerは完成ということにしましょう!(笑)