Lag en enkel og attraktiv MP3-spiller

Vi skal bygge en enkel mp3-spiller som du kan legge inn på en hvilken som helst nettside (et bånds hjemmeside for eksempel). Ved å følge denne tuten lærer du hvordan du importerer Illustrator-grafikk, hvordan du bygger knappen sprites med movieclips og hvordan du bruker Timer og Sound-klassene. Her går vi ...




Starter

Først vil jeg bare gå gjennom det vi trenger for å fullføre denne opplæringen:

Jeg har brukt den tredje partsklassen Caurina Tweener til å tween elementer på skjermen. Dette er ikke nødvendig fordi du kan bruke Flashs egen tween-klasse for å gjøre den samme jobben. Husk at hvis du ikke er kjent med Caurina, foreslår jeg at du tar en titt. Tween Lite er en annen tredjeparts tweener du kanskje har hørt om. Det er en veldig kraftig tween klasse som du også kan bruke til dette prosjektet hvis du vil. Du finner Caurina Tweener i kildekoden.

  • Kilden koden inneholder en mp3-fil som vi trenger: Tarzan's mighty yell :). Du kan også bruke din egen mp3 hvis du vil.
  • Også i kildekoden finner du katalogen "ai" som inneholder filen simplemp3player.ai. Denne filen inneholder all grafikk for spilleren.
  • Til slutt har jeg tatt med skrift som vi trenger. Det kalles 04b03 og det er en bitmap skrift. Installer den og du er klar til å gå.

Trinn 1: Opprett ny fil

Først må du opprette et nytt Flash ActionScript 3.0-dokument. Du trenger ikke å justere noen dokumentegenskaper.

Gå til Flash> Innstillinger> AI-filimportør på Mac eller Rediger> Innstillinger> AI-filimportør på Windows. Pass på at du har følgende innstillinger:

Lagre det og gi det navnet "SimpleMP3Player.fla". Kopier også katalogen "caurina" og "tarzan.mp3" til samme sted som din .fla-fil.

Trinn 2: Importer Illustrator-fil

Nå er vi klare til å importere Illustrator-filen. Gå til Arkiv> Import> Importer til trinn. Finn "simplemp3player.ai" fra kilden pakke "ai" katalogen, trykk OK og du får skjermen som vist nedenfor. Sett Konverter til lag "Flash lag" slik at du får alle lagene som finnes i ai-filen direkte til Flash. De neste to alternativene, som vist i bildet, plasserer alt kunstverket til samme koordinater som i ai-filen og endrer størrelsen på Flash-dokumentet nøyaktig til den størrelsen vi trenger.

Når du klikker OK i importdialogen, skal dokumentet se ut som bildet vist ovenfor.

Trinn 3: Opprett Button Sprite

Du har sikkert lagt merke til å spille og pause knapper i det siste bildet. De skal være vår knappsprite som styrer lyden. Alle knappene er gruppert i en gruppe.

Velg bare knappene gruppen og trykk F8 for å få "Konverter til symbol" -skjermen. Gi det navnet "knapper" og kontroller at du har valgt MovieClip som typen. Angi registreringen øverst til venstre og klikk OK. Bytt til Egenskaper panelet og gi objektet et forekomstnavn "knapper". Bildet nedenfor illustrerer disse trinnene visuelt:

Vi har knappene våre i en filmklipp, men masken er ikke inkludert. Vi trenger en mer filmklipp for å binde dem alle sammen.

Velg knappene filmklipp og maskeobjektet. Trykk igjen på F8 og gi det nå navnet "buttonSprite". Husk også å gi det et forekomstnavn. Denne gangen "bs" (jeg vet hva du tenker, men dette er en forkortelse av ButtonSprite).

Trinn 4: Manuell Masking

Nå er vår knappesprite nesten klar til å rocke. Alt vi trenger å gjøre er å maske det slik at det bare viser en knapp om gangen.

Dobbeltklikk på knappenSprites filmklipp. Opprett et nytt lag over det aktive laget, og merk det "maske". Velg maskeobjektet og klipp det med "Cmd + X" på Mac eller "Ctrl + X" på Windows. Velg maskeringslaget og lim inn med "Cmd + V" på Mac eller "Ctrl + V" på Windows. Det spiller ingen rolle hvor maskeobjektet ditt er fordi neste vi justerer det til riktig sted.

