O hirunewani blog

VOICEVOXをREST APIとして利用する

Created at

チャットボットの音声としてVOICEVOXの利用を検討した際に、REST APIとして利用する方法を調査した内容をまとめた。

VOICEVOXとは

VOICEVOXは音声合成ソフトウェアである。クレジット表記を行い利用規約に同意すれば、商用、非商用問わず無料で利用できる。

https://voicevox.hiroshiba.jp/

APIを確認する

VOICEVOXを起動した上で、以下にアクセスすればAPIを確認できる。

http://localhost:50021/docs

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などで公開すれば良い。

https://hub.docker.com/r/voicevox/voicevox_engine