Onegame

Flash 9のスクリプト言語ActionScript 3.0の技術情報とゲームの開発


トップページ - TIPS

音声(サウンド)データの動的生成と再生

ActionScript 3.0にはByteArrayクラスがあり、任意のバイナリデータを生成することができます。 つまりどのようなフォーマットのデータも作成可能ということです。 この機能のおかげで、Flash 9では音声データを動的に生成して、そしてそれを再生できる可能性があります。

実際に実現してライブラリ化してる方がいたので、使ってみたいと思います。

参考URL : http://www.flashcodersbrighton.org/wordpress/?p=9
how to make actionscript 3 play generated pcm wave data

実行例
※ このFlashを見るにはFlash Player 9が必要です。

メインクラス

package
{
    import flash.display.*;
    import flash.events.*;
    import nu.mine.flashnet.sound.core.*;
    
    public class HelloDynamicSound extends Sprite
    {        
        private var engine:PlaybackEngine;

        public function HelloDynamicSound() {
            var playbackBufferSize:uint = 2048 * 100;

            // 音声データ生成クラス
            var dataProvider:IAudioDataProvider = new SineWaveProvider();

            // 再生エンジン
            engine = new PlaybackEngine(dataProvider, playbackBufferSize); 
            engine.addEventListener(PlaybackEngine.READY, engineReady, false, 0, true);
        }

        private function engineReady(event:Event):void {
            engine.start();
        }
    }
}
音声データ生成クラス(サイン波を生成)

package
{
    import nu.mine.flashnet.sound.core.*;

    public class SineWaveProvider extends AudioDataProvider
    {
        private var phase:Number;

        public function SineWaveProvider() {
            // 44.1kHz, 16 bit, 1 channel
            var fmt:PCMSoundFormat = new PCMSoundFormat(44100, 16, 1);        
            super(fmt);
            
            phase = 0.0;
        }

        protected override function fillBuffer(numSamples:uint):void {
            for (var i:uint = 0; i < numSamples; i++) {
                buffer.writeMonoSample(Math.sin(phase) * 0.1);

                phase += 440 * (2 * Math.PI / soundFormat.sampleRate);
            }
        }
    }
}

copyright onegame.bona.jp