VOICEVOXをREST APIとして利用する
チャットボットの音声としてVOICEVOXの利用を検討した際に、REST APIとして利用する方法を調査した内容をまとめた。
Table of Contents
VOICEVOXとは
VOICEVOXは音声合成ソフトウェアである。クレジット表記を行い利用規約に同意すれば、商用、非商用問わず無料で利用できる。
https://voicevox.hiroshiba.jp/
APIを確認する
VOICEVOXを起動した上で、以下にアクセスすればAPIを確認できる。
APIを利用して合成音声を行う
/**
* スピーカーIDはhttp://127.0.0.1:50021/speakers で取得できる。
*/
const speakerId = "10";
const text = "Hello, VOICEVOX!";
// まずAudio queryを作成する
const requestUrl = new URL("http://127.0.0.1:50021/audio_query");
requestUrl.searchParams.append("speaker", speakerId);
requestUrl.searchParams.append("text", text);
const query = await (
await fetch(requestUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
})
).json();
// 合成音声を取得する
const requestUrl = new URL("http://127.0.0.1:50021/synthesis");
requestUrl.searchParams.append("speaker", speakerId);
requestUrl.searchParams.append("enable_interrogative_upspeak", "true");
const audioData = await (
await fetch(requestUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
accpet: "audio/wav",
},
body: JSON.stringify(query),
})
).blob();
// 音声を再生する
const audio = new Audio(URL.createObjectURL(audioData));
audio.play();
localhostではなく127.0.0.1を利用する
VOICEVOXのAPIを利用する際、localhostではなく127.0.0.1を利用すると応答速度が数秒単位で短縮されるという話がある。 実際、私の環境でもlocalhostを利用した場合、数秒の遅延が発生した。
具体的な理由は不明だが、以下の記事が関連しているかもしれない。
https://serverfault.com/questions/66347/why-is-the-response-on-localhost-so-slow/444338
セルフホスティングする
Dockerイメージが公開されているため、これをCloud Runなどで公開すれば良い。