Når masken er valgt, åpner du Juster-panelet (Vindu> Juster) og kontrollerer at "Til scenen" -knappen er trykket ned. Trykk nå på "Juster toppkanten" og "Juster venstre kant" -knappene, og maskeobjektet skal nå være i riktig posisjon, øverst til venstre i filmklippet.

Det eneste som gjenstår å gjøre er å maskere knappene. Høyreklikk over maskelaget og velg Mask.

Du kan se effekten øyeblikkelig; bare en knapp er synlig.

Trinn 5: Start Opprett skjermen

La oss glemme knappene en stund og fokusere på MP3-spillerens skjerm. Jeg skal vise deg hvordan du bygger dette skjermelementet manuelt. Det kan selvfølgelig gjøres med AS3, men la oss gjøre det manuelt denne gangen.

Velg først maskeelementet fra maskelaget. Konverter den til en filmklipp og gi den navnet "displayMask". Bruk dette navnet som forekomstnavn også. Masken for visning er klar, så skjul laget. Deretter lager du et lag mellom knappelaget og maskelaget. Gi det navnet "tekst". Velg tekstverktøyet fra paletten Verktøy og bruk alternativene som vises i bildet nedenfor:

Trinn 6: Legg til tekstfelt til visning

Vi trenger tekstfelter for å vise vår informasjon (artist, sangnavn, lastingsprosent og sanglengde). Vi lager tekstfelt manuelt til scenen.

Først tegner du tekstfiler på tekstlaget som vist på bildet nedenfor. Konverter alle tre tekstfeltene til en enkelt filmklip kalt "playerTexts". Opprett en ny tekstfelt og kaller den "preloader". Du trenger ikke å konvertere dette til en filmklipp.

Trinn 7: Fullfør skjermen

Alt vi trenger å gjøre er å inkludere vår nye loader-tekstfelt og playerTexts-movieclip i en filmklipp slik at vi kan kontrollere tekstene når og når vi liker.

Velg Loader-tekstfeltet og playerTexts-movieclip og trykk F8. Gi det et navn og et forekomstnavn på "display". Nå har vi fullført vårt skjermhierarki, det skal se slik ut:

For å skrive et datauteksempel til songInfo-tekstfelt må vi skrive følgende linje av kode:

 display.playerTexts.songInfo.text = 'Det er her vi setter artisten og sangnavnet';

Så nå har vi alle grafiske elementer klar til at vi trenger MP3-spilleren. Deretter hopper vi dypt inn i koden, så dykk med meg!

Trinn 8: Lag dokumentklassefil

For å få koden til å fungere må vi lage dokumentklassen. Dokumentklassekode utføres først når .swf-filer spilles. Du trenger ikke å skrive koden til tidslinjen lenger, og klassen din er lettere å importere til en annen .fla-fil i fremtiden hvis det trengs.

Gå til Arkiv> Ny. Velg "Actionscript-fil" fra vinduet som åpnes, og klikk OK. Lagre filen i samme mappe som din .fla-fil og gi den navnet "SimpleMP3Player.as".

Nå tilordne den nye .as-filen som dokumentklasse. Klikk på scenen og gå til Egenskaper-panelet. Der finner du feltet "Klasse" der du må skrive inn klassenavnet du har opprettet. Skriv inn "SimpleMP3Player" og klikk på den lille blyantknappen. Hvis du stavet klassenavnet riktig, må filen "SimpleMP3Player.as" bli aktiv. Ellers vil Flash kaste en feil.

Trinn 9: Koden

