Eksklusiv Freebie: Text

Exclusive Freebie: Tekst-til-tale-verktøy
Del
Del
Del
Del

Dette Cyber ​​mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.

Først i måneden (mer eller mindre), og derfor tid for en annen Eksklusiv Freebie! Denne måneden ActiveDen forfatter flashanctuary byr opp et interessant verktøy gjør bruk av Google Text-To-Speech API. Sjekk det ut etter hopp!




Bruke Unofficial Tekst-til-tale Google API

Ikke så lenge siden, google lagt til en ny kul funksjon til Google trans~~POS=TRUNC system kalt tekst-til-tale-funksjon. Er er ikke en offisiell API, men alle kan gjøre bruk av tjenesten. Alt du trenger å gjøre er å få tilgang til en url som genererer en mp3-fil. Denne filen kan spilles i flash som enhver mp3-fil



Trinn 1:. Opprette tekst-til-tale-Class

Det første trinnet er å lage tekst-til-tale klasse. Åpne blits og velg filen menyen, ny undermeny og ny handling skriptfilen. Deretter lagre denne filen på harddisken i ønsket pakken. La oss kalle denne klassen og fil Text2Speech.as
pakke com.flashanctuary.text2speech {//flash import importere flash.events.Event.; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundTransform; import flash.net.URLRequest; /** * Text2Speech Hoved klasse * /public class Text2Speech {offentlig funksjon Text2Speech (): void {}}}



Trinn 2: Erklærte Nødvendige Variabler

Først må url konstant koblingen vi til Google API. En annen konstant erklært gjelder google api begrensning: det kan ikke spille en streng som er lengre enn 100 tegn. Selvfølgelig spiller min flash-fil uttrykk på mer enn 100 tegn, vil jeg forklare hvordan senere

Andre variabler som vi trenger Inneholder:. Teksten som skal spilles, en matrise for å inneholde fraser av maksimalt 100 tegn fra teksten, gjeldende setning posisjon til å bli spilt på en stund, språket hvor du skal spille teksten. Vi trenger også tre variabler for å spille av lyden: a. Sound variabel, en SoundChannel variabel og en SoundTransform variabel
//google api linkprivate statisk konst url: String = "http://translate.google.com/translate_tts"; //Maksimalt antall tegn støttes av Google apiprivate statiske const noOfMaxChars: Antall = 100; //privat Var _text: String, private Var _sentences: Array, privat Var _sentencePosition: int; //privat Div lyd: Lyd, privat Var soundChannel: SoundChannel, privat Var sTransform: SoundTransform; //privat Var _volume: Number = 0,5; privat Var _currentPosition: Antall = 0; //privat Var _language: String;



Trinn 3: La oss Initial det

nå vil vi trenge en offentlig funksjon for å initialisere denne klassen: dette vil inneholde teksten vi ønsker å spille og språket.
offentlig funksjon init (språk: String, tekst: String): void {//sett språket _language = språk; //Dersom antall tegn er lengre enn det maksimale antallet tegn som støttes //den teksten vil bli delt if (text.length < = noOfMaxChars) {initSound (url + "tl =" + språk + "& q = "+ tekst); } Else {_sentences = new Array (); //Split tekst divideText (tekst); _sentencePosition = 0; //Begynne palying den første delen av teksten initSound (url + "tl =" + språk + "& q =" + _sentences [_sentencePosition]); }}



Trinn 4: Trim Text

Hvis vår tekst er lengre enn den støttet antall tegn, enn vi må dele den i setninger av maksimalt 100 tegn. For å gjøre dette, skaper vi en rekursiv funksjon for å gå gjennom all teksten og sett inn setninger på inntil 100 tegn i en rekke
privat funksjon divideText (str: String): void {var substr: String;. if (str.length > = noOfMaxChars) {substr = str.substring (0, noOfMaxChars + 1); } Else {substr = str; } If (substr.charAt (substr.length - 1) = "" & & str.length > = noOfMaxChars {var Indeks: int = substr.lastIndexOf!) ( ""); substr = str.substring (0, indeks); } _sentences.push (Substr); if (str.substring (substr.length + 1, str.length) .length > 0) {divideText (str.substring (substr.length + 1, str.length)); }}



Trinn 5: Spill av de Setninger

Fra nå av, prosessen er likt når du oppretter en mp3-spiller. For det første initial vi lyden variablene som jeg snakket om i første omgang, og etter dette vi begynner å spille den første setningen fra hele setninger array.

Når denne setningen er ferdig å spille, vi går og spille neste en (når SOUND_COMPLETE hendelser som skjer). Og så videre og så videre inntil alle maks 100 tegn setninger fra vår opprinnelige teksten er spilt
offentlig funksjon initSound (bane: String):. Void {//reset høres chanels, lyd og lyd forvandle hvis de ikke er null if ( soundChannel = null) {stopSound (!); soundChannel = null; } If (høres = null) {lyd = null; } If (sTransform = null) {sTransform = null; } _currentPosition = 0; //Oppretter ny lyd og begynne å spille lyd = new Sound (ny URLRequest (bane)); soundChannel = nye SoundChannel (); sTransform = ny SoundTransform (_volume); playSound ();} offentlig funksjon playSound (): void {soundChannel = sound.play (_currentPosition); soundChannel.addEventListener (Event.SOUND_COMPLETE, soundComplete); soundChannel.soundTransform = sTransform;} offentlig funksjon stopSound (): void {_currentPosition = soundChannel.position; if (soundChannel.hasEventListener (Event.SOUND_COMPLETE)) {soundChannel.removeEventListener (Event.SOUND_COMPLETE, soundComplete); } SoundChannel.stop ();} private funksjon soundComplete (evt: Hendelses): void {stopSound (); //Når gjeldende lyden er fullført gå til neste gruppe av charcters og spille den delen if (_sentences = null) {if (_sentencePosition < _sentences.length - 1) {_sentencePosition ++; initSound (url + "tl =" + _language + "& q =" + _sentences [_sentencePosition]); }}}



Trinn 6: Hvordan bruke Denne klassen

Du vil sannsynligvis nå spør hvordan denne klassen kan brukes i et av dine prosjekter. Vel, dette er veldig enkelt: du trenger bare å opprette en forekomst
av denne klassen og initialisere den med ønsket språk og tekst. Alle språkene som støttes er oppført og kan bli funnet på http://translate.google.com
//skape ny tekst til tale variablevar T2S:. Text2Speech = new Text2Speech (); //initialisere tekst til tale klassen forekomst med ønsket språk og textt2s.init (language_abbreviation, text_to_play);



Lyd Spilleproblemer problemer~~POS=HEADCOMP

Du har kanskje allerede lagt merke til i forhåndsvisnings at noen ganger en cut-off vises når en lyd ender og en annen begynner. Dette problemet kan enkelt løses ved å laste ned lyden før du spiller dem tilbake. Denne metoden innebærer en lengre lasting tid, spesielt når den valgte teksten å spille er veldig lang. Den beste løsningen for tiden ser ut til å være over en, men skulle noen ha en bedre en, er du hjertelig velkommen til å legge igjen en kommentar!



Konklusjon

Jeg har brukte lang tid på å prøve å finne en løsning for denne tekst-til-tale-problem, så jeg kan bruke det i Flash. Det synes google har løst det, og løsningen er i disse dager enkel og tilgjengelig for alle utviklere.

Dette er mitt første bidrag til Activetuts +, jeg håper du har lært noe nyttig, nyte filen og takk for lesing!