Metinden sese (TTS)

Mayros, ElevenLabs, OpenAI veya Edge TTS kullanarak giden yanıtları sese dönüştürebilir. Mayros'un ses gönderebileceği her yerde çalışır; Telegram yuvarlak bir sesli not balonu alır.

Desteklenen servisler

  • ElevenLabs (birincil veya yedek sağlayıcı)
  • OpenAI (birincil veya yedek sağlayıcı; özetler için de kullanılır)
  • Edge TTS (birincil veya yedek sağlayıcı; node-edge-tts kullanır, API anahtarı olmadığında varsayılan)

Edge TTS notları

Edge TTS, node-edge-tts kütüphanesi aracılığıyla Microsoft Edge'in çevrimiçi nöral TTS hizmetini kullanır. Barındırılan bir hizmettir (yerel değil), Microsoft'un uç noktalarını kullanır ve bir API anahtarı gerektirmez. node-edge-tts, konuşma yapılandırma seçeneklerini ve çıktı formatlarını sunar, ancak tüm seçenekler Edge hizmeti tarafından desteklenmez.

Edge TTS, yayınlanmış bir SLA veya kota olmayan genel bir web hizmeti olduğundan, bunu en iyi çaba olarak değerlendirin. Garantili limitlere ve desteğe ihtiyacınız varsa, OpenAI veya ElevenLabs kullanın. Microsoft'un Speech REST API'si, istek başına 10 dakikalık bir ses limiti belgeler; Edge TTS limit yayınlamaz, bu nedenle benzer veya daha düşük limitler varsayın.

İsteğe bağlı anahtarlar

OpenAI veya ElevenLabs istiyorsanız:

  • ELEVENLABS_API_KEY (veya XI_API_KEY)
  • OPENAI_API_KEY

Edge TTS bir API anahtarı gerektirmez. Hiçbir API anahtarı bulunamazsa, Mayros Edge TTS'ye varsayılan olarak döner (messages.tts.edge.enabled=false ile devre dışı bırakılmadığı sürece).

Birden fazla sağlayıcı yapılandırılmışsa, seçilen sağlayıcı önce kullanılır ve diğerleri yedek seçeneklerdir. Otomatik özet, yapılandırılan summaryModel'i (veya agents.defaults.model.primary) kullanır, bu nedenle özetleri etkinleştirirseniz o sağlayıcının da kimlik doğrulaması yapılmış olması gerekir.

Servis linkleri

Varsayılan olarak etkin mi?

Hayır. Otomatik TTS varsayılan olarak kapalıdır. Yapılandırmada messages.tts.auto ile veya oturum başına /tts always ile (takma ad: /tts on) etkinleştirin.

Edge TTS, TTS açıldıktan sonra varsayılan olarak etkindir ve hiçbir OpenAI veya ElevenLabs API anahtarı kullanılamadığında otomatik olarak kullanılır.

Yapılandırma

TTS yapılandırması mayros.json içinde messages.tts altında bulunur. Tam şema Ağ Geçidi yapılandırması'ndadır.

Minimal yapılandırma (etkinleştir + sağlayıcı)

json5
{
  messages: {
    tts: {
      auto: "always",
      provider: "elevenlabs",
    },
  },
}

OpenAI birincil, ElevenLabs yedek

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 birincil (API anahtarı yok)

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'yi devre dışı bırak

json5
{
  messages: {
    tts: {
      edge: {
        enabled: false,
      },
    },
  },
}

Özel limitler + tercih yolu

json5
{
  messages: {
    tts: {
      auto: "always",
      maxTextLength: 4000,
      timeoutMs: 30000,
      prefsPath: "~/.mayros/settings/tts.json",
    },
  },
}

Yalnızca gelen sesli nottan sonra sesle yanıt ver

json5
{
  messages: {
    tts: {
      auto: "inbound",
    },
  },
}

Uzun yanıtlar için otomatik özeti devre dışı bırak

json5
{
  messages: {
    tts: {
      auto: "always",
    },
  },
}

Ardından çalıştırın:

/tts summary off