Kode bringer alt til liv. Her er det fullførte ActionScript, jeg skal forklare det blokkert for blokk. Sjekk også kildekoden fra kildepakken, jeg har kommentert det fra begynnelse til slutt.

 pakke import flash.display.MovieClip; importere flash.events.Event; importer flash.events.EventDispatcher; importer flash.events.IOErrorEvent; importer flash.events.MouseEvent; importer flash.events.ProgressEvent; importer flash.events.TimerEvent; importere flash.media.Sound; importere flash.media.SoundChannel; importer flash.media.ID3Info; importere flash.net.URLRequest; importere flash.utils.Timer; importer flash.text.TextField; importere flash.text.TextFieldAutoSize; importere caurina.transitions.Tweener; offentlig klasse SimpleMP3Player utvider MovieClip // Lag noen variabler som vi trenger private var mp3File: Sound; private var mp3FilePosition: SoundChannel; privat var id3Data: ID3Info; privat var id3InfoAvailable = false; privat var oppdateringstid: Timer; privat var playingSound: Boolean = false; privat var soundPosition: Number; private var songReachedEnd: Boolean = false; private var-knappepos: Array = nytt Array ('0', '-36', '-72', '-108', '-144', '-180', '-216', '-252'); offentlig funksjon SimpleMP3Player () display.playerTexts.x = -73; display.mask = displayMask; bs.buttons.buttonMode = bs.buttons.enabled = false; bs.buttons.y = buttonPos [3]; loadMP3 ();  privat funksjon loadMP3 (): void mp3File = new Sound (); mp3File.addEventListener (ProgressEvent.PROGRESS, mp3FileLoading); mp3File.addEventListener (Event.COMPLETE, mp3FileLoaded); mp3File.addEventListener (IOErrorEvent.IO_ERROR, errorLoadingSound); mp3File.addEventListener (Event.ID3, getID3Data); mp3File.load (ny URLRequest ('tarzan.mp3')); Tweener.addTween (display.preloader, x: 96, tid: 1);  privat funksjon mp3FileLoading (e: ProgressEvent): void var currentPercent: Number = Math.round (e.bytesLoaded / e.bytesTotal * 100); display.preloader.text = 'LOADING ...' + currentPercent + '%'; hvis (currentPercent> 50 && id3InfoAvailable) Tweener.addTween (display.preloader, x: 200, tid: 1, onComplete: playMP3, onCompleteParams: [false, 0]); mp3File.removeEventListener (ProgressEvent.PROGRESS, mp3FileLoading);  privat funksjon mp3FileLoaded (e: Event): void mp3File.removeEventListener (Event.COMPLETE, mp3FileLoaded); mp3File.removeEventListener (ProgressEvent.PROGRESS, updateBufferField); Tweener.addTween (display.playerTexts.buffer, x: 200, tid: 1);  privatfunksjon errorLoadingSound (e: IOErrorEvent): void trace ('Feil ved lasting av lyd:' + e);  privat funksjon getID3Data (e: Event): void id3InfoAvailable = true; id3Data = mp3File.id3;  privat funksjon playMP3 (useSp: Boolean, sp: Number): void if (useSp) mp3FilePosition = mp3File.play (sp); ellers mp3FilePosition = mp3File.play (); playingSound = true; mp3FilePosition.addEventListener (Event.SOUND_COMPLETE, songFinished); mp3File.addEventListener (ProgressEvent.PROGRESS, updateBufferField); bs.buttons.buttonMode = bs.buttons.enabled = true; bs.buttons.y = buttonPos [0]; bs.buttons.addEventListener (MouseEvent.MOUSE_OVER, mouseOverBs); bs.buttons.addEventListener (MouseEvent.MOUSE_OUT, mouseOutBs); bs.buttons.addEventListener (MouseEvent.CLICK, mouseClickBs); updateTime = ny timer (100); updateTime.addEventListener (TimerEvent.TIMER, getMP3Time); updateTime.start (); var si: String = id3Data.artist + '-' + id3Data.songName; si = si.toUpperCase (); display.playerTexts.songInfo.autoSize = TextFieldAutoSize.LEFT; display.playerTexts.songInfo.wordWrap = false; display.playerTexts.songInfo.text = si; Tweener.addTween (display.playerTexts, x: 60, tid: 1);  privat funksjon updateBufferField (e: ProgressEvent): void var currentPercent: Number = Math.round (e.bytesLoaded / e.bytesTotal * 100); display.playerTexts.buffer.text = currentPercent + '%';  privat funksjon getMP3Time (e: TimerEvent): void var totalMinutes = Math.floor (mp3File.length / 1000/60); var totalSeconds = Math.floor (mp3File.length / 1000)% 60; var currentMinutes = Math.floor (mp3FilePosition.position / 1000/60); var currentSeconds = Math.floor (mp3FilePosition.position / 1000)% 60; hvis (totalSekunder < 10) totalSeconds = '0' + totalSeconds; if (currentSeconds < 10) currentSeconds = '0' + currentSeconds; display.playerTexts.times.text = currentMinutes + ':' + currentSeconds + '/' + totalMinutes + ':' + totalSeconds;  private function songFinished(e:Event):void  mp3FilePosition.removeEventListener(Event.SOUND_COMPLETE, songFinished); updateTime.removeEventListener(TimerEvent.TIMER, getMP3Time); bs.buttons.y = buttonPos[3]; mp3FilePosition.stop(); playingSound = false; songReachedEnd = true; soundPosition = 0; display.playerTexts.times.text = 'PLAY AGAIN?';  /* * allButtons.bs event methods begin */ private function mouseOverBs(e:MouseEvent):void  if (playingSound) bs.buttons.y = buttonPos[5]; else bs.buttons.y = buttonPos[1]; if (songReachedEnd && !playingSound) bs.buttons.y = buttonPos[1];  private function mouseOutBs(e:MouseEvent):void  if (playingSound) bs.buttons.y = buttonPos[0]; else bs.buttons.y = buttonPos[4]; if (songReachedEnd && !playingSound) bs.buttons.y = buttonPos[3];  private function mouseClickBs(e:MouseEvent):void  if (playingSound)  bs.buttons.y = buttonPos[4]; soundPosition = mp3FilePosition.position; updateTime.stop(); mp3FilePosition.stop(); playingSound = false; display.playerTexts.times.text = 'PAUSE';  else if (!playingSound)  bs.buttons.y = buttonPos[2]; playMP3(true, soundPosition); playingSound = true;  else if (songReachedEnd)  songReachedEnd = false; playMP3(false, 0);    

