現在、TTSを使用するには2つの方法があります。
- 事前生成:ビルド時に音声を生成し、スタンドアロンで再生します。事前に定義された文章に適しています。
- リモート:TTSサーバに音声文章を問い合わせ、生成された音声をストリームします。
現在、アクエストークのような__ローカル(オンデマンド)__のTTSは利用できませんが、プルリクエストは歓迎します!
どちらの方法を選んでも、まず外部のTTSエンジンを準備する必要があります。
以下がTTSののエンジンの候補になります。VoiceVoxはテスト済みです:
それぞれの公式ドキュメントも参照してください。
- 認証ガイドを通じて認証し、key.jsonを生成します。
key.jsonをscriptsディレクトリに保存します。
- coqui-ai/TTSをインストールします。
- サーバを起動します。
$ tts-server --port 8080 --model_name tts_models/ja/kokoro/tacotron2-DDCstackchan/manifest_local.jsonのconfig.tts.host|portにサーバー設定を保存します
{
"config": {
"tts": {
"host": "your.tts.host.local",
"port": 8080
}
}
}- API KEYに従い、API KEYを取得します。
stackchan/manifest_local.jsonのconfig.ttsにAPI KEYを保存します
{
"config": {
"tts": {
"type": "elevenlabs",
"token": "YOUR_API_KEY"
},
}
}以下のようなJavaScriptファイルに発話する文章を書き込みます(mods/monologue/speeches_monologue.jsなどを参照)。
// speeches.js
export const speeches = {
niceToMeetYou: 'Hello. I am Stach-chan. Nice to meet you.',
hello: 'Hello World.',
konnichiwa: 'Konnichiwa.',
nihao: 'Nee hao.',
}- npm run generate-speech-[google|coqui|voicevox]を実行します
- このスクリプトはサーバーから音声データを取得し、stackchan/assets/soundsにwaveファイルを保存します
- 音声ファイルとともにファームウェアを書き込みます
Robot#say(sentense: string)を呼び出します
import { speeches } from 'speeches'
const keys = Object.keys(speeches)
export async function onRobotCreated(robot) {
await robot.say('hello')
await robot.say(keys[0] /* 'niceToMeetYou' */)
}manifest_local.jsonのconfig.tts.typeプロパティを使用するTTSエンジンに合わせて設定します。
{
"config": {
"tts": {
"type": "remote",
"host": "your.tts.host.local",
"port": 8080
}
}
}Robot#say(sentense: string)を呼び出します。
// ...
export async function onRobotCreated(robot) {
await robot.say('Now I can speak any sentense you want.')
}