Generering Digital Audio Bruke SiON

Generating Digital Audio Bruke Sion
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 vise deg hvordan du kommer i gang med Sion, en AS3 software synthesizer bibliotek som genererer lyd med bare kode.




Endelig resultat Forhåndsvisning

Til slutt dette er hva vi skal oppnå:

Klikk på mørkere rektangel område å starte /stoppe baller bevegelsen.



Får nødvendige filene

Først må du få Sion biblioteket. Du kan laste det enten som en SWC-fil eller som ukomprimerte Actionscript-filer. For å gjøre dette gå til Sion nedlastinger og velg ønsket nedlastingsmetode.

Etter at du har lastet ned kildekoden legge det til global klassebanen.

Legg merke til at på denne siden kan du også laste ned ASDoc dokumentasjon og eldre versjoner av biblioteket.

I denne opplæringen vil vi gjøre bruk av den velkjente minimalcomps bibliotek, utviklet av Keith Peters; hvis du ikke har det gå videre og ta tak i det. minimalcomps

legge Også minimalcomps biblioteket til global klassebanen og la oss komme i gang

Merk:. Som alltid vil jeg være bruker FlashDevelop hele denne opplæringen. Du kan bruke hva kode editor du liker selv om jeg anbefale stikker med FlashDevelop



Trinn 1:.? Hva er Sion

Sion bibliotek
er en software synthesizer bibliotek
bygget i Actionscript 3.0 og arbeider i Flash Player 10 eller høyere.

Med Sion kan du generere dynamiske lyder på rømmen uten behov for lasting noen lydfiler. Også gjør det svært enkelt å synkronisere lyden med visningsobjekter

Fra mangfold av funksjoner den har jeg skal vise deg de vesentlige av å jobbe med det (f.eks objekt treffer en vegg, eksplosjon osv.). Hjelp < em> MML plakater (Music Macro Language) data for å generere lyd, ved hjelp av taleforhåndsinnstillinger og effektbokser på å spille lyder, sette tempoet (BPM), panorering og endre volum og til slutt skal jeg vise deg hvordan du synkroniserer lyder med visningsobjekter .



Trinn 2: Sette opp prosjektet

La oss begynne med å lage et nytt prosjekt. Åpne din kode editor og lage en ny Actionscript 3-prosjektet.

Jeg har kalt prosjektet mitt Sion Tutorial
. Etter denne åpne dokumentet klasse (i mitt tilfelle Main)

Du bør ha noe som ligner på dette:.
Pakke {import flash.display.Sprite; [SWF (width = 550, height = 300, bakgrunnsfarge = 0x1f1f1f, framerate = 30)] public class Hoved strekker Sprite {offentlig funksjon main (): void {}}}

I FlashDevelop ville du sannsynligvis ha en init () metode som kalles når filmen er lagt til scenen. Gå videre og endre koden slik at den samsvarer med den ene over

La denne filen åpnet og til neste trinn



Trinn 3:.. Grunnleggende bruk