Trinn 10: Grunnpakke

 pakke // Plasser hvor hele klassen importen går offentlig klasse SimpleMP3Player utvider MovieClip offentlig funksjon SimpleMP3Player () 

Vårt startpunkt ser ut som eksempelet ovenfor. Husk at klassenavnet skal være det samme som dokumentets klassenavn. Alt inne i den offentlige funksjonen SimpleMP3Player kjøres rett etter at Flash har lastet inn klassen vår.

Trinn 11: Import obligatoriske klasser

La oss importere alle klassene at vår MP3-spiller trenger å fungere skikkelig.

 pakke import flash.display.MovieClip; importere flash.events.Event; importer flash.events.EventDispatcher; importer flash.events.IOErrorEvent; importer flash.events.MouseEvent; importer flash.events.ProgressEvent; importer flash.events.TimerEvent; importere flash.media.Sound; importere flash.media.SoundChannel; importer flash.media.ID3Info; importere flash.net.URLRequest; importere flash.utils.Timer; importer flash.text.TextField; importere flash.text.TextFieldAutoSize; importere caurina.transitions.Tweener;

Alt skal være ganske rett frem. I den siste linjen importerer vi Caurina Tweener. Sørg for at du har katalogen caurina på samme sted som din .fla-fil.

Trinn 12: Erklære variabler

Alle variabler er private. Bare klassen SimpleMP3Player kan bruke dem.

 privat var mp3File: lyd; private var mp3FilePosition: SoundChannel;

MP3File lydobjektet lagrer vår Tarzan.mp3 lyd. mp3FilePosition er et SoundChannel objekt. Vi trenger det for å fortelle oss nåværende mp3File posisjon i millisekunder. Med dette objektet kan vi også stoppe mp3-filen.

 privat var id3Data: ID3Info; privat var id3InfoAvailable = false;

Den id3Data objektet lagrer mp3 lyder id3 informasjon. For eksempel sangnavn og navn på kunstneren. id3InfoAvailable forteller vår preloader at ID3 info er tilgjengelig, slik at kode kan begynne å spille mp3File.

 privat var oppdateringstid: Timer;

updateTime er vårt tidsobjekt som oppdaterer visningstider-tekstfeltet. Du finner mer informasjon om timerklassen her. Jeg går gjennom dette senere.

 privat var playingSound: Boolean = false; privat var soundPosition: Number; private var songReachedEnd: Boolean = false;

playingSound er bare en boolsk variabel som forteller oss om mp3File spiller for øyeblikket. soundPosition lagrer en numerisk verdi når brukerne trykker på pause-knappen, slik at vi kan fortsette å spille musikk fra pauset posisjon når brukeren klikker Play-knappen. songReachedEnd indikerer at sangen er ferdig med å spille.

 / * * buttonPos [0] = playUp * buttonPos [1] = playOver * buttonPos [2] = playDown * buttonPos [3] = playDis * buttonPos [4] = pauseUp * buttonPos [5] = pauseOver * buttonPos [6] = pauseDown * buttonPos [7] = pauseDis * / private var-knappenPos: Array = new Array ('0', '-36', '-72', '-108', '-144', '-180', '- 216 ',' -252 ');

Finalyl, sist men ikke minst, vår array variabel som holder knappene movieclip y koordinater. For eksempel:

 bs.buttons.y = buttonsPos [4];

Pauseknappen vises da på skjermen. Hvis du bruker 0 inne i [parentes], vil du se Play-knappen.

Trinn 13: Masking med kode

