BYOK TTS (Phase B): native synthesizeSpeech — OpenAI + Gemini
Symmetrisch zur Web-speech.ts. Neue Modalität nach Vision; TTS liefert
Binär-Audio, also ein eigener Adapter (kein SSE-Stream).
- ByokCapability.speak + TTS-Metadaten auf ByokProviderID
(speechModels/voices/defaults); speak nur für OpenAI + Gemini
- ByokSpeech.swift: byokSynthesizeSpeech-Dispatcher. OpenAI
/v1/audio/speech → fertiges Format; Gemini :generateContent
responseModalities AUDIO → rohes 16-bit-PCM (audio/L16) →
byokPCMToWav verpackt zu WAV, byokParsePCMRate liest Rate aus MIME
- ManaLLM.synthesizeSpeech(text:voice:model:provider:format:) — Facade,
greift nur bei BYOK + speak-fähigem Provider (sonst nil → Server/
mana-tts); provider als Wunsch an den Vault-Resolver
- 8 Tests (WAV-Header + Samples unangetastet, parsePCMRate, speak-
Registry, Facade-Gating inkl. preferred), netz-/keychain-frei.
swift build + swift test 47/47 grün
Offen: audioguide-native StopEditor-Konsument (Xcode, Tills Hand).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>