detamamoruのブログ

興味を持ったことや勉強したことに関して記事を書きます。主に低レイヤー寄りの記事を公開。

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

動作としては、

  1. 3秒間音声を読込み
  2. 音声データに対してWORLDを使ってパラメータを抽出
  3. パラメータを変換
  4. パラメータを音声に変換

ロボット声や、女性の(ような)声、早口、モザイク声に変換したりできます。一人でやっていて笑ってしまいました。結構面白いです。
これで、一応ソフトウェア版Voice changerは完成ということにしましょう!(笑)