テキスト読み上げ(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)を使用するため、 要約を有効にする場合、そのプロバイダーも認証されている必要があります。

サービスリンク

デフォルトで有効ですか?

いいえ。自動TTSはデフォルトでオフです。設定でmessages.tts.autoで有効にするか、セッションごとに/tts always(エイリアス:/tts on)で有効にします。

Edge TTSはTTSがオンになるとデフォルトで有効で、OpenAIまたはElevenLabs APIキーが利用できない場合に自動的に使用されます。

設定

TTS設定はmayros.jsonmessages.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モード(offalwaysinboundtagged)。
    • 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_KEYOPENAI_API_KEY)にフォールバック。
  • elevenlabs.baseUrl: ElevenLabs APIベースURLを上書き。
  • elevenlabs.voiceSettings:
    • stabilitysimilarityBooststyle: 0..1
    • useSpeakerBoost: true|false
    • speed: 0.5..2.0(1.0 = 通常)
  • elevenlabs.applyTextNormalization: auto|on|off
  • elevenlabs.languageCode: 2文字のISO 639-1(例:ende
  • 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.autotaggedの場合、これらのディレクティブは音声をトリガーするために必要です。

有効な場合、モデルは[[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]]

利用可能なディレクティブキー(有効な場合):

  • provideropenai | elevenlabs | edgeallowProvider: trueが必要)
  • voice(OpenAI音声)またはvoiceId(ElevenLabs)
  • model(OpenAI TTSモデルまたはElevenLabsモデルID)
  • stabilitysimilarityBooststylespeeduseSpeakerBoost
  • applyTextNormalizationauto|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.jsonMAYROS_TTS_PREFSまたは messages.tts.prefsPathで上書き)に書き込みます。

保存されるフィールド:

  • enabled
  • provider
  • maxLength(要約しきい値。デフォルト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-ttsoutputFormatを受け入れますが、すべてのフォーマットが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のエイリアス)。
  • limitsummaryはローカル設定に保存され、メイン設定には保存されません。
  • /tts audioは一回限りの音声返信を生成します(TTSをオンにしません)。

エージェントツール

ttsツールはテキストを音声に変換し、MEDIA:パスを返します。 結果がTelegram互換の場合、ツールには[[audio_as_voice]]が含まれるため、 Telegramは音声バブルを送信します。

Gateway RPC

Gatewayメソッド:

  • tts.status
  • tts.enable
  • tts.disable
  • tts.convert
  • tts.setProvider
  • tts.providers