Det er på tide å se hva vår kode gjør først når den er lastet. La oss håndtere den første funksjonen i vår kode; funksjonen SimpleMP3Player.

 offentlig funksjon SimpleMP3Player () display.mask = displayMask; display.playerTexts.x = -73;

Funksjonen SimpleMP3Player er en konstruktørfunksjon, slik at den må være offentlig. Omdøper den til privat forårsaker en feil. Funksjonsstandard er offentlig, slik at du ikke nødvendigvis må skrive "offentlig" før funksjonen.

Masking med kode er veldig enkelt og rett frem. På linje 3 ser du kode for maskeringen. Vi tildeler bare "displayMask" filmklipp til "skjerm" filmklippets maskeegenskap. Det er det.

Andre egenskap display.playerTexts.x flytter "playerTexts" movieclip langs den horisontale aksen. Vi beveger oss rett og slett uten syn å koordinere -73. Mask gjemmer "playerTexts" movieclip.

Trinn 14: Metoder, Knappmodus og BS

 bs.buttons.buttonMode = bs.buttons.enabled = false; bs.buttons.y = buttonPos [3];

"knapper" er en filmklipp og som standard når musen svinger over den, forblir markøren som en grunnpil. Innstilling av "buttonMode" -egenskapen til ekte snu markøren i en hånd når musen svinger over. I begynnelsen ønsker vi at markøren som en pil, så knappenMode er satt til false. På samme linje setter vi den "aktiverte" eiendommen til feil. Det betyr at "knappene" movieclip ikke er klikkbar. I linje 2 setter vi "Knapper" filmklippsposisjon til deaktivert avspillingsknapp.

Den første linjen kan være forvirrende, men hvis jeg skriver den som dette ...

 bs.buttons.buttonMode = false; bs.buttons.enabled = false;

... du kan sikkert se det tydeligere. Jeg sparer plass ved å skrive den i en linje.

Alt vi gjør nå er å ringe vår "loadMP3" -metode.

 loadMP3 ();

Trinn 15: loadMP3 Metode

Denne metoden er vår viktigste metode. Hva det gjør er å laste mp3-filen, erklære nødvendige EventListeners og skyv forprogrammeren som skal vises.

 mp3File = nytt lyd ();

Denne linjen oppretter et nytt lydobjekt. Vi kan få tilgang til alle lydklassemetoder og egenskaper gjennom mp3file.

 mp3File.addEventListener (ProgressEvent.PROGRESS, mp3FileLoading); mp3File.addEventListener (Event.COMPLETE, mp3FileLoaded); mp3File.addEventListener (IOErrorEvent.IO_ERROR, errorLoadingSound); mp3File.addEventListener (Event.ID3, getID3Data);

Den første linjen erklærer PROGRESS-hendelsen, og hver gang hendelsen blir påkalt, kaller den mp3FileLoading-metoden. Denne lytteren har noen egenskaper som vi trenger. Først er bytesTotal som holder hele størrelsen på mp3-filen i byte. For det andre er bytesLadet som inneholder de for øyeblikket lastede byte. Med disse to egenskapene kan vi telle prosentandelen som filen har lastet inn og vise den til brukeren.

Den andre linjen påberoper seg når hele mp3-filen har lastet inn. Det kaller mp3FileLoaded-metoden.

Den tredje linjen er for feilhåndtering. For eksempel, hvis og mp3-fil ikke er funnet, hevder denne hendelsen. Det kaller errorLoadingSound-metoden.

I linje 5 blir hendelsen påkalt når id3-data er tilgjengelig. Det kaller getID3Data-metoden.

 mp3File.load (ny URLRequest ('tarzan.mp3'));

"load" -metoden laster vår Tarzan mp3-fil. Innvendige parenteser erklærer vi en ny URLReaquest, og inne er det banen til vår mp3-fil. Vår bane er relativ og tarzan.mp3 må ligge på samme sted som .fla og .as-filene. Denne linjen er den samme som nedenfor. Bruk hvilken som helst du foretrekker.

 var req: URLRequest = ny URLRequest ('tarzan.mp3'); mp3File.load (req);

Dette er første gang vi bruker Caurina, så jeg vil raskt vise hvordan det fungerer.

 Tweener.addTween (target, properties);

Dette er basekoden. Mål er hvor du skriver navnet på målobjektet du vil tween. I egenskaper definerer du hva du vil gjøre med målet. Du kan for eksempel endre x- og y-koordinatene, gjennomsiktigheten, skalaen eller rotasjonen.

 Tweener.addTween (display.preloader, x: 96, tid: 1);

