Haren med mange venner

En hare var veldig populær med ...
Men han nektet, og sa at ...
Moral of the story ...
Tekst-til-tale- funksjonen refererer til den talte fortellingen av en tekst som vises på en enhet. For tiden har enheter som bærbare datamaskiner, tabletter og mobiltelefoner allerede denne funksjonen . Ethvert program som kjører på disse enhetene, for eksempel en nettleser, kan benytte seg av det og utvide funksjonaliteten . Fortellingsfunksjonen kan være et passende hjelpemiddel for et program som viser rikelig tekst, da det gir mulighet til å lytte til besøkende på nettstedet.
JavaScript-API for nettprat er inngangsporten for å få tilgang til tekst-til-tale-funksjonen av en nettleser . Så hvis du vil presentere tekst-til-tale-funksjonalitet på en tekst-tung nettside, og la leserne høre på innholdet, kan du gjøre bruk av denne praktiske API-en, eller, for å være mer spesifikk, er SpeechSynthesis
grensesnittet .
For å komme i gang, la oss lage en nettside med meg prøvetekst som skal fortelles, og tre knapper .
Haren med mange venner
En hare var veldig populær med ...
Men han nektet, og sa at ...
Moral of the story ...
Knappene vil være kontrollene for fortellingen . Nå må vi sørge for at UA støtter SpeechSynthesis
grensesnittet. For å gjøre det, sjekker vi raskt med JavaScript hvis window
objektet har egenskapen 'speechSynthesis'
, eller ikke.
onload = funksjon () {if ('speechSynthesis' i vinduet) {/ * talesyntese støttes * /} annet {/ * talesyntese støttes ikke * /}}
Hvis speechSynthesis
er tilgjengelig, oppretter vi først en referanse for speechSynthesis
som vi tilordner speechSynthesis
. Vi starter også et flagg med den false
verdien (vi ser formålet senere i innlegget), og vi lager referanser og klikker hendelsesbehandlere for de tre knappene (Spill, Pause, Stopp) også.
Når brukeren klikker på en av knappene, blir den aktuelle funksjonen ( onClickPlay()
, onClickPause()
, onClickStop()
) kalt.
hvis ('speechSynthesis' i vinduet) {var synth = speechSynthesis; var flagg = false; / * referanser til knappene * / var playEle = document.querySelector ('# play'); var pauseEle = document.querySelector ('# pause'); var stopEle = document.querySelector ('# stop'); / * klikk hendelsesbehandlere for knappene * / playEle.addEventListener ('klikk', onClickPlay); pauseEle.addEventListener ('klikk', onClickPause); stopEle.addEventListener ('klikk', onClickStop); funksjon onClickPlay () {} funksjon onClickPause () {} funksjon onClickStop () {}}
La oss nå bygge klikkfunksjonene til de tre individuelle knappene som blir kalt av hendelseshåndtererne.
Når Play-knappen klikkes, kontrollerer vi først flag
. Hvis det er false
, setter vi det til true
, så hvis noen gang knappen klikkes senere, vil koden i den første if
betingelsen ikke utføres (ikke til flagget er false
igjen).
Deretter oppretter vi en ny forekomst av SpeechSynthesisUtterance
grensesnittet som inneholder informasjon om talen, for eksempel teksten som skal leses, talevolum, talespråk, hastighet, tonehøyde og språk i talen. Vi legger til artikkelteksten som parameter for konstruktøren, og tilordner den til utterance
.
funksjon onClickPlay () {if (! flagg) {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 / gjenoppta fortelling * / synth.resume (); }}
Vi bruker metoden SpeechSynthesis.getVoices()
til å SpeechSynthesis.getVoices()
en stemme for talen fra stemmeene som er tilgjengelige i brukerens enhet. Da denne metoden returnerer en rekke av alle tilgjengelige utterance.voice = synth.getVoices()[0];
i en enhet, tilordner vi den første tilgjengelige utterance.voice = synth.getVoices()[0];
ved å bruke utterance.voice = synth.getVoices()[0];
uttalelse.
onend
egenskapen representerer en hendelseshåndterer som utføres når talen er ferdig . Innsiden av det endrer vi verdien av flag
tilbake til falsk, slik at koden som starter talen kan utføres når knappen klikkes på nytt .
Da kaller vi SpeechSynthesis.speak()
for å starte beretningen . Vi må også sjekke om beretningen er pauset, for hvilken vi bruker den SpeechSynthesis.paused
egenskapen. Hvis beretningen er midlertidig stoppet, må vi gjenoppta fortellingen på knappeklikk, som vi kan oppnå ved å bruke metoden SpeechSynthesis.resume()
.
La oss nå opprette onClickPause()
-funksjonen der vi først kontrollerer om fortellingen er pågående og ikke stoppet . Vi kan teste disse betingelsene ved å benytte SpeechSynthesis.speaking
og SpeechSynthesis.paused
properties. Hvis begge forholdene er sanne, pauser funksjonen onClickPause()
pausen ved å kalle metoden SpeechSynthesis.pause()
.
funksjon onClickPause () {hvis (synth.speaking &&! synth.paused) {/ * pause fortellelse * / synth.pause (); }}
onClickStop()
-funksjonen er bygget på samme måte som onClickPause()
. Hvis talen fortsetter, stopper vi det ved å ringe metoden SpeechSynthesis.cancel()
som fjerner alle uttalene .
funksjon onClickStop () {hvis (synth.speaking) {/ * stopp fortelling * / / * for safari * / flagg = false; synth.cancel (); }}
Vær oppmerksom på at ved avbrudd av tale blir onend
automatisk slått av, og vi hadde allerede lagt til flagget tilbakestilt kode inne i det. Det er imidlertid en feil i Safari-nettleseren som forhindrer denne hendelsen fra å skyte. Derfor tilbakestilte vi flagget i onClickStop()
-funksjonen. Du trenger ikke å gjøre det hvis du ikke vil støtte Safari.
Alle siste versjoner av moderne nettlesere har full eller delvis støtte for talesyntese-API. Webkit-nettlesere spiller ikke tale fra flere faner, pause er buggy (fungerer men buggy), og tale tilbakestilles ikke når brukeren laster om siden i Webkit-nettlesere.
Ta en titt på live-demoen under, eller sjekk ut hele koden på Github.
Se pennen til à ... ø ¢ â,  "Ã,  £ Tekst til tale - JavaScript av HONGKIAT (@hkdc) på CodePen.
En titt inn i: SublimeLinter 3
I et tidligere innlegg har vi vist deg hvordan du finner potensielle kodefeil og feil i SublimeText ved hjelp av SublimeLinter. Dessverre, som en av våre lesere også pekte på det, virker det ikke i Sublime Text 3.Sublime Text 3 introduserte et nytt sett med API om hvordan et plugin skal fungere, noe som sannsynligvis har påvirket SublimeLinters-evner. Ut
35 ganger ærlighet ikke lagret dagen [pics]
Ærlighet er den beste politikken, vi blir fortalt gang på gang når vi var barn, av de samme voksne som bløffer på kort, forteller hvite løgner, bøyer sannheten, overdriver med størrelser, sprer misforståelser, myter, sladder og forfalskninger. Så nå som jeg er en voksen (noe), overfører jeg ideen til neste generasjon at noen ganger, barn, ærlighet kanskje ikke er den beste politikken for å vedta.Det er noe kj