Comment créer ou convertir du texte sur le navigateur audio au Chrome?

En essayant de déterminer une solution à Comment utiliser l'API Web Speech au chrome? trouvé ceci

var voices = window.speechSynthesis.getVoices(); 

Renvoie un tableau vide pour l'identificateur de voices .

Pas certain si le manque de soutien au navigateur en chrome est lié à ce problème. Pas OK, Google: l'extension de la voix de Chromium a-t-elle été tirée après des préoccupations d'espionnage ?

Des questions:

1) Existe-t-il des solutions de rechange qui peuvent implémenter l'exigence de créer ou de convertir de l'audio du texte au navigateur de chrome?

2) Comment pouvons-nous, la communauté des développeurs, créer une base de données open source de fichiers audio reflétant des mots communs et peu communs; Servi avec les en-têtes CORS appropriés?

Il existe plusieurs solutions de contournement possibles qui ont permis de créer de l'audio à partir du texte; Dont deux exigent la demande d'une ressource externe, l'autre utilise meSpeak.js par @masswerk.

Utilisation de l'approche décrite dans Télécharger la prononciation audio des mots de Google , qui souffre de ne pas être en mesure de déterminer préalablement les mots qui existent réellement en tant que fichier dans la ressource sans écrire un script shell ou effectuer une requête HEAD pour vérifier si une erreur réseau s'est produite . Par exemple, le mot "faire" n'est pas disponible sur la ressource utilisée ci-dessous.

 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)); }); 
 <textarea>what it does my ninja?</textarea>