Målet vårt er "preloader" -feltet i "skjermbildet". Eiendom "x" flytter det og "tid" -egenskapen indikerer tiden som tweenen tar. Tiden måles i sekunder. Hvis du vil ha millisekunder, bruk ".5" notasjon.

Trinn 16: mp3FileLoading hendelse metode

 privat funksjon mp3FileLoading (e: ProgressEvent): void var currentPercent: Number = Math.round (e.bytesLoaded / e.bytesTotal * 100); display.preloader.text = 'LOADING ...' + currentPercent + '%'; hvis (currentPercent> 50 && id3InfoAvailable) Tweener.addTween (display.preloader, x: 200, tid: 1, onComplete: playMP3, onCompleteParams: [false, 0]); mp3File.removeEventListener (ProgressEvent.PROGRESS, mp3FileLoading); 

Som nevnt tidligere viser "mp3FileLoading" -metoden en prosentverdi av hvor mye mp3-filen er lastet inn. Det starter også sangen når prosentandelen stiger høyere enn 50%.

currentPercent er for å telle prosentverdien. Vi runder det opp med "Math.round" metoden. Linje 4 skriver prosentandelen til tekstfeltet slik at brukeren kan se hva som skjer med lasting.

Innenfor "if" -oppgaven sjekker vi om prosentandelen er over 50 og variabelen "id3InfoAvailable" er sann. Hvis begge returnerer sant, utfører "if"-setningen alt inne i parentesene.

Når if-setningen er sant, tverr vi mellom "forhåndslaster" tekstfelt bort. Når turen er fullført, kaller Caurina "playMP3" -metoden og sender to egenskaper til den. Vi ser "playMP3" -metoden i neste trinn.

PROGRESS-hendelsen er ikke lenger nødvendig, så vi fjerner den på linje 9.

Trinn 17: mp3FileLoaded hendelsesmetode

 privat funksjon mp3FileLoaded (e: Event): void mp3File.removeEventListener (Event.COMPLETE, mp3FileLoaded); mp3ile.removeEventListener (ProgressEvent.PROGRESS, updateBufferField); Tweener.addTween (display.playerTexts.buffer, x: 200, tid: 1); 

Denne metoden er påkalt når hele sangen er lastet. Først fjerner vi unødvendige EventListeners. I linje 5 er vi mellom tekstfeltet "buffer" til høyre.

Trinn 18: ErrorLoadingSound Hendelsesmetode

 privatfunksjon errorLoadingSound (e: IOErrorEvent): void trace ('Feil ved lasting av lyd:' + e); 

Denne feilhåndteringen er veldig grunnleggende. Det sporer bare feil hvis feil oppstår.

Trinn 19: getID3Data hendelsesmetode

 privat funksjon getID3Data (e: Event): void id3InfoAvailable = true; id3Data = mp3File.id3; 

Vi stiller "id3InfoAvailable" til sant i linje 3. "mp3FileLoading" -metoden sjekker denne variabelen hver gang og starter lyden bare hvis den er sant. På denne måten sikrer vi at ID3-info er tilgjengelig, slik at brukeren ser ekte info på skjermen.

I linje 4 tilordner vi mp3File id3 metadata til ID3Info objekt kalt id3Data som vi opprettet i Trinn 12.

Trinn 20: playMP3 Metode

Denne metoden er den mer vitale metoden i spilleren vår. La oss se på den første blokken.

 privat funksjon playMP3 (useSp: Boolean, sp: Number): void if (useSp) mp3FilePosition = mp3File.play (sp); ellers mp3FilePosition = mp3File.play ();

"PlayMP3" -metoden krever to egenskaper. "useSp" indikerer "bruk lydposisjon" og "sp" er "lydposisjon".

I linje 3 tester vi om "useSp" er sant. I så fall spiller koden vår sang fra startpunktet. Dette punktet er bestått i "sp" -egenskapen. Hvis det er feil, begynner vi å spille sangen fra begynnelsen. Alt dette er relatert til spillpause-knappen.

 playingSound = true; mp3FilePosition.addEventListener (Event.SOUND_COMPLETE, songFinished); mp3File.addEventListener (ProgressEvent.PROGRESS, updateBufferField);

Linje 1 setter playSound til ekte. Nå kan vi sjekke om lyden spiller og gjør det som er nødvendig.

Ny EventListener i linje 2 brenner opp hver gang sangen avsluttes. "SongFinished" -metoden utføres. Legg merke til at vi legger EventListener til mp3FilePosition-objektet.

