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

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

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

Line 
1 package samples
2 {
3         import flash.display.DisplayObject;
4         import flash.display.Sprite;
5         import flash.display.StageScaleMode;
6         import flash.events.Event;
7         import flash.events.MouseEvent;
8         import flash.events.SampleDataEvent;
9         import flash.media.Sound;
10         import flash.utils.ByteArray;
11         import org.sazameki.audio.core.AudioSamples;
12         import org.sazameki.audio.engine.waveSlicer.algorithm.ISlicerAlgorithm;
13         import org.sazameki.audio.engine.waveSlicer.algorithm.NoteSlice;
14         import org.sazameki.audio.engine.waveSlicer.algorithm.RandomBeatSlice;
15         import org.sazameki.audio.engine.waveSlicer.algorithm.RandomSlice;
16         import org.sazameki.audio.engine.waveSlicer.Region;
17         import org.sazameki.audio.engine.waveSlicer.WaveSlicer;
18         import org.sazameki.audio.format.wav.Wav;
19        
20         /**
21         * ...
22         * @author Takaaki Yamazaki(zk design)
23         */
24         public class SlicerSample extends Sprite
25         {
26                 /*
27                 [Embed(source = "asset/Complete Beats 83-11.wav", mimeType = "application/octet-stream")]
28                 public const WavSmpl:Class;
29                 //*/
30                 /*
31                 [Embed(source = "asset/key.wav", mimeType = "application/octet-stream")]
32                 public const WavSmpl:Class;
33                 //*/
34                 //*
35                 [Embed(source = "asset/gt.wav", mimeType = "application/octet-stream")]
36                 public const WavSmpl:Class;
37                 //*/
38                 [Embed(source = "asset/slicer.png")]
39                 public const Img:Class;
40                
41                 private var idx:int = 0;
42                 private var smplIdx:int = 0;
43                 private var regions:Vector.<Region>;
44                 private var currentRegion:Region;
45                 private var bufferLength:int = 2048;
46                 private var sound:Sound;
47                 private var randomize:Number = 0.3;
48                
49                 public function SlicerSample()
50                 {
51                         stage.scaleMode = StageScaleMode.NO_SCALE;
52                         var img:DisplayObject = new Img();
53                         addChild(img);
54                         var ba:ByteArray = new WavSmpl();
55                        
56                         var wavfmt:Wav = new Wav();
57                         var smpls:AudioSamples = wavfmt.decode(ba);
58                        
59                         //var algo:ISlicerAlgorithm=new RandomSlice()
60                         var algo:ISlicerAlgorithm = new RandomBeatSlice();
61                         //var algo:ISlicerAlgorithm = new NoteSlice();
62                         var slicer:WaveSlicer = new WaveSlicer(algo);
63                         regions=slicer.slice(smpls);
64
65                         stage.addEventListener(MouseEvent.CLICK, onClick);
66                        
67                         sound = new Sound();
68                         sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSamplesCallback);
69                         sound.play();
70                        
71                         stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
72                        
73                        
74                 }
75                
76                 private function onMouseMove(e:MouseEvent):void
77                 {
78                         randomize=mouseY/stage.stageHeight
79                 }
80                
81                 private function onClick(e:MouseEvent):void
82                 {
83                         if (regions)
84                         {
85                                 currentRegion = regions[idx];
86                                 smplIdx = 0;
87                                 if ( ++idx >= regions.length)
88                                 {
89                                         idx = 0;
90                                 }
91                         }
92                 }
93                
94                                
95                 private function onSamplesCallback(e:SampleDataEvent):void
96                 {
97                         var i:int = 0;
98                         if (currentRegion)
99                         {
100                                 var len:int = currentRegion.length;
101                                 var left:Vector.<Number>=currentRegion.left;
102                                 if (currentRegion.setting.channels == 2)
103                                 {
104                                         var right:Vector.<Number>=currentRegion.right;
105                                         for (; i < bufferLength; ++i)
106                                         {
107                                                 e.data.writeFloat(left[smplIdx]);
108                                                 e.data.writeFloat(right[smplIdx]);
109                                                
110                                                 smplIdx++;
111                                                 if (smplIdx >= len)
112                                                 {
113                                                         smplIdx = 0;
114                                                         if(Math.random() < randomize){
115                                                                 currentRegion = regions[int(Math.random() * regions.length)];
116                                                                 len = currentRegion.length;
117                                                                 left = currentRegion.left;
118                                                                 right = currentRegion.right;
119                                                         }
120                                                 }
121                                         }
122                                 }else
123                                 {
124                                         for (; i < bufferLength; ++i)
125                                         {
126                                                 e.data.writeFloat(left[smplIdx]);
127                                                 e.data.writeFloat(left[smplIdx]);
128                                                
129                                                 smplIdx += 1;
130                                                 if (smplIdx >= len)
131                                                 {
132                                                         smplIdx = 0;
133
134                                                         if(Math.random() < randomize){
135                                                                 currentRegion = regions[int(Math.random() * regions.length)];
136                                                                 len = currentRegion.length;
137                                                                 left = currentRegion.left;
138                                                                
139                                                         }
140                                                 }
141                                         }
142                                 }
143                                 //currentRegion = null;
144                                
145                         }else
146                         {
147                                 for (; i < bufferLength; ++i)
148                                 {
149                                         e.data.writeFloat(0);
150                                         e.data.writeFloat(0);
151                                 }
152                         }
153
154                 }
155                
156         }
157        
158 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。