¿Cómo crear o convertir texto a audio en el navegador Chrome?

Al tratar de determinar una solución para ¿Cómo usar Web Speech API en cromo? encontrado que

var voices = window.speechSynthesis.getVoices(); 

devuelve una matriz vacía para el identificador de voices .

No estoy seguro de si la falta de soporte en el navegador Chrome está relacionada con este problema. No está bien, Google: la extensión de voz de Chrome se retiró después de las preocupaciones de espionaje .

Preguntas:

1) ¿Hay alguna solución alternativa que pueda implementar el requisito de crear o convertir audio de texto en el navegador Chrome?

2) ¿Cómo podemos nosotros, la comunidad de desarrolladores, crear una base de datos de código abierto de archivos de audio que reflejen palabras comunes y poco comunes; servido con encabezados CORS apropiados

Hay varias soluciones posibles que se han encontrado que proporcionan la capacidad de crear audio a partir de texto; dos de los cuales requieren la solicitud de un recurso externo, el otro usa meSpeak.js por @masswerk.

Usando el enfoque descrito en Descargar la pronunciación de palabras de Google , que no puede predeterminar qué palabras realmente existen como un archivo en el recurso sin escribir un script de shell o realizar una solicitud HEAD para verificar si ocurre un error de red . Por ejemplo, la palabra “do” no está disponible en el recurso que se utiliza a continuación.

 window.addEventListener("load", () => { const textarea = document.querySelector("textarea"); const audio = document.createElement("audio"); const mimecodec = "audio/webm; codecs=opus"; audio.controls = "controls"; document.body.appendChild(audio); audio.addEventListener("canplay", e => { audio.play(); }); let words = textarea.value.trim().match(/\w+/g); const url = "https://ssl.gstatic.com/dictionary/static/sounds/de/0/"; const mediatype = ".mp3"; Promise.all( words.map(word => fetch(`https://query.yahooapis.com/v1/public/yql?q=select * from data.uri where url="${url}${word}${mediatype}"&format=json&callback=`) .then(response => response.json()) .then(({query: {results: {url}}}) => fetch(url).then(response => response.blob()) .then(blob => blob) ) ) ) .then(blobs => { // const a = document.createElement("a"); audio.src = URL.createObjectURL(new Blob(blobs, { type: mimecodec })); // a.download = words.join("-") + ".webm"; // a.click() }) .catch(err => console.log(err)); });