å begynne å bruke Sion og høre lyden vi bare må lage ett objekt: SiONDriver. Denne klassen gir føreren av Sion digitale signalprosessor emulator og gjennom denne klassen alle grunnleggende operasjoner er gitt som egenskaper (bpm, volum), metoder (pause (), spille (), stop (), fadeIn () og hendelser (bmp endringer , stream start og stopp)

Merk:. Bare én forekomst av Sion driver klassen kan lages til enhver tid prøve å skape flere forekomster vil gjøre kompilatoren kaste en feil å få det eksisterende forekomst av.. den SiONDrive klassen du kan bruke SiONDriver.mutex statiske egenskapen.

I dokumentet (Main) klasse legge til en ny privat variabel kalt _driver og instantiate det i konstruktøren.
pakke {import flash.display. Sprite, import org.si.sion.SiONDriver [SWF (width = 550, height = 300, bakgrunnsfarge = 0x1f1f1f, framerate = 30)] public class Hoved strekker Sprite {private Var _driver: SiONDriver; offentlig funksjon main (): void {_driver = new SiONDriver ();}}}

For å spille av en lyd du trenger å påkalle play () metoden i SiONDriver objektet og passere som et argument en SiONData objekt eller en MML streng. For vårt eksempel vil vi bruke en MML streng (som SiONData objektet er faktisk en kompilert MML streng i sin essens)
_driver.play ('l8 cdefgab & lt; c');.

Legg til denne linjen av kode i klassen og kjøre prosjektet ( Ctrl + Enter
hvis du bruker FlashDevelop). Du skal nå høre tonene (åtte notater) fra C5 (eller
i oktav fem) til C6 (eller Gjør
i oktav seks). Men hva betyr L8 cdefgab < c faktisk bety



Trinn 4: Musikk Macro Språk

Legge beholderen

Nå som alt er satt opp la oss gjøre bruk av denne beholderen. Åpne hovedklassen og legge til en ny privat variabel kalt _ballCont av type BallContainer.

Vi vil gjøre bruk av en annen metode (beleilig heter addBallContainer ()) for å legge beholderen til scenen
privat funksjon addBallContainer (). void {_ballCont = new BallContainer (); addChild (_ballCont); _ballCont.x = 170; _ballCont.y = 80;}

Og også kaller denne metoden fra konstruktøren
offentlig funksjon main (): void {_driver = new SiONDriver ();. _s1 = _driver.compile ('l8 cdefgab < c'); _s2 = _driver.compile ('l8 o6co5bagfedc'); _driver.play (); addSoundButtons (); addSelector (); addDrums (); addDrumsVolume (); addBPMKnob (); addVolumeKnob (); addPanControl (); addBallContainer ();}

Kjør koden og se hvordan det fungerer. Når en ball treffer en vegg og endrer retning et notat skal spilles



Trinn 24:. Final Touch

Nå bare som en siste touch til vi skal legge noe av funksjonaliteten til ball container slik at vi kan starte og stoppe det.
pakke {import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import org.si.sion.SiONDriver; import org.si.sion.utils.Scale; import org.si.sion.utils.SiONPresetVoice; public class BallContainer strekker Sprite {private Var _balls: Array; private Var _on: Boolean; private Var _voices: SiONPresetVoice; private Var _driver: SiONDriver; offentlig funksjon BallContainer () {_voices = new SiONPresetVoice (); _driver = SiONDriver.mutex? SiONDriver.mutex: ny SiONDriver (); _driver.play (); tegne(); addBalls (); addEventListener (MouseEvent.CLICK, onClick); } Private funksjon onClick (e: MouseEvent): void {if (_on) stop (); annet start (); } Private funksjon onEnterFrame (e: Hendelses): void {var b: Ball; for (var i: int = 0; i < _balls.length; i ++) {b = _balls [i]; b.x + = b.vx; b.y + = b.vy; b.vx = b.x > = 310 || b.x < = 0? -b.vx: b.vx; b.vy = b.y > = 160 || b.y < = 0? -b.vy: b.vy; if (bx > = 310 || bx < = 0 || av > = 160 || av < = 0). _driver.noteOn (Scale (ny Scale ("Amp")) getNote (i), _voices ["midi.chrom6"], 1); }} Privat funksjon draw (): void {graphics.beginFill (0, 0,3); graphics.lineStyle (1, 0, 0,6); graphics.drawRect (0, 0, 320, 170); graphics.endFill (); } Private funksjon addBalls (): void {_balls = []; for (var i: int = 0; i < 5; i ++) {var b: Ball = new Ball (); addChild (b); _balls.push (b); b.x = Math.random () * 310; b.y = Math.random () * 160; }} Offentlig funksjon start (): void {var b: Ball; for (var i: int = 0; i < _balls.length; i ++) {b = _balls [i]; b.vx = (Math.random () * 10) - 5; b.vy = (Math.random () * 10) - 5; } _on = True; addEventListener (Event.ENTER_FRAME, onEnterFrame); } Offentlig funksjon stop (): void {_on = false; removeEventListener (Event.ENTER_FRAME, onEnterFrame); }}}

Som du kan se jeg har uthevet tilleggene i BallContainer klassen.

Som en kort forklaring har jeg først lagt en boolsk variabel _on som holder orden hvis filmen spilles (ballene er i bevegelse) eller ikke. I konstruktøren har jeg forandret linjen som legger en hendelse lytteren for ENTER_FRAME hendelse med en for MOUSE_CLICK hendelser. Også MouseEvent behandleren heter onClick () brukes til å starte eller stoppe filmen når den klikkes.

Til slutt i starten () og stop () metoder ENTER_FRAME arrangementet lytteren er lagt til og henholdsvis fjernet. Også i starten () metoden vi null hastighetene på hver ball.



Konklusjon

Sion
bibliotek er svært nyttig når du trenger å bruke mye av lyd (i spill oftest), men du kan ikke råd til ekstra størrelsen på SWF eller tid å laste dem. Som du kan se er det ikke så vanskelig i det hele tatt å skape interessante lyder på rømmen.

Du kan se mange eksempler på kule implementeringer av biblioteket på wonderfl.net. Også disse eksemplene er nyttig å lære mer om andre funksjoner i Sion.

Jeg håper du likte denne opplæringen, og takk for at du leser det. Anmeldelser