Page d'accueil » Codage » Comment ajouter une fonctionnalité de synthèse vocale sur n'importe quelle page Web

    Comment ajouter une fonctionnalité de synthèse vocale sur n'importe quelle page Web

    le texte pour parler fonctionnalité se réfère à la narration parlée d'un texte affiché sur un appareil. Actuellement, des appareils tels que les ordinateurs portables, les tablettes et les téléphones mobiles déjà cette fonctionnalité. Toute application exécutée sur ces appareils, telle qu'un navigateur Web, peut en faire usage, et étendre ses fonctionnalités. La fonction de narration peut constituer une aide appropriée pour une application qui affiche beaucoup de texte, comme ca offre la possibilité d'écouter aux visiteurs du site.

    L'API Web Speech

    le API JavaScript Web Speech est la porte d'entrée accéder à la fonctionnalité de synthèse vocale par un navigateur Web. Ainsi, si vous souhaitez introduire la fonctionnalité de synthèse vocale sur une page Web contenant beaucoup de texte et permettre à vos lecteurs d’écouter le contenu, vous pouvez utiliser cette API très pratique, ou plus précisément sa Synthèse de discours interface.

    Vérification initiale du code et du support

    Pour commencer, créons une page Web avec moi exemple de texte à raconter, et trois boutons.

     

    Le lièvre avec beaucoup d'amis

    Un lièvre était très populaire avec…

    Mais il a refusé, déclarant que…

    Morale de l'histoire…

    Les boutons seront les contrôles pour la narration. Maintenant, nous devons nous assurer que le UA soutient le Synthèse de discours interface. Pour ce faire, nous vérifions rapidement avec JavaScript si le la fenêtre objet a la 'synthèse de discours' propriété, ou pas.

     onload = function () if ('speechSynthesis' dans la fenêtre) / * synthèse vocale prise en charge * / else / * synthèse vocale non prise en charge * / 

    Si synthèse de discours est disponible, d'abord nous créer une référence pour synthèse de discours que nous attribuons à la synthé variable. Nous avons aussi initier un drapeau avec le faux valeur (nous verrons son but plus tard dans le post), et nous créer des références et cliquer sur des gestionnaires d'événements pour les trois boutons (Play, Pause, Stop) ainsi.

    Lorsque l'utilisateur clique sur l'un des boutons, sa fonction respective (onClickPlay (), onClickPause (), onClickStop ()) sera appelé.

     if ('speechSynthesis' dans la fenêtre) var synth = speechSynthesis; var flag = false; / * références aux boutons * / var playEle = document.querySelector ('# play'); var pauseEle = document.querySelector ('# pause'); var stopEle = document.querySelector ('# stop'); / * Cliquez sur les gestionnaires d'événements pour les boutons * / playEle.addEventListener ('click', onClickPlay); pauseEle.addEventListener ('click', onClickPause); stopEle.addEventListener ('click', onClickStop); fonction onClickPlay ()  fonction onClickPause ()  fonction onClickStop ()  

    Créer les fonctions personnalisées

    Maintenant construire les fonctions de clic des trois boutons individuels qui seront appelés par les gestionnaires d'événements.

    1. Jouer / Reprendre

    Lorsque le bouton de lecture est cliqué, nous commençons par vérifier la drapeau. Si c'est faux, nous l'avons mis à vrai, donc, si vous cliquez ultérieurement sur le bouton, le code à l’intérieur du premier si la condition ne s'exécutera pas (pas avant que le drapeau soit faux encore).

    Ensuite nous créer une nouvelle instance du SpeechSynthesisUtterance interface qui contient des informations sur la parole, comme le texte à lire, le volume de la parole, la voix parlée, la vitesse, la hauteur et la langue de la parole. Nous ajoutons le texte de l'article comme paramètre du constructeur, et l'assigner à la énonciation variable.

     fonction onClickPlay () if (! flag) flag = true; prononciation = new SpeechSynthesisUtterance (document.querySelector ('article'). textContent); utterance.voice = synth.getVoices () [0]; utterance.onend = function () flag = false; ; synth.speak (énonciation);  if (synth.paused) / * unpause / resume narration * / synth.resume ();  

    Nous utilisons le SpeechSynthesis.getVoices () méthode pour désigner une voix pour le discours parmi les voix disponibles sur le périphérique de l'utilisateur. Comme cette méthode renvoie un tableau de toutes les options de voix disponibles dans un périphérique, nous attribuer la première voix de périphérique disponible en utilisant le utterance.voice = synth.getVoices () [0]; déclaration.

    le fin la propriété représente un gestionnaire d'événements qui est exécuté lorsque le discours est terminé. À l'intérieur de celui-ci, nous changeons la valeur de la drapeau variable retour à faux de sorte que le code qui commence le discours peut être exécuté quand le bouton est cliqué à nouveau.

    Puis on appelle le SpeechSynthesis.speak () méthode pour commencer la narration. Nous devons aussi vérifier si la narration est en pause, pour lequel on utilise la lecture seule SpeechSynthesis.paused propriété. Si la narration est en pause, nous devons reprendre la narration sur le clic du bouton, que nous pouvons obtenir en utilisant le SpeechSynthesis.resume () méthode.

    2. Pause

    Créons maintenant le onClickPause () fonction dans laquelle nous vérifions d'abord si la narration est en cours et non en pause. Nous pouvons tester ces conditions en utilisant les SpeechSynthesis.speaking et le SpeechSynthesis.paused Propriétés. Si les deux conditions sont vraies, notre onClickPause () une fonction met le discours en pause en appelant le SpeechSynthesis.pause () méthode.

     function onClickPause () if (synth.speaking &&! synth.paused) / * mettre en pause la narration * / synth.pause ();  
    3. Stop

    le onClickStop () la fonction est construit de manière similaire à onClickPause (). Si le discours est en cours, nous arrête ça en appelant le SpeechSynthesis.cancel () méthode qui enlève tous les énoncés.

     function onClickStop () if (synth.speaking) / * arrête la narration * / / * pour safari * / flag = false; synth.cancel ();  

    Notez que lors de l’annulation du discours, le fin l'événement est automatiquement déclenché, et nous avions déjà ajouté le code de réinitialisation du drapeau à l'intérieur. toutefois, il y a un bug dans le navigateur Safari qui empêche cet événement de tirer, c'est pourquoi nous avons réinitialisé le drapeau dans le onClickStop () une fonction. Vous n'êtes pas obligé de le faire si vous ne voulez pas supporter Safari.

    Support du navigateur

    Toutes les dernières versions des navigateurs modernes avoir un soutien total ou partiel pour l'API de synthèse vocale. Les navigateurs Webkit ne lisent pas la parole à partir de plusieurs onglets, la pause est un problème (fonctionne, mais), et la parole n'est pas réinitialisée lorsque l'utilisateur recharge la page dans les navigateurs Webkit..

    Démo de travail

    Regardez la démo en direct ci-dessous ou consultez le code complet sur Github..

    Voir le stylo à ?? ° Ã… ¸UNE¢Texte à Discuter - JavaScript par HONGKIAT (@hkdc) sur CodePen.