Startpagina » Coding » Tekst-naar-spraakfunctie toevoegen op elke webpagina

    Tekst-naar-spraakfunctie toevoegen op elke webpagina

    De tekst naar spraak functie verwijst naar de gesproken vertelling van een tekst weergegeven op een apparaat. Op dit moment apparaten zoals laptops, tablets en mobiele telefoons heb deze functie al. Elke toepassing die op deze apparaten wordt uitgevoerd, zoals een webbrowser, kan maak er gebruik van, en breid zijn functionaliteit uit. De verhaalfunctie kan een geschikt hulpmiddel zijn voor een toepassing die geeft overvloedige tekst weer, zoals biedt de mogelijkheid om te luisteren voor bezoekers van de website.

    De Web Speech API

    De Web Speech JavaScript API is de toegangspoort tot toegang tot de Text-to-Speech-functie via een webbrowser. Dus als u tekst-naar-spraak-functionaliteit wilt introduceren op een webpagina met veel tekst en uw lezers naar de inhoud wilt laten luisteren, kunt u gebruikmaken van deze handige API, of, om meer specifiek te zijn, zijn Spraaksynthese interface.

    Initiële code en ondersteuning controleren

    Laten we om aan de slag te gaan een webpagina maken met ik voorbeeld tekst om te worden verteld, en drie knoppen.

     

    De haas met veel vrienden

    Een haas was erg populair bij ...

    Maar hij weigerde en verklaarde dat ...

    Moraal van het verhaal…

    De knoppen zijn de controles voor de vertelling. Nu moeten we ervoor zorgen als het UA ondersteunt de Spraaksynthese interface. Om dit te doen, controleren we snel met JavaScript of het venster object heeft de 'spraaksynthese' eigendom, of niet.

     onload = function () if ('speechSynthesis' in venster) / * spraaksynthese ondersteund * / else / * spraaksynthese niet ondersteund * / 

    Als spraaksynthese is beschikbaar, eerst wij maak een referentie voor spraaksynthese die we toewijzen aan de synth variabel. Wij ook start een vlag met de vals waarde (we zullen het doel later in de post zien), en wij maak referenties en klik op event handlers voor de drie knoppen (afspelen, pauzeren, stoppen).

    Wanneer de gebruiker op een van de knoppen klikt, wordt de bijbehorende functie (onClickPlay (), onClickPause (), onClickStop ()) zal gebeld worden.

     if ('speechSynthesis' in venster) var synth = speechSynthesis; var flag = false; / * verwijzingen naar de knoppen * / var playEle = document.querySelector ('# play'); var pauseEle = document.querySelector ('# pause'); var stopEle = document.querySelector ('# stop'); / * klik op gebeurtenishandlers voor de knoppen * / playEle.addEventListener ('klik', onClickPlay); pauseEle.addEventListener ('klik', onClickPause); stopEle.addEventListener ('klik', onClickStop); functie onClickPlay ()  functie onClickPause ()  functie onClickStop ()  

    Maak de aangepaste functies

    Laten we nu bouw de klikfuncties van de drie afzonderlijke knoppen die door de gebeurtenishandlers worden aangeroepen.

    1. Afspelen / hervatten

    Wanneer op de knop Afspelen wordt geklikt, eerst controleer de vlag. Als het is vals, we hebben het ingesteld waar, dus als op een later tijdstip op de knop wordt geklikt, wordt de code in de eerste als voorwaarde wordt niet uitgevoerd (niet totdat de vlag is vals nog een keer).

    Dan gaan we maak een nieuw exemplaar van de SpeechSynthesisUtterance interface met informatie over de spraak, zoals de te lezen tekst, het gesproken woordvolume, de gesproken stem, snelheid, toonhoogte en taal van de spraak. We voegen de artikeltekst toe als parameter van de constructor, en wijs het toe aan de uiting veranderlijk.

     function onClickPlay () if (! flag) flag = true; uitspreken = nieuwe SpeechSynthesis Uitwisseling (document.querySelector ('article'). textContent); utterance.voice = synth.getVoices () [0]; utterance.onend = function () flag = false; ; synth.speak (uitingen);  if (synth.paused) / * unpause / hervatten vertelling * / synth.resume ();  

    Wij gebruiken de SpeechSynthesis.getVoices () methode om duid een stem aan voor de toespraak van de beschikbare stemmen op het apparaat van de gebruiker. Aangezien deze methode een array van alle beschikbare spraakopties in een apparaat retourneert, wij wijs de eerste beschikbare apparaatstem toe door de utterance.voice = synth.getVoices () [0]; uitspraak.

    De eindeloos eigenschap vertegenwoordigt een gebeurtenishandler die dat wel is uitgevoerd wanneer de spraak is voltooid. Binnenin veranderen we de waarde van de vlag veranderlijk terug naar false zodat de code die de spraak start kan worden uitgevoerd wanneer de knop is klikte opnieuw.

    Dan bellen we de SpeechSynthesis.speak () methode om start de vertelling. We moeten ook controleren als het verhaal is gepauzeerd, waarvoor we de alleen-lezen gebruiken SpeechSynthesis.paused eigendom. Als het verhaal is onderbroken, moeten we dit doen hervat de vertelling op de knop klikken, die we kunnen bereiken met behulp van de SpeechSynthesis.resume () methode.

    2. Pauzeer

    Laten we nu de onClickPause () functie waarin we eerst controleren als het verhaal aan de gang is en niet is gepauzeerd. We kunnen deze voorwaarden testen door gebruik te maken van de SpeechSynthesis.speaking en de SpeechSynthesis.paused eigenschappen. Als beide voorwaarden waar zijn, onze onClickPause () functie pauzeert de spraak door het te bellen SpeechSynthesis.pause () methode.

     function onClickPause () if (synth.speaking &&! synth.paused) / * pauzeer vertelling * / synth.pause ();  
    3. Stop

    De onClickStop () functie is op dezelfde manier gebouwd onClickPause (). Als de speech aan de gang is, wij stop er mee door het te bellen SpeechSynthesis.cancel () methode dat verwijdert alle uitingen.

     function onClickStop () if (synth.speaking) / * stop commentaar * / / * voor safari * / flag = false; synth.cancel ();  

    Merk op dat bij het annuleren van spraak, de eindeloos evenement wordt automatisch geactiveerd, en we hebben de code voor het opnieuw instellen van de vlag al erin opgenomen. Echter, er is een fout in de Safari-browser die voorkomt dat deze gebeurtenis wordt geactiveerd, daarom hebben we de vlag in de onClickStop () functie. U hoeft het niet te doen als u Safari niet wilt ondersteunen.

    Browserondersteuning

    Alle nieuwste versies van moderne browsers volledige of gedeeltelijke ondersteuning hebben voor de API voor spraaksynthese. Webkit-browsers spelen geen spraak van meerdere tabbladen, pauzeren is buggy (werkt maar bugt) en spraak wordt niet gereset wanneer de gebruiker de pagina opnieuw laadt in Webkit-browsers.

    Werkende demo

    Bekijk de live demo hieronder, of bekijk de volledige code op Github.

    Zie de Pen à ??  ° à ... ¸EEN¢Tekst naar spraak - JavaScript door HONGKIAT (@hkdc) op CodePen.