Sådan tilføjes tekst-til-tale-funktion på enhver webside
Det tekst til tale funktion refererer til talet fortælling af en tekst vises på en enhed. På nuværende tidspunkt udstyr som bærbare computere, tabletter og mobiltelefoner Har allerede denne funktion. Enhver applikation, der kører på disse enheder, f.eks. En webbrowser, kan gøre brug af det, og udvide dets funktionalitet. Fortællingsfunktionen kan være en passende hjælp til en applikation der viser rigelig tekst, som det giver mulighed for at lytte til besøgende på webstedet.
Web-tale-API'en
Det Web-tale JavaScript API er indgangen til Få adgang til funktionen Tekst-til-tale ved hjælp af en webbrowser. Så hvis du vil introducere tekst-til-tale-funktionalitet på en tekst-tung webside og tillade dine læsere at lytte til indholdet, kan du gøre brug af denne praktiske API eller, for at være mere specifik, dens SpeechSynthesis
grænseflade.
Indledende kode og support check
For at komme i gang, lad os oprette en webside med mig prøve tekst, der skal fortælles, og tre knapper.
Haren med mange venner
En hare var meget populær med ...
Men han afviste og sagde at ...
Moralen ved historien…
Knapperne vil være kontroller til fortællingen. Nu skal vi sørge for, om UA støtter SpeechSynthesis
grænseflade. For at gøre det, kontrollerer vi hurtigt med JavaScript, hvis vindue
objekt har 'SpeechSynthesis'
ejendom, eller ikke.
onload = funktion () if ('speechSynthesis' i vinduet) / * talesyntese understøttet * / else / * talesyntese understøttes ikke * /
Hvis speechSynthesis
er tilgængelig, først vi lav en reference til speechSynthesis
som vi tildeler til synth
variabel. Vi også indlede et flag med falsk
værdi (vi vil se dens formål senere i posten), og vi lav referencer og klik på begivenhedshåndteringsprogrammer for de tre knapper (Play, Pause, Stop) også.
Når brugeren klikker på en af knapperne, er den pågældende funktion (onClickPlay ()
, onClickPause ()
, onClickStop ()
) vil blive kaldt.
hvis ('speechSynthesis' i vinduet) var synth = speechSynthesis; var flag = false; / * referencer til knapperne * / var playEle = document.querySelector ('# play'); var pauseEle = document.querySelector ('# pause'); var stopEle = document.querySelector ('# stop'); / * klik hændelseshåndtering til knapperne * / playEle.addEventListener ('klik', onClickPlay); pauseEle.addEventListener ('klik', onClickPause); stopEle.addEventListener ('klik', onClickStop); funktion onClickPlay () funktion onClickPause () funktion onClickStop ()
Opret de brugerdefinerede funktioner
Lad os nu bygge klikfunktionerne af de tre individuelle knapper, som vil blive kaldt af arrangementshåndtererne.
1. Afspil / Genoptag
Når knappen Play klikkes, først vi Tjek flag
. Hvis det er falsk
, vi satte det på rigtigt
, så hvis en gang knappen trykkes senere, koden inde i først hvis
tilstanden vil ikke udføres (ikke før flag er falsk
igen).
Så vi Opret en ny forekomst af SpeechSynthesisUtterance
grænseflade, der indeholder information om talen, som den tekst, der skal læses, talevolumen, talesalget, hastighed, tonehøjde og sprog i talen. Vi tilføjer artiklen tekst som parameter for konstruktøren, og tildele det til ytring
variabel.
funktion onClickPlay () if (! flag) flag = true; utterance = ny SpeechSynthesisUtterance (document.querySelector ('article') .textContent); utterance.voice = synth.getVoices () [0]; utterance.onend = function () flag = false; ; synth.speak (ytring); hvis (synth.paused) / * unpause / genoptag fortælling * / synth.resume ();
Vi bruger SpeechSynthesis.getVoices ()
metode til udpege en stemme til talen fra de stemmer, der er tilgængelige i brugerens enhed. Da denne metode returnerer en række af alle de tilgængelige stemmeindstillinger i en enhed, så vi tildele den første tilgængelige enhedsstemme ved at bruge utterance.voice = synth.getVoices () [0];
udmelding.
Det onend
ejendom repræsenterer en hændelseshandler, der er udføres, når talen er færdig. Inde i det ændrer vi værdien af flag
variabel tilbage til falsk så den kode, der starter talen kan udføres når knappen er klikket igen.
Så kalder vi SpeechSynthesis.speak ()
metode for at start fortællingen. Vi skal også tjekke hvis fortællingen er pauset, som vi bruger skrivebeskyttet til SpeechSynthesis.paused
ejendom. Hvis fortællingen er standset, skal vi genoptag beretningen på knappen klik, som vi kan opnå ved at bruge SpeechSynthesis.resume ()
metode.
2. Pause
Lad os nu oprette onClickPause ()
funktion, hvor vi først tjekker hvis fortællingen er vedvarende og ikke pauset. Vi kan teste disse betingelser ved at gøre brug af SpeechSynthesis.speaking
og SpeechSynthesis.paused
ejendomme. Hvis begge betingelser er sande, vores onClickPause ()
fungere pauser talen ved at ringe til SpeechSynthesis.pause ()
metode.
funktion onClickPause () hvis (synth.speaking &&! synth.paused) / * pause fortælling * / synth.pause ();
3. Stop
Det onClickStop ()
funktion er bygget ligeledes til onClickPause ()
. Hvis talen går igang, vi stop det ved at ringe til SpeechSynthesis.cancel ()
metode det fjerner alle udtalelser.
funktion onClickStop () hvis (synth.speaking) / * stop fortælling * / / * for safari * / flag = false; synth.cancel ();
Bemærk, at ved aflysning af tale onend
Begivenheden afbrydes automatisk, og vi havde allerede tilføjet flag reset kode inde i den. Imidlertid, Der er en fejl i Safari-browseren der forhindrer denne begivenhed i at fyres, det er grunden til, at vi nulstillede flag i onClickStop ()
fungere. Du behøver ikke gøre det, hvis du ikke vil støtte Safari.
Browser support
Alle seneste versioner af moderne browsere har fuld eller delvis støtte til tale syntese API. Webkit-browsere afspiller ikke tale fra flere faner, pausering er buggy (fungerer men buggy), og tale er ikke nulstillet, når brugeren genindlæser siden i Webkit-browsere.
Arbejde demo
Se kig på live demoen nedenfor, eller tjek den fulde kode på Github.
Se pennen  ° à ... ¸EN¢Â ??  £ £ Tekst til tale - JavaScript af HONGKIAT (@hkdc) på CodePen.