Andre nye EventListener i linje 3 legger til samme "PROGRESS" -hendelse til mp3File som i starten av koden. Denne lytteren brenner bare opp en annen metode. "UpdateBuffer" -metoden er for å oppdatere tekstfeltet "buffer".

 bs.buttons.buttonMode = bs.buttons.enabled = true; bs.buttons.y = buttonPos [0];

Den første linjen finner du allerede kjent. Vår mp3-fil spiller, slik at vi kan oppdatere knapper for å vise den aktuelle tilstanden, aktivere "buttonMode" og "enabled" egenskaper.

Vi bruker "Timer" for å vise gjeldende lydposisjon i sekunder. Med "Timer" kan du utføre metoder i tidssekvenser.

 updateTime = ny timer (100); updateTime.addEventListener (TimerEvent.TIMER, getMP3Time); updateTime.start ();

Her oppretter den første linjen et nytt "Timer" -objekt med 100 millisekunder mellomrom. Du lurer kanskje på hvorfor vi vil oppdatere den nåværende tiden hver 100 millisekser ... 1 sekund er for sakte for spilleren vår og selv 0,5 sekunder er for sakte. Jeg vil at den skal oppdatere tiden veldig jevnt. Mer om Timer-klasse.

Vi trenger også en EventListener å faktisk gjøre noe hver 100 millisekunder. "TIMER" -hendelse utfører "getMP3Time" -metoden som jeg vil gå gjennom i neste trinn.

Linje 4 starter vår "Timer".

 var si: String = id3Data.artist + '-' + id3Data.songName; si = si.toUpperCase (); display.playerTexts.songInfo.autoSize = TextFieldAutoSize.LEFT; display.playerTexts.songInfo.wordWrap = false; display.playerTexts.songInfo.text = si; Tweener.addTween (display.playerTexts, x: 60, tid: 1);

I den siste blokken viser vi id3-metadata til brukeren. Artistnavn og sangnavn blir presset til en ny variabel i første linje. Dette er fordi jeg vil kapitalisere hele strengen i neste linje. Vi bruker bitmap-fonten, så jeg tror det bare ser bedre ut i store versjoner.

I linje 3 sikrer vi at tekstfeltet "songInfo" er langt nok til å vise "si" -strengen. Linje 4 er å unngå ordet innpakning i tekstfeltet og i linje 5 tildeler vi bare "si" -strengen til deg "songInfo" tekstfelt.

Den siste linjen skyver "playerTexts" movieclip til "vise".

Trinn 21: UpdateBufferField Metode

Det er høflig å vise brukeren hvor mye mp3-fildataene er lastet inn. Vi har vår preloader, men jeg trodde vi ville også trenge et bufferfelt fordi vår sang begynner å spille etter at 50% er lastet. Denne metoden fortsetter der hvor "mp3FileLoading" -metoden slått av.

 privat funksjon updateBufferField (e: ProgressEvent): void var currentPercent: Number = Math.round (e.bytesLoaded / e.bytesTotal * 100); display.playerTexts.buffer.text = currentPercent + '%'; 

Det er ikke noe spesielt her, bare en privat funksjon med to handlingslinjer. Grunnprosent teller og tilordne den til "buffer" tekstfeltet.

Trinn 22: GetMP3Time Event Method

Jeg viser denne metoden alt på en gang fordi dette er bare matte og virkelig grunnleggende koding. La oss gå gjennom det uansett.

 privat funksjon getMP3Time (e: TimerEvent): void var totalMinutes = Math.floor (mp3File.length / 1000/60); var totalSeconds = Math.floor (mp3File.length / 1000)% 60; var currentMinutes = Math.floor (mp3FilePosition.position / 1000/60); var currentSeconds = Math.floor (mp3FilePosition.position / 1000)% 60; hvis (totalSekunder < 10) totalSeconds = '0' + totalSeconds; if (currentSeconds < 10) currentSeconds = '0' + currentSeconds; display.playerTexts.times.text = currentMinutes + ':' + currentSeconds + '/' + totalMinutes + ':' + totalSeconds; 

I de første 4 linjene teller vi tider som vi trenger. Dette er litt vanskelig fordi alle returverdier er i millisekunder. Vi runder også minutter og sekunder ned.

Linje 8 og 9 er for å legge til en ekstra null før sekunder hvis disse verdiene er under 10 (dette er bare justering og ikke nødvendig). For meg ser tekstfeltet så litt renere ut.