Alanlara ilişkin notlar

  • auto: otomatik TTS modu (off, always, inbound, tagged).
    • inbound yalnızca gelen sesli nottan sonra ses gönderir.
    • tagged yalnızca yanıt [[tts]] etiketleri içerdiğinde ses gönderir.
  • enabled: eski geçiş (doctor bunu auto'ya taşır).
  • mode: "final" (varsayılan) veya "all" (araç/blok yanıtları dahil).
  • provider: "elevenlabs", "openai" veya "edge" (yedek otomatiktir).
  • provider ayarlanmamışsa, Mayros openai'yi (anahtar varsa) tercih eder, ardından elevenlabs'ı (anahtar varsa), aksi takdirde edge.
  • summaryModel: otomatik özet için isteğe bağlı ucuz model; agents.defaults.model.primary'ye varsayılan olarak döner.
    • provider/model veya yapılandırılmış bir model takma adını kabul eder.
  • modelOverrides: modelin TTS yönergelerini yaymasına izin ver (varsayılan olarak açık).
    • allowProvider varsayılan olarak false'tur (sağlayıcı değiştirme isteğe bağlıdır).
  • maxTextLength: TTS girişi için sabit üst sınır (karakterler). Aşılırsa /tts audio başarısız olur.
  • timeoutMs: istek zaman aşımı (ms).
  • prefsPath: yerel tercihler JSON yolunu geçersiz kıl (sağlayıcı/limit/özet).
  • apiKey değerleri env değişkenlerine geri döner (ELEVENLABS_API_KEY/XI_API_KEY, OPENAI_API_KEY).
  • elevenlabs.baseUrl: ElevenLabs API temel URL'sini geçersiz kıl.
  • elevenlabs.voiceSettings:
    • stability, similarityBoost, style: 0..1
    • useSpeakerBoost: true|false
    • speed: 0.5..2.0 (1.0 = normal)
  • elevenlabs.applyTextNormalization: auto|on|off
  • elevenlabs.languageCode: 2 harfli ISO 639-1 (örn. en, de)
  • elevenlabs.seed: integer 0..4294967295 (en iyi çaba determinizm)
  • edge.enabled: Edge TTS kullanımına izin ver (varsayılan true; API anahtarı yok).
  • edge.voice: Edge nöral ses adı (örn. en-US-MichelleNeural).
  • edge.lang: dil kodu (örn. en-US).
  • edge.outputFormat: Edge çıktı formatı (örn. audio-24khz-48kbitrate-mono-mp3).
    • Geçerli değerler için Microsoft Speech çıktı formatlarına bakın; tüm formatlar Edge tarafından desteklenmez.
  • edge.rate / edge.pitch / edge.volume: yüzde dizeleri (örn. +10%, -5%).
  • edge.saveSubtitles: ses dosyasının yanına JSON altyazıları yaz.
  • edge.proxy: Edge TTS istekleri için proxy URL'si.
  • edge.timeoutMs: istek zaman aşımı geçersiz kılma (ms).

Model odaklı geçersiz kılmalar (varsayılan açık)

Varsayılan olarak, model tek bir yanıt için TTS yönergeleri yayabilir. messages.tts.auto tagged olduğunda, bu yönergeler sesi tetiklemek için gereklidir.

Etkinleştirildiğinde, model tek bir yanıt için sesi geçersiz kılmak için [[tts:...]] yönergeleri yayabilir, artı yalnızca seste görünmesi gereken etkileyici etiketleri (gülme, şarkı söyleme ipuçları, vb.) sağlamak için isteğe bağlı bir [[tts:text]]...[[/tts:text]] bloğu.

provider=... yönergeleri, modelOverrides.allowProvider: true olmadıkça göz ardı edilir.

Örnek yanıt yükü:

İşte burada.

[[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
[[tts:text]](güler) Şarkıyı bir kez daha oku.[[/tts:text]]

Kullanılabilir yönerge anahtarları (etkinleştirildiğinde):

  • provider (openai | elevenlabs | edge, allowProvider: true gerektirir)
  • voice (OpenAI sesi) veya voiceId (ElevenLabs)
  • model (OpenAI TTS modeli veya ElevenLabs model kimliği)
  • stability, similarityBoost, style, speed, useSpeakerBoost
  • applyTextNormalization (auto|on|off)
  • languageCode (ISO 639-1)
  • seed

Tüm model geçersiz kılmalarını devre dışı bırak:

json5
{
  messages: {
    tts: {
      modelOverrides: {
        enabled: false,
      },
    },
  },
}

İsteğe bağlı izin listesi (diğer düğmeleri yapılandırılabilir tutarken sağlayıcı değiştirmeyi etkinleştir):

json5
{
  messages: {
    tts: {
      modelOverrides: {
        enabled: true,
        allowProvider: true,
        allowSeed: false,
      },
    },
  },
}

Kullanıcı başına tercihler

Slash komutları prefsPath'e yerel geçersiz kılmalar yazar (varsayılan: ~/.mayros/settings/tts.json, MAYROS_TTS_PREFS veya messages.tts.prefsPath ile geçersiz kılın).

Saklanan alanlar:

  • enabled
  • provider
  • maxLength (özet eşiği; varsayılan 1500 karakter)
  • summarize (varsayılan true)

Bunlar o ana bilgisayar için messages.tts.*'ı geçersiz kılar.

Çıktı formatları (sabit)

  • Telegram: Opus sesli not (opus_48000_64 ElevenLabs'tan, opus OpenAI'dan).
    • 48kHz / 64kbps iyi bir sesli not dengesidir ve yuvarlak balon için gereklidir.
  • Diğer kanallar: MP3 (mp3_44100_128 ElevenLabs'tan, mp3 OpenAI'dan).
    • 44.1kHz / 128kbps, konuşma netliği için varsayılan dengedir.
  • Edge TTS: edge.outputFormat kullanır (varsayılan audio-24khz-48kbitrate-mono-mp3).
    • node-edge-tts bir outputFormat kabul eder, ancak tüm formatlar Edge hizmetinden kullanılamaz.
    • Çıktı formatı değerleri, Microsoft Speech çıktı formatlarını takip eder (Ogg/WebM Opus dahil).
    • Telegram sendVoice, OGG/MP3/M4A kabul eder; garantili Opus sesli notlara ihtiyacınız varsa OpenAI/ElevenLabs kullanın.
    • Yapılandırılan Edge çıktı formatı başarısız olursa, Mayros MP3 ile yeniden dener.

OpenAI/ElevenLabs formatları sabittir; Telegram, sesli not UX için Opus bekler.

Otomatik TTS davranışı

Etkinleştirildiğinde, Mayros:

  • yanıt zaten medya veya bir MEDIA: yönergesi içeriyorsa TTS'yi atlar.
  • çok kısa yanıtları atlar (< 10 karakter).
  • etkinleştirildiğinde agents.defaults.model.primary (veya summaryModel) kullanarak uzun yanıtları özetler.
  • oluşturulan sesi yanıta ekler.

Yanıt maxLength'i aşarsa ve özet kapalıysa (veya özet modeli için API anahtarı yoksa), ses atlanır ve normal metin yanıtı gönderilir.

Akış diyagramı

Yanıt -> TTS etkin mi?
  hayır -> metin gönder
  evet  -> medya / MEDIA: / kısa mı?
          evet -> metin gönder
          hayır -> uzunluk > limit mi?
                   hayır -> TTS -> ses ekle
                   evet  -> özet etkin mi?
                            hayır -> metin gönder
                            evet  -> özetle (summaryModel veya agents.defaults.model.primary)
                                      -> TTS -> ses ekle

Slash komutu kullanımı

Tek bir komut vardır: /tts. Etkinleştirme ayrıntıları için bkz. Slash komutları.

Discord notu: /tts yerleşik bir Discord komutudur, bu nedenle Mayros orada yerel komut olarak /voice kaydeder. Metin /tts ... hala çalışır.

/tts off
/tts always
/tts inbound
/tts tagged
/tts status
/tts provider openai
/tts limit 2000
/tts summary off
/tts audio Mayros'tan merhaba

Notlar:

  • Komutlar yetkili bir gönderici gerektirir (izin listesi/sahip kuralları hala geçerlidir).
  • commands.text veya yerel komut kaydı etkinleştirilmelidir.
  • off|always|inbound|tagged oturum başına geçişlerdir (/tts on, /tts always için bir takma addır).
  • limit ve summary ana yapılandırmada değil, yerel tercihlerde saklanır.
  • /tts audio, tek seferlik bir ses yanıtı oluşturur (TTS'yi açmaz).

Ajan aracı

tts aracı metni sese dönüştürür ve bir MEDIA: yolu döndürür. Sonuç Telegram uyumlu olduğunda, araç Telegram'ın bir ses balonu göndermesi için [[audio_as_voice]] içerir.

Ağ Geçidi RPC

Ağ Geçidi metodları:

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