Skip to content

Reemplazar Web Speech API con Edge TTS para soporte de CarPlay/Bluetooth#1

Open
ricardoalfaro wants to merge 1 commit into
mainfrom
claude/hopeful-fermi-24bf42
Open

Reemplazar Web Speech API con Edge TTS para soporte de CarPlay/Bluetooth#1
ricardoalfaro wants to merge 1 commit into
mainfrom
claude/hopeful-fermi-24bf42

Conversation

@ricardoalfaro

Copy link
Copy Markdown
Owner

Problema

speechSynthesis en iOS Safari usa una sesión de audio distinta a la de CarPlay y Bluetooth. El audio del lector solo salía por el altavoz del teléfono o auriculares, nunca por el sistema de audio del coche ni dispositivos BT. Es una limitación del sistema operativo — no hay forma de corregirla dentro de la Web Speech API.

Solución

Reemplazar speechSynthesis con Edge TTS de Microsoft: un servicio gratuito (sin API key) que expone un endpoint WebSocket que el navegador Edge usa internamente. La respuesta es un MP3 que se reproduce con un elemento <audio> HTML, que sí enruta correctamente a CarPlay y Bluetooth en iOS.

Cambios

app.js (reescritura completa)

  • Nuevo cliente synthesizeEdgeTTS() sobre WebSocket (wss://speech.platform.bing.com/...)
  • Lista de voces neurales hardcodeada: es-MX, es-ES, es-AR, es-CO, es-CL, en-US, en-GB
  • Chunking automático de textos largos (por párrafos y oraciones, máx. 1500 chars/chunk)
  • Reproducción secuencial de chunks via <audio> con gestión de Blob URLs
  • Se elimina el AudioContext silencioso (workaround que ya no es necesario)
  • Se mantiene MediaSession API, favoritos y localStorage

index.html

  • Agregar <audio id="audioPlayer"> para reproducción

service-worker.js

  • Bump de cache a v2 para forzar actualización en dispositivos con la versión anterior

Notas para revisar

  • El WebSocket de Edge TTS es una API no oficial pero estable — usada ampliamente en proyectos open source. Para uso personal es aceptable.
  • El preview panel de Claude está sandboxeado y no puede conectar al WebSocket externo; hay que probar en un navegador real (localhost:8787).
  • Si Microsoft cambia el token o el endpoint en el futuro, habría que actualizar synthesizeEdgeTTS().

El problema raíz era que speechSynthesis en iOS usa una sesión de audio
diferente a la de CarPlay/Bluetooth, por lo que el audio nunca llegaba
al coche ni a dispositivos Bluetooth. No hay forma de corregir esto
dentro de la Web Speech API.

Solución: reemplazar speechSynthesis con Edge TTS (servicio gratuito
de Microsoft, sin API key) que devuelve un MP3, reproducido via <audio>.
El elemento <audio> sí enruta correctamente a CarPlay y Bluetooth en iOS.

Cambios principales:
- app.js: nuevo cliente Edge TTS sobre WebSocket, voces neurales en español
  e inglés, chunking automático de textos largos, reproducción con <audio>
- index.html: agregar elemento <audio id="audioPlayer">
- service-worker.js: bump cache a v2 para forzar actualización en clientes

El AudioContext silencioso (workaround previo) se eliminó, ya no es necesario.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@ricardoalfaro

Copy link
Copy Markdown
Owner Author

bien

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant