2017-10-21 61 views
3

Est-ce que Speech Synthesis API est compatible avec Chromium? Ai-je besoin d'installer des voix? Si oui, comment puis-je faire cela? J'utilise Fedora. Est-ce que les voix comme la vidéo ont besoin d'installer un paquet supplémentaire pour que ça fonctionne?speechSynthesis.getVoices() est un tableau vide dans Chromium Fedora

J'ai essayer ce code:

var msg = new SpeechSynthesisUtterance('I see dead people!'); 
msg.voice = speechSynthesis.getVoices().filter(function(voice) { 
    return voice.name == 'Whisper'; 
})[0]; 
speechSynthesis.speak(msg); 

de l'article Web apps that talk - Introduction to the Speech Synthesis API

mais la fonction speechSynthesis.getVoices() retour tableau vide.

J'ai aussi essayé:

window.speechSynthesis.onvoiceschanged = function() { 
    console.log(window.speechSynthesis.getVoices()) 
}; 

la fonction sont exécutées mais le tableau est aussi vide.

Sur https://fedoraproject.org/wiki/Chromium il y a info pour utiliser le drapeau --enable-speech-dispatcher mais quand je l'ai utilisé, j'ai un avertissement que le drapeau n'est pas supporté.

Répondre

1

L'API de synthèse vocale est-elle prise en charge par Chromium?

Oui, le Web Speech API a un soutien de base au navigateur Chrome, mais il y a plusieurs problèmes à la fois le chrome et la mise en œuvre de la spécification Firefox, voir voir Blink>Speech, Internals>SpeechSynthesis, Web Speech.

Dois-je installer des voix? Si oui, comment puis-je faire cela? J'utilise Fedora. Est-ce que les voix comme la vidéo que j'ai besoin d'installer un paquet supplémentaire pour pour que ça fonctionne?

Oui, les voix doivent être installées. Chromium n'est pas livré avec des voix pour définir SpeechSynthesisUtterancevoice par défaut, voir How to use Web Speech API at chromium?; How to capture generated audio from window.speechSynthesis.speak() call?.

Vous pouvez installer speech-dispatcher en tant que serveur pour le serveur de synthèse vocale du système et espeak en tant que synthétiseur vocal.

$ yum install speech-dispatcher espeak 

Vous pouvez également définir un fichier de configuration pour speech-dispatcher dans le dossier personnel de l'utilisateur pour définir des options spécifiques pour les deux speech-dispatcher et le module de sortie que l'utilisation, par exemple espeak

$ spd-conf -u 

Lancement de chrome avec --enable-speech-dispatcher L'indicateur génère automatiquement une connexion à speech-dispatcher, où vous pouvez définir le LogLevel entre 0 et 5 pour examiner la communication SSIP entre le code Chrome et speech-dispatcher.

renvoie les résultats de manière asynchrone .getVoices() et doit être appelé deux fois

voir cette question electron à GitHub Speech Synthesis: No Voices #586.

window.speechSynthesis.onvoiceschanged = e => { 
    const voices = window.speechSynthesis.getVoices(); 
    // do speech synthesis stuff 
    console.log(voices); 
} 
window.speechSynthesis.getVoices(); 

ou composé comme une fonction asynchrone qui retourne une Promise avec valeur étant tableau de voix

(async() => { 

    const getVoices = (voiceName = "") => { 
    return new Promise(resolve => { 
     window.speechSynthesis.onvoiceschanged = e => { 
     // optionally filter returned voice by `voiceName` 
     // resolve(
     // window.speechSynthesis.getVoices() 
     // .filter(({name}) => /^en.+whisper/.test(name)) 
     //); 
     resolve(window.speechSynthesis.getVoices()); 
     } 
     window.speechSynthesis.getVoices(); 
    }) 
    } 

    const voices = await getVoices(); 
    console.log(voices); 

})(); 
+0

Grand, merci beaucoup pour l'explication. va tester et marquer votre solution et upvote quand cela fonctionne, ce qui sera probablement le cas. – jcubic

+0

@jcubic Voir aussi https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis/cancel – guest271314

+0

L'installation de speech-dispatcher et de espeak suffisent à faire fonctionner la voix chrome, comme pour 'spd-conf - J'ai une erreur que cette commande n'a pas été trouvée et l'option '--enable-speech-dispatcher' montre une erreur sur le drapeau non supporté quand je lance chrome. – jcubic