Den siste linjen viser hele tiden til brukeren.

Trinn 23: SongFinished Event Method

La oss fortsette med den helt grunnleggende koden.

 privat funksjon songFinished (e: Event): void mp3FilePosition.removeEventListener (Event.SOUND_COMPLETE, songFinished); updateTime.removeEventListener (TimerEvent.TIMER, getMP3Time); bs.buttons.y = buttonPos [3]; mp3FilePosition.stop (); playingSound = false; songReachedEnd = true; soundPosition = 0; display.playerTexts.times.text = 'PLAY AGAIN?'; 

Event-metoden "songFinished" lanseres hver gang sangen avsluttes.

I de to første linjene fjerner vi unødvendige EventListeners. Deretter viser vi den deaktiverte avspillingsknappen til brukeren og stopper mp3-filen. Stopp er ikke nødvendig, men vi gjør det bare i tilfelle.

"playingSound" er satt til false og "songReachedEnd" til true. I det ytterste trinnet ser du hvorfor vi trenger varianten "songReachedEnd".

"soundPosition" er tilgjengelig fra hvor som helst i vår klasse, så det må settes til 0 på dette punktet. Nå sikrer vi at hvis brukeren ønsker å spille deg sang igjen, starter den fra begynnelsen.

Den siste linjen angir "ganger" -feltet for å vise "PLAY AGAIN?" tekst. Våre brukere er kongene, derfor må vi gi all mulig informasjon til dem.

Trinn 24: mouseOverBs og mouseOutBs Event Methods

 privat funksjon mouseOverBs (e: MouseEvent): void if (playingSound) bs.buttons.y = buttonPos [5]; ellers bs.buttons.y = buttonPos [1]; hvis (songReachedEnd &&! playingSound) bs.buttons.y = buttonPos [1]; 

Her blir "mouseOverBs" -metoden skutt hver gang musen går over "bs" filmklippet.

Først vurderer disse hendelsesmetodene om "playSound" er sant, og hvis "knappene" filmklippet er i "pause over" -tilstanden. Ellers viser den "spill over" -tilstanden. Vår siste linje kontrollerer om lyden er ferdig med å spille, og den venter hvis brukeren vil spille av sangen igjen.

 privat funksjon mouseOutBs (e: MouseEvent): void if (playingSound) bs.buttons.y = buttonPos [0]; ellers bs.buttons.y = buttonPos [4]; hvis (songReachedEnd &&! playingSound) bs.buttons.y = buttonPos [3]; 

Denne andre metoden er for når musen går over "bs" movieclip.

Dette ligner på metoden før.

Trinn 25: MouseClickBs Event Method

Denne hendelsesmetoden er hjertet av vår "bs" filmklipps klikkfunksjon.

 hvis (playingSound) bs.buttons.y = buttonPos [4]; soundPosition = mp3FilePosition.position; updateTime.stop (); mp3FilePosition.stop (); playingSound = false; display.playerTexts.times.text = 'PAUSE';

Når du klikker på knappen, kontrollerer den først om lyden spiller. Hvis det er tilfelle, flyttes det til "knappene" filmklipp, lagrer gjeldende lydposisjon (hvor vi kan fortsette å spille fra hvis vi vil), stopper vår "Timer", stopper sangen vår, setter "playSound" til falsk og oppdatert "ganger" tekstfelt Tekst til "PAUSE". Denne koden er vår pause-knapp.

 ellers hvis (! playingSound) bs.buttons.y = buttonPos [2]; playMP3 (sant, lydposisjon); playingSound = true; 

Denne kodeblokken starter vår sang fra pause-staten. Det kontrollerer at sangen vår ikke spiller og starter sangen fra lagret "soundPosition".

 ellers hvis (songReachedEnd) songReachedEnd = false; playMP3 (false, 0); 

Den siste blokken kontrollerer at hvis sangen er ferdig med å spille og brukeren vil spille av sang igjen, starter den sangen fra begynnelsen.

Konklusjon

SimpleMP3Player er nå fullført ... (så vidt jeg er opptatt av). Nå er det din tur å legge til noen funksjoner til den. Kanskje du vil legge til en stoppeknapp eller kanskje gi den spillelistefunksjoner med XML. Lag "songInfo" -feltet rullbar, slik at lengre data blir vist helt. Mulighetene er endeløse!

Ikke glem å sjekke kildekoden i kildepakken. Jeg har kommentert koden fra begynnelse til slutt slik at du kan lære denne tuten på den måten også. Takk for at du leste!