Render en Funky Sound Visualizer med Away3D
Del
Del
Del
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I denne opplæringen vil jeg lede deg gjennom å bygge en 3D beregne spektrum. Vi vil bruke Away3D for 3D-motor og gjøre bruk av en prøve sang fra Envato ressursbiblioteket
Trinn 1:. La oss begynne
Opprett ny ActionScript3 fil
Trinn 2:. Rediger profil
i Egenskaper-panelet trykke på knappen Rediger
Trinn 3:. Velg Flash Player versjon
Velg Flash Player 9-profil og klikk på OK
Trinn 4:.! Få Away3D Engine
Lagre filen som "Compute Spectrum.fla" i Compute Spectrum mappen. Nå må du laste ned Away3D motoren Away3D nedlastinger. Vi bruker versjon 2.3.3 for Flash Player 9. Pakk et arkiv og kopiere alle mapper til Compute Spectrum mappen
Trinn 5:.! Få Song
Animasjonen vi vil forberede beveger seg i henhold til stemmen. Så vi må velge vår sang riktig. Publikum må føle; "Woow dette beveger seg innenfor lyd". Hvis du laster ned kildefilen, vil du se song.mp3. Kopiere den til Compute Spectrum mappen. Mappen skal nå se slik ut:
Trinn 6: Starte Coding
OK, vi er klare til å starte koding. Vi vil fylle de første linjene ved å importere våre klasser: Når du har importert våre klasser definerer vi våre variabler for å bruke under de kommende trinnene De første er for Away3D. bars_up Nå må vi bygge Away3D Den første linjen i vår funksjon skaper vår 3D-scene. Vi legg deretter til 3D-objekter inn i den. For kameraet velger vi HoverCamera3D som jeg synes det er den beste måten å slå på kameraet rundt objekter. Du faktisk ikke trenger å bruke lys for dette prosjektet, men det gjør animasjon som litt bedre :) Endelig legger vi visningen og sette den i midten av scenen Som du ser, det er 2 funksjoner for å skape barer. Den første er for viktigste barer og den andre er for reflekterte barer. Den andre reduserer ytterligere alfaverdien av barene. Først vil vi lage en kube. Vi velger ShadingColorMaterial, fordi vi bruker lys og solide farger. Funksjonene har 2 parametre: den første dikterer fargen på baren og den andre er sin x posisjon Vi vil også legge blendMode til kuber, bare fordi det gjør dem ser kul.. Etter disse legger vi en kube til sitt utvalg og til scenen Her skaper vi 3 viktigste barer og tre reflektert barer. Som du kan se, deres farger og posisjoner er de samme. Vi setter sine posisjoner som i figuren nedenfor: Dette er den vanskelige delen. I gjengi funksjonen første vi gjengi 3D. Deretter bruker vi SoundMixer å få sunne verdier (computeSpectrum er metoden for dette). Vi utjevne soundforces 'første 3 elementer til 0, effektivt tilbakestille lyden verdier. Etter det kommer en for loop. lave verdier: songforces [0] middelverdier: songforces [1] høye verdier: songforces [2] Etter at vi får sangen verdiene vi skalere våre barer. Vi bruker 2 funksjoner for dette. Den første er for de viktigste barer og den andre er for refleksjoner. Disse funksjonene har 2 parametre; den første er bar å bli skalert og den andre er målet høyden verdien av baren. Vi deretter utjevne posisjonen til vår lys til posisjonen av kameraet. Dette gjør vårt lys dynamisk og vår animasjon mer effektive. Vi bruker ekte andel i regnestykket til å endre kameraposisjoner i forhold til mouseX og Mousey Vi bruker en enkel teknikk for animasjon, viser dette diagrammet et eksempel: OK, vi skalere våre barer. Men vi må endre y verdien av dem også. Dette diagrammet viser hvorfor vi trenger å endre dem: I den første funksjonen, er y-verdien av barene positiv og i den andre funksjonen er det negative. . Viktigste barer gli opp, reflektert barer gli ned I disse funksjonene vi begynner å kjøre gjengi funksjon og laste vår "song.mp3" fil. Deretter kaller vi alle våre funksjoner en etter en. Nå kan du teste filmen og se barene hoppe :) I denne leksjonen vi lærte å bruke refleksjon i Away3D og hvordan du får lyddata. Nøkkelen til disse typer effekter er sangen: du trenger for å velge den best mulige sang å gjøre animasjonen virkelig fungerer. Prøv det med dine egne MP3-spor :) Jeg håper du likte denne opplæringen, takk for lesing!
import away3d.cameras *; import away3d.containers *; import away3d.materials *; import away3d.primitives * import away3d.lights.DirectionalLight3D
Var scene: Scene3D; Var kamera. HoverCamera3D; Var vis: View3D, Div lys: DirectionalLight3D; Var bars_up: Array = new Array (); Var bars_down: Array = new Array () Var Soundbyte: ByteArray = new ByteArray (); Var soundforces: Array = new Array () Var scaleoffset_low: Number = 15; Var scaleoffset_mid: Number = 150; Var scaleoffset_hig: Antall = 150; Var i: int; Var t: nummer,
rekke holder våre viktigste barer. bars_down
er for de reflekterte barer. soundforces Hotell og Soundbyte
er for beregne spektrum. Til slutt, scaleoffsets
er for skalering barer.
Trinn 8: Oppsett Away3D
fungere initAway3D (). void {scene = new Scene3D (); Kameraet = new HoverCamera3D (); camera.distance = 300 lys = ny DirectionalLight3D ({color: 0xFFFFFF, ambient: 0,25, diffuse: 0,75, blank: 0,9}) scene.addChild (lys) view = ny View3D ({scene: scene, kamera: Kameraet}); view.x = stage.stageWidth /2; view.y = stage.stageHeight /2; addChild (vis);}
Trinn 9:. Opprette Enkelt Bar &funksjon createBarUp (farge: Antall, x: Number): void {var bar: Cube = ny Cube ({width: 30, høyde: 50, dybde: 30}) bar.material = new ShadingColorMaterial (farge, { alfa: 0,5}) bar.x = x //bar.blendMode = BlendMode.ADD bars_up.push (bar) scene.addChild (bar)} funksjon createBarDown (farge: Antall, x: Number): void {var bar: Cube = ny Cube ({width: 30, høyde: 50, dybde: 30}) bar.material = new ShadingColorMaterial (farge, {alfa: 0,1}) bar.x = x //bar.blendMode = BlendMode.ADD bars_down.push (bar) scene.addChild (bar)}
Trinn 10:. Opprette Alle Barer
funksjons createBars (): void {createBarUp (0x00CCFF, 0) createBarUp (0xFF3300, -45) createBarUp (0xF9C806, + 45) createBarDown (0x00CCFF, 0) createBarDown (0xFF3300, -45) createBarDown (0xF9C806, + 45)}
Trinn 11: Rende
funksjon render (e: Hendelses): void {view.render (); SoundMixer.computeSpectrum (Soundbyte, true); soundforces [0] = 0 soundforces [1] = 0 soundforces [2] = 0 for (i = 0; i < 300; i + = 2) {t = soundbyte.readFloat (); if (i > = 0 & & i < 100) {soundforces [0] + = t * scaleoffset_low; } If (i > = 100 & & i < 200) {soundforces [1] + = t * scaleoffset_mid; } If (i > = 200 & & i < 300) {soundforces [2] + = t * scaleoffset_hig; }} ScaleBarUp (bars_up [0], soundforces [0]) scaleBarUp (bars_up [1], soundforces [1]) scaleBarUp (bars_up [2], soundforces [2]) scaleBarDown (bars_down [0], soundforces [0]) scaleBarDown (bars_down [1], soundforces [1]) scaleBarDown (bars_down [2], soundforces [2]) light.x = camera.x light.y = camera.y light.z = camera.z camera.targetpanangle = scenen .mouseX /stage.stageWidth * 360 camera.targettiltangle = stage.mouseY /stage.stageHeight * 30 camera.hover ();}
Trinn 12:. Scaling Barer
funksjon scaleBarUp (bar: Cube, høyde: Number): void {bar.height + = (høyde - bar.height) * 0,3 bar.y + = (høyde * 0,5 - bar.y) * 0,3} funksjon scaleBarDown (bar: Cube, høyde: Number): void {bar.height + = (høyde - bar.height) * 0,3 bar.y + = (-Høyde * 0,5 - bar.y) * 0,3}
Trinn 13: siste trinnene
funksjon startToRender (): void {addEventListener (Event.ENTER_FRAME, render); } Funksjon startToPlay (): void {var lyd: Sound = new Sound (); sound.load (ny URLRequest ( "song.mp3")); sound.play ();} initAway3D (); createBars (); startToRender (); startToPlay ();
Konklusjon