テキスト読み上げ(TTS)
Mayrosは、ElevenLabs、OpenAI、またはEdge TTSを使用してアウトバウンド返信を音声に変換できます。 Mayrosが音声を送信できる場所ならどこでも機能します。Telegramでは丸い音声ノートバブルが表示されます。
サポートされているサービス
- ElevenLabs(プライマリまたはフォールバックプロバイダー)
- OpenAI(プライマリまたはフォールバックプロバイダー。要約にも使用)
- Edge TTS(プライマリまたはフォールバックプロバイダー。
node-edge-ttsを使用、APIキー不要時のデフォルト)
Edge TTSノート
Edge TTSは、node-edge-tts
ライブラリ経由でMicrosoft EdgeのオンラインニューラルTTSサービスを使用します。これはホストされたサービス(ローカルではない)で、Microsoftのエンドポイントを使用し、
APIキーを必要としません。node-edge-ttsは音声設定オプションと
出力フォーマットを公開しますが、すべてのオプションがEdgeサービスでサポートされているわけではありません。
Edge TTSは公開されたSLAやクォータのないパブリックWebサービスであるため、ベストエフォートとして扱ってください。保証された制限とサポートが必要な場合は、OpenAIまたはElevenLabsを使用してください。 MicrosoftのSpeech REST APIはリクエストごとに10分の音声制限を文書化しています。Edge TTSは 制限を公開していないため、同様またはより低い制限を想定してください。
オプションキー
OpenAIまたはElevenLabsが必要な場合:
ELEVENLABS_API_KEY(またはXI_API_KEY)OPENAI_API_KEY
Edge TTSはAPIキーを必要としません。APIキーが見つからない場合、Mayrosはデフォルトで
Edge TTSになります(messages.tts.edge.enabled=falseで無効化されていない限り)。
複数のプロバイダーが設定されている場合、選択されたプロバイダーが最初に使用され、他のプロバイダーはフォールバックオプションです。
自動要約は設定されたsummaryModel(またはagents.defaults.model.primary)を使用するため、
要約を有効にする場合、そのプロバイダーも認証されている必要があります。
サービスリンク
- OpenAI Text-to-Speechガイド
- OpenAI Audio APIリファレンス
- ElevenLabs Text to Speech
- ElevenLabs認証
- node-edge-tts
- Microsoft音声出力フォーマット
デフォルトで有効ですか?
いいえ。自動TTSはデフォルトでオフです。設定でmessages.tts.autoで有効にするか、セッションごとに/tts always(エイリアス:/tts on)で有効にします。
Edge TTSはTTSがオンになるとデフォルトで有効で、OpenAIまたはElevenLabs APIキーが利用できない場合に自動的に使用されます。
設定
TTS設定はmayros.jsonのmessages.ttsの下にあります。
完全なスキーマはGateway設定にあります。
最小設定(有効 + プロバイダー)
json5{ messages: { tts: { auto: "always", provider: "elevenlabs", }, }, }
OpenAIプライマリ、ElevenLabsフォールバック
json5{ messages: { tts: { auto: "always", provider: "openai", summaryModel: "openai/gpt-4.1-mini", modelOverrides: { enabled: true, }, openai: { apiKey: "openai_api_key", model: "gpt-4o-mini-tts", voice: "alloy", }, elevenlabs: { apiKey: "elevenlabs_api_key", baseUrl: "https://api.elevenlabs.io", voiceId: "voice_id", modelId: "eleven_multilingual_v2", seed: 42, applyTextNormalization: "auto", languageCode: "en", voiceSettings: { stability: 0.5, similarityBoost: 0.75, style: 0.0, useSpeakerBoost: true, speed: 1.0, }, }, }, }, }
Edge TTSプライマリ(APIキーなし)
json5{ messages: { tts: { auto: "always", provider: "edge", edge: { enabled: true, voice: "en-US-MichelleNeural", lang: "en-US", outputFormat: "audio-24khz-48kbitrate-mono-mp3", rate: "+10%", pitch: "-5%", }, }, }, }
Edge TTSを無効化
json5{ messages: { tts: { edge: { enabled: false, }, }, }, }
カスタム制限 + 設定パス
json5{ messages: { tts: { auto: "always", maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.mayros/settings/tts.json", }, }, }
インバウンド音声ノート後のみ音声で返信
json5{ messages: { tts: { auto: "inbound", }, }, }
長い返信の自動要約を無効化
json5{ messages: { tts: { auto: "always", }, }, }
次に実行:
/tts summary off
フィールドのノート
auto: 自動TTSモード(off、always、inbound、tagged)。inboundはインバウンド音声ノート後のみ音声を送信。taggedは返信に[[tts]]タグが含まれている場合のみ音声を送信。
enabled: レガシートグル(doctorがこれをautoに移行)。mode:"final"(デフォルト)または"all"(ツール/ブロック返信を含む)。provider:"elevenlabs"、"openai"、または"edge"(フォールバックは自動)。providerが未設定の場合、Mayrosはopenai(キーがある場合)、次にelevenlabs(キーがある場合)、 それ以外はedgeを優先します。summaryModel: 自動要約用のオプションの安価なモデル。デフォルトはagents.defaults.model.primary。provider/modelまたは設定されたモデルエイリアスを受け入れます。
modelOverrides: モデルがTTSディレクティブを発行できるようにします(デフォルトでオン)。allowProviderはデフォルトでfalse(プロバイダー切り替えはオプトイン)。
maxTextLength: TTS入力のハードキャップ(文字)。超過すると/tts audioが失敗。timeoutMs: リクエストタイムアウト(ms)。prefsPath: ローカル設定JSONパスを上書き(プロバイダー/制限/要約)。apiKey値は環境変数(ELEVENLABS_API_KEY/XI_API_KEY、OPENAI_API_KEY)にフォールバック。elevenlabs.baseUrl: ElevenLabs APIベースURLを上書き。elevenlabs.voiceSettings:stability、similarityBoost、style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = 通常)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: 2文字のISO 639-1(例:en、de)elevenlabs.seed: 整数0..4294967295(ベストエフォート決定論)edge.enabled: Edge TTS使用を許可(デフォルトtrue。APIキー不要)。edge.voice: Edgeニューラル音声名(例:en-US-MichelleNeural)。edge.lang: 言語コード(例:en-US)。edge.outputFormat: Edge出力フォーマット(例:audio-24khz-48kbitrate-mono-mp3)。- 有効な値については、Microsoft音声出力フォーマットを参照。すべてのフォーマットがEdgeでサポートされているわけではありません。
edge.rate/edge.pitch/edge.volume: パーセント文字列(例:+10%、-5%)。edge.saveSubtitles: 音声ファイルと一緒にJSON字幕を書き込む。edge.proxy: Edge TTSリクエスト用のプロキシURL。edge.timeoutMs: リクエストタイムアウト上書き(ms)。
モデル駆動の上書き(デフォルトでオン)
デフォルトでは、モデルは単一の返信に対してTTSディレクティブを発行できます。
messages.tts.autoがtaggedの場合、これらのディレクティブは音声をトリガーするために必要です。
有効な場合、モデルは[[tts:...]]ディレクティブを発行して、単一の返信の音声を上書きでき、
オプションで[[tts:text]]...[[/tts:text]]ブロックを提供して、
表現力豊かなタグ(笑い、歌の合図など)を提供できます。これらは音声にのみ表示されます。
provider=...ディレクティブは、modelOverrides.allowProvider: trueでない限り無視されます。
返信ペイロードの例:
Here you go.
[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](laughs) Read the song once more.[[/tts:text]]
利用可能なディレクティブキー(有効な場合):
provider(openai|elevenlabs|edge、allowProvider: trueが必要)voice(OpenAI音声)またはvoiceId(ElevenLabs)model(OpenAI TTSモデルまたはElevenLabsモデルID)stability、similarityBoost、style、speed、useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
すべてのモデル上書きを無効化:
json5{ messages: { tts: { modelOverrides: { enabled: false, }, }, }, }
オプションの許可リスト(他のノブを設定可能に保ちながらプロバイダー切り替えを有効にする):
json5{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false, }, }, }, }
ユーザーごとの設定
スラッシュコマンドは、ローカル上書きをprefsPath(デフォルト:
~/.mayros/settings/tts.json、MAYROS_TTS_PREFSまたは
messages.tts.prefsPathで上書き)に書き込みます。
保存されるフィールド:
enabledprovidermaxLength(要約しきい値。デフォルト1500文字)summarize(デフォルトtrue)
これらはそのホストのmessages.tts.*を上書きします。
出力フォーマット(固定)
- Telegram: Opus音声ノート(ElevenLabsから
opus_48000_64、OpenAIからopus)。- 48kHz / 64kbpsは、音声ノートのトレードオフと丸いバブルに必要です。
- その他のチャネル: MP3(ElevenLabsから
mp3_44100_128、OpenAIからmp3)。- 44.1kHz / 128kbpsは、音声の明瞭さのデフォルトバランスです。
- Edge TTS:
edge.outputFormatを使用(デフォルトaudio-24khz-48kbitrate-mono-mp3)。node-edge-ttsはoutputFormatを受け入れますが、すべてのフォーマットがEdgeサービスから利用できるわけではありません。- 出力フォーマット値は、Microsoft音声出力フォーマット(Ogg/WebM Opusを含む)に従います。
- Telegram
sendVoiceはOGG/MP3/M4Aを受け入れます。保証されたOpus音声ノートが必要な場合は、OpenAI/ElevenLabsを使用してください。 - 設定されたEdge出力フォーマットが失敗した場合、MayrosはMP3で再試行します。
OpenAI/ElevenLabsフォーマットは固定されています。TelegramはOpusを音声ノートUX用に期待しています。
自動TTS動作
有効な場合、Mayros:
- 返信に既にメディアまたは
MEDIA:ディレクティブが含まれている場合、TTSをスキップします。 - 非常に短い返信(< 10文字)をスキップします。
- 有効な場合、
agents.defaults.model.primary(またはsummaryModel)を使用して長い返信を要約します。 - 生成された音声を返信に添付します。
返信がmaxLengthを超え、要約がオフ(または要約モデルのAPIキーがない)の場合、音声
はスキップされ、通常のテキスト返信が送信されます。
フロー図
返信 -> TTS有効?
いいえ -> テキストを送信
はい -> メディア / MEDIA: / 短い?
はい -> テキストを送信
いいえ -> 長さ > 制限?
いいえ -> TTS -> 音声を添付
はい -> 要約有効?
いいえ -> テキストを送信
はい -> 要約(summaryModelまたはagents.defaults.model.primary)
-> TTS -> 音声を添付
スラッシュコマンド使用法
単一のコマンドがあります:/tts。
有効化の詳細については、スラッシュコマンドを参照してください。
Discord注意: /ttsはDiscordの組み込みコマンドであるため、Mayrosはそこでネイティブコマンドとして/voiceを登録します。テキスト/tts ...は引き続き機能します。
/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Hello from Mayros
注意事項:
- コマンドには認証された送信者が必要です(許可リスト/所有者規則は引き続き適用されます)。
commands.textまたはネイティブコマンド登録が有効である必要があります。off|always|inbound|taggedはセッションごとのトグルです(/tts onは/tts alwaysのエイリアス)。limitとsummaryはローカル設定に保存され、メイン設定には保存されません。/tts audioは一回限りの音声返信を生成します(TTSをオンにしません)。
エージェントツール
ttsツールはテキストを音声に変換し、MEDIA:パスを返します。
結果がTelegram互換の場合、ツールには[[audio_as_voice]]が含まれるため、
Telegramは音声バブルを送信します。
Gateway RPC
Gatewayメソッド:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers