たこやき部屋

SteamVRを使って、Unityでゲームを開発したい

【VOICEVOX】ずんだもんを制御してみるのだ

Visual Studio 2022
VOICEVOX Ver.0.13.3

を使用してます。

VOICEVOXをプログラムから呼び出して見たくて、調べてみました!

「VOICEVOX」は無料で使えるテキスト読み上げソフトです。

VOICEVOXの機能を呼び出すには

httpを使ってVOICEVOXにコマンドを送り、結果を受け取ることで音声合成したデータが得られます。
どんなコマンドがあるのかは、VOICEVOXを起動してこのURLにアクセスすると、使い方が見れます。

http://localhost:50021/docs

※VOICEVOXが起動している状態で見てね。


試してみる

試してみるのに一番わかりやすいのが「speakers」のコマンドで、このコマンドを要求すると使えるキャラやしゃべり方の一覧がみれます。
上記URLの説明文の中から、VOICEVOXに向けてコマンドが発行できるので試してみてください。


「Try it out」を押すと「Execute」のボタンが現れるので押して実行してみよう!


下の方に送信した結果が出てます!


jsonでキャラの一覧が返ってきたよ!

しゃべらせてみる

VOICEVOXに読み上げさせるには以下のコマンドを発行したらOKです。

audio_query 音声合成用のクエリを作成する synthesisに渡すjsonが返ってくる(application/json)
synthesis 音声合成する Waveデータが返ってくる(audio/wav)

「audio_query」の画面でパラメータを入力して「Execute」を押すと、curlのコマンドが出てきます。
「speaker」の値は、さっきのキャラ一覧で出てきた「id」の値です。

curlはhttpのコマンドが発行できるツール、Windows10だと標準で入っているハズです。

audio_queryを発行してみよう!
Windowscurlを使うには、ちょっとcurlのコマンドを修正しないといけないです。
↓こんな感じ、結果のjsonは「zunda.json」に出力するようにしてます。

curl -X POST "http://localhost:50021/audio_query?text=%E3%81%9A%E3%82%93%E3%81%A0%E3%82%82%E3%82%93%E3%81%AA%E3%81%AE%E3%81%A0&speaker=3" -H "accept: application/json" -d "" > zunda.json

synthesisを発行してみよう!
出力されたjsonを使って、synthesisを呼び出します。ファイルから読み込むのは「@ファイル名」です。
これも結果はファイルに出力!

curl -X POST "http://localhost:50021/synthesis?speaker=1&enable_interrogative_upspeak=true" -H "accept: audio/wav" -H "Content-Type: application/json" -d @zunda.json > zunda.wav

できたWavファイルを再生してみよう!
しゃべってくれたかな?

プログラムにしてみよう

C#で作ってみました。

  1. 上のテキストボックスにしゃべらせたい文字を入力
  2. 「button1」を押すと「audio_query」でjsonに変換、テキストボックスに出力
  3. 「button2」を押すと「synthesis」でwavにして再生

ついでにクリップボードを監視して、テキストボックスが入ってきたら勝手に読み上げるようにしています。
ウィンドウメッセージの「WM_CLIPBOARDUPDATE」を見ることで、クリップボードが更新されたことがわかります。

エラーのチェックとかは省いています。

その他

実行する時はVOICEVOXを起動している必要がありますが、「VOICEVOX.exe」は動いてなくても良くって、VOICEVOXが起動している時に裏で動いている「run.exe」が動いていればOKです。
「VOICEVOX.exe」と同じフォルダに「run.exe」があると思います。
VOICEVOXを閉じて「run.exe」を動かすと、こんな感じで送受信している様子がみれます。

VOICEVOXのその他のコマンドとかの使い方はVOICEVOXのgithubを参考してください。

https://voicevox.github.io/voicevox_engine/api/