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

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

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

Line 
1 package samples
2 {
3     import flash.display.Sprite;
4     import flash.events.SampleDataEvent;
5     import flash.media.Sound;
6     import flash.media.SoundChannel;
7     public class SineSample extends Sprite
8     {
9         private var phase:Number = 0;
10         private var freq:Number = 440;
11         private const PI2:Number = Math.PI * 2;
12         private var soundChannelObject:SoundChannel = new SoundChannel();
13         public function SineSample()
14         {
15             var soundObj:Sound = new Sound();
16             //まずはSAMPLE_DATAイベントにリスナー登録
17             soundObj.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
18             //mp3などの音声を割り当てずにそのままplay()で再生開始すると、
19             //音のバッファが空になるたびにSAMPLE_DATAイベントが発生します。
20             soundChannelObject = soundObj.play();
21         }
22         private function onSampleData(e:SampleDataEvent):void
23         {
24             var smpl:Number;
25             var w:Number = PI2 * freq / 44100;
26            
27             //レイテンシの計測【※1】
28             var latency:Number = e.position / 44.1 - soundChannelObject.position;
29
30             //一度のイベントごとに2048~8192サンプル×左右2チャンネル分のデータを書き込みます。
31             for (var i:int = 0; i < 4096; ++i) {
32                 //波形データを生成【※2】
33                 phase += w;
34                 if (phase > PI2) {
35                     phase -= PI2;
36                 }
37                 smpl = Math.sin(phase);
38                
39                 //SampleDataEvent.dataにwriteFloat()で波形データを書き込む【※2】
40                 e.data.writeFloat(smpl);
41                 e.data.writeFloat(smpl);
42             }
43         }
44     }
45 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。