Text to Speech (TTS)の設定
Text to Speech (TTS)は、チャットのメッセージとゲームの語りを音声で読み上げます。このガイドでは、TTSをオンにする方法、音声サービスと声の選び方、自動再生の設定、メッセージごとの操作を説明します。
クイックスタート
- 音声合成のカードを開き(手順は下記)、Use text to speech(音声合成を使う)をオンにします。
- Source(音声の提供元)を選び、API key(APIキー)にキーを貼り付けます。
- Preview(試聴)をクリックして、サンプルを聞きます。
- チャットで、メッセージの下にあるSpeak(読み上げ)をクリックします。
音声合成をオンにする
TTSの設定は、ほぼすべてが1つのカードにまとまっています。TTSをオンにしただけでは、何も読み上げは始まりません。各メッセージのSpeak(読み上げ)ボタンとAuto-play(自動再生)の項目が表示されるようになります。何をいつ読み上げるかは、引き続き自分で選びます。
- 上部バーのConnections(接続)をクリックし、続いてAdd(追加)をクリックします。Add account(アカウントの追加)ウィンドウが開きます。
- Voice(音声)の下でText to speech(音声合成)を選びます。カードが開きます。すでにPocketTTSを使っている場合は、同じカードがOn this device(このデバイス上)の下にもあります。
- Use text to speech(音声合成を使う)をオンにします。オフのあいだは、何も読み上げられません。
- Source(音声の提供元)の一覧を開き、サービスを選びます。
Sourceとは、音声を生成するサービスのことです。
- OpenAI-compatible: OpenAI、またはOpenAIのTTS形式に合わせた任意のサーバー。これがデフォルトです。
- ElevenLabs: ElevenLabsの音声サービス。
- PocketTTS: 自分のコンピューターで動かす無料の音声サーバー。
- xAI Voice: xAIの音声サービス。
MarinaraはSourceごとに、キー、アドレス、モデル、声、パラメーターを別々のプロファイルとして保存します。Sourceを切り替えると、そのSourceで前回使った設定が戻ります。まだ設定していないSourceは、デフォルトの状態から始まります。
リクエストは、Marinara自身のサーバーを経由して送られます。APIキーは、サーバー上で暗号化して保存されます。キーを保存すると、欄には伏せ字の点が並び、実際のキーがブラウザーに返ることはありません。
音声の接続を使う
Audio(音声)のアカウントをすでに追加している場合(対応しているAIプロバイダーを参照)は、その詳細をもう一度入力する必要はありません。そのアカウントは、Source(音声の提供元)の一覧のAudio providers(音声のプロバイダー)の下に、ソースの種類をかっこ内に添えて表示されます。
- Sourceの一覧を開き、そのアカウントを選びます。
- 声と、下にあるそのほかの設定を選びます。
Marinaraはそのアカウントのアドレス、キー、モデル、Request timeout (seconds)(リクエストのタイムアウト、秒単位)を使うので、カードではそれらの欄が隠れます。キーはアカウントの中にとどまり、カードにコピーされることも、ブラウザーに送られることもありません。新しいキーなど、アカウントに加えた変更はすぐに反映されます。
声、速度、そのほかの読み上げの設定は、アカウントごとに保存されます。同じ種類のアカウントどうしでも、設定を共有することはありません。通常の4つのSourceの設定は元のまま残ります。カードのスイッチは、引き続き通常のTTSのオンとオフを切り替えます。
選んだアカウントが削除された場合や使えない場合、カードにはMissing Audio providerと表示され、別のSourceを選ぶまで何も読み上げられません。Marinaraが勝手に切り替えることはありません。アカウントが声の一覧を返す場合、保存済みの声のうち一覧にないものを、カードが名前で示します。
アドレス、キー、モデルを設定する
音声のアカウントを選んだ場合は、ここを飛ばしてください。これらはアカウントから使われます。
- Base URL(ベースURL)を確認します。Sourceごとにデフォルトが入ります(下の表を参照)。変更するのは、プロキシや自分で運用するサーバーを使う場合だけです。
- API key(APIキー)にキーを貼り付けます。既存のキーをそのまま使うときは、伏せ字の点を残しておきます。キーを削除するときは、欄を空にします。
- Model(モデル)を確認します。Sourceごとにデフォルトが入ります。サービスが対応している別のモデルを入力することもできます。
| Source | デフォルトのBase URL | デフォルトのモデル | デフォルトの声 |
| OpenAI-compatible | https://api.openai.com/v1 | tts-1 | alloy |
| ElevenLabs | https://api.elevenlabs.io | eleven_multilingual_v2 | なし、自分で選ぶ必要があります |
| PocketTTS | http://localhost:8000 | pocket-tts | alba |
| xAI Voice | https://api.x.ai/v1 | grok-tts | eve |
ElevenLabsの場合、Modelの一覧には、自分のアカウントで使える読み上げモデルが読み込まれます。通常の読み上げモデルを選んでください。IDにttvを含むモデルは音声デザイン用で、テキストを読み上げられません。選ぶと、読み上げモデルを使うように促すエラーが出て、再生に失敗します。
PocketTTS
PocketTTSはMarinaraに内蔵されていません。公式PocketTTSサーバーを別途インストールし、uvx pocket-tts serveで起動してください。Marinaraがダウンロードや管理をすることはありません。公式サーバーはhttp://localhost:8000を使います。ホストやポートを変えていなければ、Base URLはこの値のままにします。Marinaraは公式のmultipart /tts APIを検出します。OpenAI互換PocketTTSラッパー用の独自URLも引き続き使えます。
リクエストのタイムアウト
Marinaraは、読み上げる1行ごとに最大60秒待ちます。自分のコンピューター、特にノートパソコンで動かす音声サーバーでは、長い行にもっと時間がかかることがあります。Modelの下にあるRequest timeout (seconds)(リクエストのタイムアウト、秒単位)の値を大きくしてください。範囲は10秒から3,600秒です。
音声のアカウントには、そのエディターのDefault voice(デフォルトの声)の下に、独自のRequest timeout (seconds)があります。Sourceとして選んだものも含め、音声のアカウントを通して読み上げるチャットは、その上限を使います。カードの上限は、Preview(試聴)を含め、カード自体の設定による読み上げに適用されます。1行に時間がかかりすぎた場合、エラーには、Marinaraが何秒待ったかと、どの設定の値を大きくすればよいかが表示されます。
声を選ぶ
Voice option(声の割り当て方)で、声をどう割り当てるかが決まります。
- One voice for all: すべての話し手が同じ声を使います。これがデフォルトです。
- Selected per character or persona: 選んだキャラクターやペルソナに、それぞれの声を割り当てます。
全員で1つの声を使う
Shared voice(共有の声)で声を選びます。サービスの実際の声の一覧を読み込むには、接続情報を入力してRefresh voices from provider(プロバイダーから声を再読み込み)ボタン(円形の矢印アイコン)をクリックします。再読み込みの前にカードを保存するので、入力したばかりのキーもすぐに使われます。接続する前は、欄が空にならないよう、短い内蔵の一覧が表示されます。サービス側でエラーが起きたときは、その代替の一覧を再読み込みの成功のように見せず、エラーを表示します。
公式PocketTTSサーバーには声の一覧を返すエンドポイントがないため、Marinaraは内蔵の声を表示し、一覧の横に、別の内蔵の名前や対応する音声URLを入力できる欄を残します。互換ラッパーサーバーは、独自の一覧を返し、カスタムIDやパスを受け付けることができます。
ElevenLabsでは、声を必ず選ぶ必要があります。Marinaraはアカウントのライブラリー全体(個人の声、ワークスペースの声、保存済みの声、デフォルトの声)を読み込みます。選択画面には、検索欄と、読み込んだ声の数があります。最初は「Select an ElevenLabs voice」が選ばれた状態で、実際の声を選ぶまで再生はできません。
キャラクターやペルソナごとに選ぶ
- Voice option(声の割り当て方)をSelected per character or personaにします。
- Character and persona voices(キャラクターとペルソナの声)で、Add voice(声を追加)をクリックします。
- 左の一覧でキャラクターかペルソナを、右の一覧で声を選びます。
- それぞれについて繰り返します。
キャラクターの声は、Character Editor(キャラクターエディター)のVoiceタブでも設定できます。変更されるのは同じ行です。この枠のRefresh(再読み込み)は、声の一覧を読み込み直します。先にキャラクターを作成しておいてください。1つもない場合は、声を割り当てる前にキャラクターかペルソナを追加するよう案内が出ます。
個別の声がないキャラクターは、名前が一致するカード(AU版のコピー元など)の声を使います。それもなければ、共有の声を使います。キャラクターの作成と編集を参照してください。
語り手の声
語りとは、シーンの描写やゲームマスターのせりふのように、特定のキャラクターが話すわけではない文章です。
- Narrator voice(語り手の声)で、Use separate narrator voiceをオンにします。
- 声を選びます。
この声は、RoleplayとConversationのメッセージで行の話し手がNarrator、GM、Game Master、Systemのいずれかのとき、およびGame Modeで話し手の名前がない語りに使われます。ElevenLabsでは、ここで語り手の声を選んでください。空のままにすると、全体の声が設定されているときだけ、語りがその声に切り替わります。
NPCのランダムな声(Game Modeのみ)
この機能は、Game Modeが追跡している脇役のキャラクターに、余っている声を割り当てます。RoleplayとConversationでは効果がありません。
- Random NPC voices(NPCのランダムな声)で、Use default voices for random NPCsをオンにします。
- Male NPC defaultsとFemale NPC defaultsで、声にチェックを入れます。
個別の声を持たない追跡中のNPCには、対応する候補から一定の規則で声が選ばれ、そのセッションのあいだ同じ声を保ちます。声を割り当て済みのNPCは、その声を使います。性別がはっきりしないNPCは、両方の候補から選ばれます。男性向け、女性向けと判別できる声が見つからない場合は、どちらの候補も声の全一覧を使います。
音声形式と速さ
Audio format(音声形式)はMP3(デフォルト)かWAVです。MP3を生成できないローカルのサーバーではWAVを使ってください。ElevenLabsは常にMP3を使うため、この項目は表示されません。xAI Voiceでは表示されますが、効果はありません。xAIは常にMP3を返すからです。
Speed(話す速さ)のスライダーの範囲は、Sourceによって異なります。
| Source | 範囲 |
| OpenAI-compatible | 0.25倍から4.0倍 |
| PocketTTS | 互換ラッパーでは0.25から4.0。公式サーバーは速さを自身で制御します。 |
| ElevenLabs | 0.7倍から1.2倍 |
| xAI Voice | 0.7倍から1.5倍 |
保存済みの速さが範囲外の場合は、いちばん近い許容値に収められます。ElevenLabsには、さらに2つの項目があります。Language(言語を指定するか、Auto detectのままにします)と、Stability(表情豊かな話し方から安定した話し方まで)です。
自動再生
Auto-play(自動再生)の各トグルは、ある種類の新しいメッセージを、生成が終わった時点で読み上げます。どれもUse text to speech(音声合成を使う)がオンである必要があります。すべて最初はオフです。
- Roleplay messages: Roleplayの新しい返信
- Conversation messages: Conversationの新しい返信
- Game narration: Game Modeの新しい語りと戦闘の行
- Progressive playback: 複数行の返信で、全体を待たずに最初の行からすぐ再生を始めます。
- Only read dialogues: 引用符やタグの付いたせりふだけを読み上げ、地の語りは飛ばします。
自動再生が動くのは、いちばん新しい返信が完成したときの1回だけです。チャットを開き直したりスクロールしたりしても、古いメッセージを読み直すことはありません。
Roleplayでは、メインの返信が保存されるとすぐに音声の準備が始まります。Prose Guardianなど、オンにしたエージェントが返信を書き直す場合、Marinaraは最終的なテキストを待ちます。
テキストのフィルターと感情の指示
これらのフィルターは手動の再生と自動再生の両方に適用され、Gameの語りとRoleplayの話者抽出にも反映されます。コードブロックはデフォルトで省略されます。ほかの2つは最初はオフです。
- Skip text inside HTML and custom tags(HTMLタグとカスタムタグ内のテキストを省略): 非表示の
<simulation>...</simulation>ブロックなど、囲まれたテキストを取り除きます。声の選択に使う話者タグは残ります。 - Skip fenced code blocks(フェンスで囲まれたコードブロックを省略)
- Skip text inside square brackets(角括弧内のテキストを省略)
Roleplay speaker extractor(Roleplayの話者抽出)をオンにすると、Enable emotion indicators(感情表現の指示を使う)が表示されます。この設定は、せりふの言葉を変えずに声の指示を加えます。感情表現の指示がオンのときは、Skip text inside square bracketsがオンでも、角括弧内のテキストが音声サービスに送られます。メモも含まれる場合があります。括弧内のメモを読み上げ対象から外すには、感情表現の指示をオフにし、省略の設定はオンのままにしてください。[Low, steady voice, restrained urgency]のような指示は、長い行を分割しても途中で切れません。アプリが認識する話者やシーンのラベルは、引き続き取り除かれます。各指示をどう使うかは、音声モデルが決めます。Use text to speech、Game narration、感情表現の指示をオンにすると、Gameのシーン、パーティー、戦闘でのせりふにも指示が含まれることがあります。
メッセージを1つ読み上げる
TTSをオンにすると、キャラクターや語り手のメッセージの下のツールバーにSpeak(読み上げ)ボタン(マイクのアイコン)が表示されます。
- Speakをクリックすると読み上げます。音声を取得しているあいだ、ボタンは読み込み中の表示になります。
- 再生中にもう一度クリックすると停止します。ツールチップはStop speakingになります。
- 読み上げられる文章がないメッセージ(画像だけの場合など)はNo dialogue to speakと表示され、ボタンは無効のままです。
読み上げ中は、Pause speaking、Resume speaking、Restart speakingのボタンが表示されます。スピーカーのアイコンのボタンを押すと、0から100パーセントのLine volume(この読み上げの音量)スライダーが開きます(デフォルトは50)。この音量は、Game Modeのミキサーとも、Conversationの通話の音量とも別です。
うまくいかなかった場合は、トラブルシューティングを参照してください。
保存済みの音声
Marinaraは生成した音声をブラウザーに保存し、同じ行を2回生成しないようにします。Cached clips(保存済みの音声)パネルには、現在の件数と合計サイズが表示されます。Export cached TTS clips(保存済みの音声を書き出す)ボタン(ダウンロードのアイコン)をクリックすると、保存済みの音声をすべて個別の音声ファイルとして保存できます。キャッシュは古いクリップから自動的に整理されます。アプリ内に消去ボタンはありません。空にするには、ブラウザーのデータを削除してください。
各チャットモードでのTTS
- Roleplayでは、Roleplay messagesのトグルとSpeakの操作を使います。Roleplayモード: はじめにを参照してください。
- Conversationでは、Conversation messagesのトグルと同じ操作を使います。音声通話については、Conversationの音声通話とビデオ通話で説明します。
- Game Modeでは、Game narrationのトグルを使います。ミキサーには、Master、Music、Sound Effects、Ambientと並んでTTSのチャンネルがあります。このチャンネルはゲーム内の読み上げ音声の音量を決め、最初は100パーセントです。Gameの操作を参照してください。
Phonetic name(通話での読み方)
声がキャラクターやペルソナの名前を正しく読めないときは、Phonetic name(読み仮名)を追加し、どう読むかを入力してください。Character Editor(キャラクターエディター)では、Voiceタブにあります。Persona Editor(ペルソナエディター)では、基本情報の欄と並んでいます。これが使われるのは、Conversationの音声通話とビデオ通話のときだけです。Speak、自動再生、Game Modeの語りでは使われません。
トラブルシューティング
- 何も読み上げない: Use text to speechがオンか確かめます。次に、該当するAuto-playのトグルを確認するか、メッセージのSpeakを使います。
- カードにMissing Audio providerと表示される: Sourceとして選んだアカウントが削除されたか、使えなくなっています。別のSourceを選んでください。音声の接続を使うを参照してください。
- 一覧に声が出ない: TTSをオンにし、有効なキーを入れた状態でカードを保存してから、Refresh voices from providerをクリックします。公式PocketTTSサーバーは、Marinaraの内蔵の一覧を使います。互換PocketTTSラッパーの場合は、
<Base URL>/v1/voicesが応答することを確認してください。 - ElevenLabsが読み上げない: プレースホルダーの「Select an ElevenLabs voice」ではなく、実際の声を選んでください。Modelが読み上げモデルであり、IDに
ttvを含む音声デザイン用モデルでないことも確認します。 - 行が「No audio after 60 s」で止まる: 音声サーバーにもっと時間が必要です。メッセージに示された場所でRequest timeout (seconds)の値を大きくしてください。リクエストのタイムアウトを参照してください。
- ローカルアドレスにある自前のサーバーがブロックされる:
.envでTTS_LOCAL_URLS_ENABLEDをオンにします。これで、OpenAI-compatibleやElevenLabs形式のサーバーについて、Marinaraがローカルアドレスやプライベートアドレスへ接続できるようになります。PocketTTSにこの設定は不要です。サーバー設定リファレンスを参照してください。 - すぐに試す: カード内のPreview(試聴)をクリックすると、現在の設定で短いサンプルを聞けます。
リファレンス: 音楽、効果音、Gacha Forge
これらのセクションは、上級者向けの設定です。
互換オーディオサーバーでGameの音楽と効果音を生成する
- Connections(接続)で、Music & Sound Effects(音楽と効果音)のアカウントをEdit model(モデルの編集)で開き、Custom compatible server(カスタム互換サーバー)を選びます。Add account(アカウントの追加)ウィンドウには、この種類のアカウント用のタイルはありません。このアカウントは、アップグレードかインポートによって作られます(アカウントリファレンスを参照)。
- 音楽や効果音のサーバーのアドレス、キー、モデルを入力します。
- Generation API formatを設定し、サーバーが提供するエンドポイントパスを入力します。パスが空の機能は使えません。
- Music generation(音楽生成)、Sound-effect generation(効果音生成)、またはその両方をオンにします。
- Gameのセットアップかゲームのオーディオ設定で、このアカウントを選びます。読み上げ用のアカウントは、TTSのカードで別に選んでおきます。
エンドポイントのパスは、アカウントのBase URLに追加されます。http://localhost:8002/v1の場合はchat/completionsを指定すると、/v1/chat/completionsにアクセスします。ローカルのHTTPエンドポイントには、ほかのローカル互換オーディオリクエストと同じく、.envでTTS_LOCAL_URLS_ENABLED=trueの設定が必要です。
対応するAPI形式は次の2種類です。
- Prompt JSON → MP3 audioは
{ "model": "your-model", "prompt": "the requested sound", "duration": 5, "response_format": "mp3" }を送信し、MP3のバイト列を受け取ります。Gameの音楽はコンテキストトラックの長さ(デフォルトは120秒)を使います。効果音は5秒を要求します。 - Chat Completions → inline audio (ACE-Step compatible)は、
model、ユーザーのmessagesを1件、stream: false、およびduration、instrumental: true、format: "mp3"を持つaudio_configを送信します。choices[0].message.audio内のインラインのMP3を受け付けます。形式は、base64データURLを含むACE-StepのオーディオURL配列、またはbase64のdataを持つオブジェクトです。ACE-Step互換APIの仕様を参照してください。リモートの結果URLや非同期ジョブAPIには対応していません。
サーバーが実装している機能だけをオンにしてください。OpenAI互換の音声エンドポイントがあるだけでは、音楽や効果音に対応しているとは限りません。Infermaticなどのサービスは、これらの形式のいずれかを提供するか、アダプターを用意する必要があります。Infermaticの実際の音楽エンドポイントは、ここでは検証していません。ElevenLabsやSunoAPIのネイティブ生成には、Music & Sound Effectsでそのソースを使ってください。アカウントリファレンスを参照してください。
生成したコンテキスト音楽は、エリアや遭遇段階ごとに1回作曲され、再利用されます。同じ効果音には、オーディオキャッシュを使います。生成エラーが起きても、キャッシュは再試行に使える状態で残ります。
Gacha Forgeの会話と音声
Gacha Forge 1.11.0以降は、TTSのカードで選んだアカウントと、そのキャラクターごとの声の割り当てを使います。 - Read character dialogue(キャラクターの会話を読み上げる)をオンにすると、声が割り当てられたインポート済みキャラクターの会話を読み上げます。この設定は、新しいワールドのLore(背景設定)のセットアップステップ、または既存のワールドの場合はGacha Forge自体のワールド設定にあります。ナレーション、思考、EngineのキャラクターIDを持たない生成ユニット、声のないキャラクターは読み上げません。名前があるだけで、ほかのキャラクターの声を借りることはありません。
- ワールドのTTSスイッチがオンなら、選択した音声のアカウントを使えます。カードのソース設定を直接使う場合は、Use text to speech(音声合成を使う)もオンにする必要があります。
- 同梱のGameの音楽と効果音には、生成用のアカウントは不要です。新しいトラックを作曲するには、Gacha ForgeでGenerate music and sound effects(音楽と効果音を生成する)をオンにし、Audio connection(オーディオ接続)でMusic & Sound Effectsのアカウントを選んでください。この欄は、生成がオンのときに表示されます。Home、戦闘、ボス、ストーリーシーン、キャラクターストーリーのトラックは、初めて必要になったときに生成され、その後は再利用されます。これらのリクエストには、自分のサービスのアカウントが使われます。
- 右上のミュートボタンは、音楽、会話、効果音をまとめて消音します。Gacha Forgeの見た目の設定には、この3つの個別の音量調整(0を含む)と、自動再生の待ち時間(デフォルトは3秒で、テキストの表示と会話の読み上げが終わったあとに始まります)があります。選択肢は引き続きプレイヤーを待ちます。シーンを離れると、会話の読み上げは取り消されます。ワールドを離れると、そのワールドの音声は止まります。
これらの操作を使うには、Engineとあわせて、インストール済みのGacha Forgeパッケージもアップデートしてください。
関連ガイド
- Conversationの音声通話とビデオ通話
- 2Dと3Dのアバター向けの音声合成によるリップシンク
- Roleplayモード: はじめに
- Game Mode: はじめに
- 対応しているAIプロバイダー
- キャラクターの作成と編集
- サーバー設定リファレンス