Text-to-speech (TTS)
Mayros สามารถแปลงการตอบกลับขาออกเป็นเสียงโดยใช้ ElevenLabs, OpenAI หรือ Edge TTS มันทำงานได้ทุกที่ที่ Mayros สามารถส่งเสียงได้ Telegram ได้ฟองเสียงโน้ตกลม
บริการที่รองรับ
- ElevenLabs (ผู้ให้บริการหลักหรือ fallback)
- OpenAI (ผู้ให้บริการหลักหรือ fallback ใช้สำหรับการสรุปด้วย)
- Edge TTS (ผู้ให้บริการหลักหรือ fallback ใช้
node-edge-tts, ค่าเริ่มต้นเมื่อไม่มี API keys)
หมายเหตุ Edge TTS
Edge TTS ใช้บริการ TTS neural ออนไลน์ของ Microsoft Edge ผ่านไลบรารี node-edge-tts
มันเป็นบริการโฮสต์ (ไม่ใช่โลคัล) ใช้ endpoint ของ Microsoft และ
ไม่ต้องการ API key node-edge-tts เปิดเผยตัวเลือกการตั้งค่าคำพูดและ
รูปแบบเอาต์พุต แต่ไม่ใช่ทุกตัวเลือกที่รองรับโดยบริการ Edge
เนื่องจาก Edge TTS เป็นบริการเว็บสาธารณะที่ไม่มี SLA หรือโควต้าที่เผยแพร่ ให้ปฏิบัติต่อมัน เป็นความพยายามที่ดีที่สุด หากคุณต้องการขีดจำกัดที่รับประกันและการสนับสนุน ให้ใช้ OpenAI หรือ ElevenLabs Microsoft Speech REST API กำหนดขีดจำกัดเสียง 10 นาทีต่อคำขอ Edge TTS ไม่เผยแพร่ขีดจำกัด ดังนั้นให้สมมติขีดจำกัดที่คล้ายกันหรือต่ำกว่า
Keys ตัวเลือก
หากคุณต้องการ OpenAI หรือ ElevenLabs:
ELEVENLABS_API_KEY(หรือXI_API_KEY)OPENAI_API_KEY
Edge TTS ไม่ ต้องการ API key หากไม่พบ API keys Mayros ใช้ค่าเริ่มต้น
เป็น Edge TTS (เว้นแต่ปิดใช้งานผ่าน messages.tts.edge.enabled=false)
หากมีการกำหนดค่าหลายผู้ให้บริการ ผู้ให้บริการที่เลือกจะถูกใช้ก่อนและอื่นๆ เป็นตัวเลือก fallback
Auto-summary ใช้ summaryModel ที่กำหนดค่า (หรือ agents.defaults.model.primary)
ดังนั้นผู้ให้บริการนั้นต้องได้รับการพิสูจน์ตัวตนด้วยหากคุณเปิดใช้งานการสรุป
ลิงก์บริการ
- OpenAI Text-to-Speech guide
- OpenAI Audio API reference
- ElevenLabs Text to Speech
- ElevenLabs Authentication
- node-edge-tts
- Microsoft Speech output formats
เปิดใช้งานตามค่าเริ่มต้นหรือไม่?
ไม่ TTS อัตโนมัติ ปิด ตามค่าเริ่มต้น เปิดใช้งานในการตั้งค่าด้วย
messages.tts.auto หรือต่อเซสชันด้วย /tts always (นามแฝง: /tts on)
Edge TTS เปิดใช้งาน ตามค่าเริ่มต้นเมื่อ TTS เปิด และใช้อัตโนมัติ เมื่อไม่มี API keys OpenAI หรือ ElevenLabs
การตั้งค่า
การตั้งค่า TTS อยู่ภายใต้ messages.tts ใน mayros.json
สคีมาเต็มอยู่ใน การตั้งค่า Gateway
การตั้งค่าขั้นต่ำ (เปิดใช้งาน + ผู้ให้บริการ)
json5{ messages: { tts: { auto: "always", provider: "elevenlabs", }, }, }
OpenAI หลักพร้อม ElevenLabs fallback
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 key)
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, }, }, }, }
ขีดจำกัดแบบกำหนดเอง + เส้นทาง prefs
json5{ messages: { tts: { auto: "always", maxTextLength: 4000, timeoutMs: 30000, prefsPath: "~/.mayros/settings/tts.json", }, }, }
ตอบกลับด้วยเสียงเฉพาะหลังจากวอยซ์โน้ตขาเข้า
json5{ messages: { tts: { auto: "inbound", }, }, }
ปิดใช้งาน auto-summary สำหรับการตอบกลับยาว
json5{ messages: { tts: { auto: "always", }, }, }
จากนั้นรัน:
/tts summary off
หมายเหตุเกี่ยวกับฟิลด์
auto: โหมด auto-TTS (off,always,inbound,tagged)inboundส่งเสียงเฉพาะหลังจากวอยซ์โน้ตขาเข้าtaggedส่งเสียงเฉพาะเมื่อการตอบกลับรวม[[tts]]tags
enabled: toggle แบบเก่า (doctor ย้ายค่านี้เป็นauto)mode:"final"(ค่าเริ่มต้น) หรือ"all"(รวม tool/block replies)provider:"elevenlabs","openai", หรือ"edge"(fallback เป็นอัตโนมัติ)- หาก
providerไม่ได้ตั้ง Mayros จะเลือกopenai(ถ้ามี key) จากนั้นelevenlabs(ถ้ามี key) มิฉะนั้นedge summaryModel: โมเดลราคาถูกสำหรับ auto-summary; ค่าเริ่มต้นเป็นagents.defaults.model.primary- รับ
provider/modelหรือ model alias ที่กำหนดค่า
- รับ
modelOverrides: อนุญาตให้โมเดลส่ง TTS directives (เปิดตามค่าเริ่มต้น)allowProviderค่าเริ่มต้นเป็นfalse(การสลับผู้ให้บริการเป็น opt-in)
maxTextLength: ขีดจำกัดตัวอักษรสำหรับ TTS input/tts audioล้มเหลวหากเกินtimeoutMs: timeout ของคำขอ (ms)prefsPath: แทนที่เส้นทาง JSON prefs ท้องถิ่น (provider/limit/summary)- ค่า
apiKeyfallback ไปยัง env vars (ELEVENLABS_API_KEY/XI_API_KEY,OPENAI_API_KEY) elevenlabs.baseUrl: แทนที่ URL ฐาน API ของ ElevenLabselevenlabs.voiceSettings:stability,similarityBoost,style:0..1useSpeakerBoost:true|falsespeed:0.5..2.0(1.0 = ปกติ)
elevenlabs.applyTextNormalization:auto|on|offelevenlabs.languageCode: ISO 639-1 2 ตัวอักษร (เช่นen,de)elevenlabs.seed: จำนวนเต็ม0..4294967295(determinism แบบ best-effort)edge.enabled: อนุญาตการใช้ Edge TTS (ค่าเริ่มต้นtrue; ไม่มี API key)edge.voice: ชื่อเสียง neural ของ Edge (เช่นen-US-MichelleNeural)edge.lang: รหัสภาษา (เช่นen-US)edge.outputFormat: รูปแบบเอาต์พุต Edge (เช่นaudio-24khz-48kbitrate-mono-mp3)- ดู Microsoft Speech output formats สำหรับค่าที่ถูกต้อง; ไม่ใช่ทุกรูปแบบที่รองรับโดย Edge
edge.rate/edge.pitch/edge.volume: สตริงเปอร์เซ็นต์ (เช่น+10%,-5%)edge.saveSubtitles: เขียน JSON subtitles ควบคู่กับไฟล์เสียงedge.proxy: URL proxy สำหรับคำขอ Edge TTSedge.timeoutMs: timeout override ของคำขอ (ms)
Model-driven overrides (เปิดตามค่าเริ่มต้น)
ตามค่าเริ่มต้น โมเดล สามารถ ส่ง TTS directives สำหรับการตอบกลับเดียว
เมื่อ messages.tts.auto เป็น tagged directives เหล่านี้จำเป็นเพื่อทริกเกอร์เสียง
เมื่อเปิดใช้งาน โมเดลสามารถส่ง [[tts:...]] directives เพื่อแทนที่เสียง
สำหรับการตอบกลับเดียว พร้อมบล็อก [[tts:text]]...[[/tts:text]] ตัวเลือก
เพื่อให้แท็กเชิงแสดงออก (เสียงหัวเราะ, สัญญาณร้องเพลง, ฯลฯ) ที่ควรปรากฏ
เฉพาะในเสียง
provider=... directives จะถูกละเว้นเว้นแต่ 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]]
คีย์ directive ที่ใช้ได้ (เมื่อเปิดใช้งาน):
provider(openai|elevenlabs|edge, ต้องการallowProvider: true)voice(เสียง OpenAI) หรือvoiceId(ElevenLabs)model(โมเดล TTS ของ OpenAI หรือ model id ของ ElevenLabs)stability,similarityBoost,style,speed,useSpeakerBoostapplyTextNormalization(auto|on|off)languageCode(ISO 639-1)seed
ปิดใช้งาน model overrides ทั้งหมด:
json5{ messages: { tts: { modelOverrides: { enabled: false, }, }, }, }
Allowlist ตัวเลือก (เปิดใช้งานการสลับผู้ให้บริการในขณะที่ยังคงกำหนดค่าตัวควบคุมอื่นๆ):
json5{ messages: { tts: { modelOverrides: { enabled: true, allowProvider: true, allowSeed: false, }, }, }, }
การตั้งค่าต่อผู้ใช้
คำสั่ง Slash เขียน overrides ท้องถิ่นไปยัง prefsPath (ค่าเริ่มต้น:
~/.mayros/settings/tts.json, แทนที่ด้วย MAYROS_TTS_PREFS หรือ
messages.tts.prefsPath)
ฟิลด์ที่จัดเก็บ:
enabledprovidermaxLength(เกณฑ์การสรุป; ค่าเริ่มต้น 1500 ตัวอักษร)summarize(ค่าเริ่มต้นtrue)
สิ่งเหล่านี้แทนที่ messages.tts.* สำหรับโฮสต์นั้น
รูปแบบเอาต์พุต (คงที่)
- Telegram: Opus voice note (
opus_48000_64จาก ElevenLabs,opusจาก OpenAI)- 48kHz / 64kbps เป็นการแลกเปลี่ยนที่ดีสำหรับ voice-note และจำเป็นสำหรับฟองกลม
- ช่องทางอื่นๆ: MP3 (
mp3_44100_128จาก ElevenLabs,mp3จาก OpenAI)- 44.1kHz / 128kbps เป็นสมดุลเริ่มต้นสำหรับความชัดเจนของคำพูด
- Edge TTS: ใช้
edge.outputFormat(ค่าเริ่มต้นaudio-24khz-48kbitrate-mono-mp3)node-edge-ttsรับoutputFormatแต่ไม่ใช่ทุกรูปแบบที่พร้อมใช้จากบริการ Edge- ค่ารูปแบบเอาต์พุตเป็นไปตาม Microsoft Speech output formats (รวมถึง Ogg/WebM Opus)
- Telegram
sendVoiceรับ OGG/MP3/M4A; ใช้ OpenAI/ElevenLabs หากต้องการ Opus voice notes ที่รับประกัน - หากรูปแบบเอาต์พุต Edge ที่กำหนดค่าล้มเหลว Mayros จะลองใหม่ด้วย MP3
รูปแบบ OpenAI/ElevenLabs เป็นค่าคงที่ Telegram คาดหวัง Opus สำหรับ voice-note UX
พฤติกรรม TTS อัตโนมัติ
เมื่อเปิดใช้งาน Mayros:
- ข้าม TTS หากการตอบกลับมีสื่อหรือคำสั่ง
MEDIA:อยู่แล้ว - ข้ามการตอบกลับสั้นมาก (< 10 ตัวอักษร)
- สรุปการตอบกลับยาวเมื่อเปิดใช้งานโดยใช้
agents.defaults.model.primary(หรือsummaryModel) - แนบเสียงที่สร้างไปกับการตอบกลับ
หากการตอบกลับเกิน maxLength และ summary ปิดอยู่ (หรือไม่มี API key สำหรับ
summary model) เสียงจะถูกข้ามและการตอบกลับข้อความปกติจะถูกส่ง
แผนภาพกระบวนการ
Reply -> TTS เปิดใช้งาน?
ไม่ -> ส่งข้อความ
ใช่ -> มีสื่อ / MEDIA: / สั้น?
ใช่ -> ส่งข้อความ
ไม่ -> ความยาว > ขีดจำกัด?
ไม่ -> TTS -> แนบเสียง
ใช่ -> summary เปิดใช้งาน?
ไม่ -> ส่งข้อความ
ใช่ -> สรุป (summaryModel หรือ agents.defaults.model.primary)
-> TTS -> แนบเสียง
การใช้งานคำสั่ง Slash
มีคำสั่งเดียว: /tts
ดู คำสั่ง Slash สำหรับรายละเอียดการเปิดใช้งาน
หมายเหตุ 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 สวัสดีจาก Mayros
หมายเหตุ:
- คำสั่งต้องการผู้ส่งที่ได้รับอนุญาต (กฎ allowlist/owner ยังคงใช้)
commands.textหรือการลงทะเบียนคำสั่งเนทีฟต้องเปิดใช้งานoff|always|inbound|taggedเป็น toggle ต่อเซสชัน (/tts onเป็นนามแฝงของ/tts always)limitและsummaryถูกเก็บใน prefs ท้องถิ่น ไม่ใช่การตั้งค่าหลัก/tts audioสร้างการตอบกลับเสียงครั้งเดียว (ไม่เปิด TTS)
เครื่องมือ Agent
เครื่องมือ tts แปลงข้อความเป็นคำพูดและส่งคืนเส้นทาง MEDIA: เมื่อ
ผลลัพธ์เข้ากันได้กับ Telegram เครื่องมือรวม [[audio_as_voice]] เพื่อให้
Telegram ส่งฟองเสียง
Gateway RPC
เมธอด Gateway:
tts.statustts.enabletts.disabletts.converttts.setProvidertts.providers