root/as3/sazameki/branches/fp10/src/samples/SamplerSample.as

リビジョン 1529, 4.3 kB (コミッタ: zk33, コミット時期: 4 年 前)

最新の書き方に合わせてサンプルをアップデート

Line 
1 package samples
2 {
3         import flash.display.DisplayObject;
4         import flash.display.Sprite;
5         import flash.display.StageAlign;
6         import flash.display.StageScaleMode;
7         import flash.events.Event;
8         import flash.events.SampleDataEvent;
9         import flash.media.Sound;
10         import flash.sampler.Sample;
11         import flash.utils.ByteArray;
12         import org.sazameki.audio.core.AudioSamples;
13         import org.sazameki.audio.core.AudioSetting;
14         import org.sazameki.audio.ctrlEvent.events.NoteOff;
15         import org.sazameki.audio.ctrlEvent.events.NoteOn;
16         import org.sazameki.audio.engine.MultiSamplePlayer.Instrument;
17         import org.sazameki.audio.engine.MultiSamplePlayer.MultiSamplePlayer;
18         import org.sazameki.audio.engine.MultiSamplePlayer.NoteRange;
19         import org.sazameki.audio.engine.MultiSamplePlayer.ProcessData;
20         import org.sazameki.audio.format.wav.Wav;
21         import org.sazameki.events.NoteEvent;
22         import org.sazameki.ui.KeyboardKeyboard;
23        
24         /**
25         * ...
26         * @author Takaaki Yamazaki(zk design)
27         */
28         public class SamplerSample extends Sprite
29         {
30                 [Embed(source = "asset/bass_c2_9836_10510.wav", mimeType = "application/octet-stream")]
31                 public const Bass:Class;
32
33                 [Embed(source = "asset/Clap.wav", mimeType = "application/octet-stream")]
34                 public const Clap:Class;
35                 [Embed(source = "asset/Hat.wav", mimeType = "application/octet-stream")]
36                 public const Hat:Class;
37                 [Embed(source = "asset/Kick.wav", mimeType = "application/octet-stream")]
38                 public const Kick:Class;
39                 [Embed(source = "asset/Snare.wav", mimeType = "application/octet-stream")]
40                 public const Snare:Class;
41
42                 [Embed(source = "asset/synth.png")]
43                 public const Img:Class;
44                
45                 private var sampler:MultiSamplePlayer;
46                 private var sound:Sound;
47                 private var procData:ProcessData;
48                 public function SamplerSample()
49                 {
50                         stage.scaleMode = StageScaleMode.NO_SCALE;
51                        
52                         var img:DisplayObject = new Img();
53                         addChild(img);
54                        
55                         var keyboard:KeyboardKeyboard = new KeyboardKeyboard(stage,1);
56                         keyboard.addEventListener(NoteEvent.NOTE_ON, onNoteOn);
57                         keyboard.addEventListener(NoteEvent.NOTE_OFF, onNoteOff);
58                        
59                         var decoder:Wav = new Wav();
60
61                         var bassSamples:AudioSamples = decoder.decode(new Bass() as ByteArray);
62                         var bassInst:Instrument = new Instrument(bassSamples, 9836, 10509, 24);
63                        
64                         var clapSamples:AudioSamples = decoder.decode(new Clap() as ByteArray);
65                         var clapInst:Instrument = new Instrument(clapSamples);
66                        
67                         var hatSamples:AudioSamples = decoder.decode(new Hat() as ByteArray);
68                         var hatInst:Instrument = new Instrument(hatSamples);
69                        
70                         var kickSamples:AudioSamples = decoder.decode(new Kick() as ByteArray);
71                         var kickInst:Instrument = new Instrument(kickSamples);
72                        
73                         var snareSamples:AudioSamples = decoder.decode(new Snare() as ByteArray);
74                         var snareInst:Instrument = new Instrument(snareSamples);
75                        
76                         sampler = new MultiSamplePlayer();
77                         sampler.addInstrument(bassInst, new NoteRange(24));
78                         sampler.addInstrument(kickInst, new NoteRange(0, 13));
79                         sampler.addInstrument(hatInst, new NoteRange(18, 23));
80                         sampler.addInstrument(clapInst, new NoteRange(14, 15));
81                         sampler.addInstrument(snareInst, new NoteRange(16, 17));
82                         //prepare processData(sample buffer & event list)
83                         procData = new ProcessData(2048);
84                        
85                         //prepare sound
86                         sound = new Sound();
87                         sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSamplesCallback);
88                         sound.play();
89                 }               
90                 private function onNoteOn(e:NoteEvent):void
91                 {
92                         procData.events.addEvent(new NoteOn(e.note), 0);
93                 }
94                 private function onNoteOff(e:NoteEvent):void
95                 {
96                         procData.events.addEvent(new NoteOff(e.note), 0);
97                 }
98                 private function onSamplesCallback(e:SampleDataEvent):void
99                 {
100
101                        
102                         var left:Vector.<Number>;
103                         var right:Vector.<Number>;
104                        
105                         var audios:AudioSamples = procData.samples;
106                        
107                         var len:int = procData.length;
108                
109                         var i:int = 0;
110                         var sig:Number;
111                        
112                         sampler.process(procData);
113                        
114                         if (audios.setting.channels == 2)
115                         {
116                                 left = audios.left;
117                                 right = audios.right;
118                                 for (; i < len; ++i)
119                                 {
120                                         e.data.writeFloat(left[i]);
121                                         e.data.writeFloat(right[i]);
122                                
123                                 }
124                         }else
125                         {
126                                 left = audios.left;
127                                 for (; i < len; ++i)
128                                 {
129                                         sig = left[i];
130                                         e.data.writeFloat(sig);
131                                         e.data.writeFloat(sig);
132                                 }
133                                
134                         }
135                 }
136                
137         }
138        
139 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。