flash on 2013-8-1

by tepe
♥0 | Line 82 | Modified 2013-08-01 17:40:25 | MIT License
play

ActionScript3 source code

/**
 * Copyright tepe ( http://wonderfl.net/user/tepe )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/b6M3
 */

package {
    import flash.ui.Keyboard;
    import flash.display.Sprite;
    import flash.events.*;
    import flash.utils.*;
    import flash.net.*;
    import flash.media.*;
    import flash.text.*;
    public class FlashTest extends Sprite {
        // パラメータ
        private var sampling:int = 2048;    // 1 度に転送するサンプリング数
        // サウンドオブジェクト
        private var snd:Sound = new Sound();
        private var sw1:Boolean = false;
        private var tf1:TextField = new TextField();
        private var url : URLRequest = new URLRequest("http://192.168.11.7/sound/a.mp3");
        private var srcSnd:Sound;

        public function FlashTest() {
            // write as3 code here..
            addChild(tf1);
            tf1.x = 100;
            var s:Sprite =new Sprite();
            s.graphics.beginFill(0);
            s.graphics.drawRect(0,0,100,100);
            s.graphics.endFill();
            addChild(s);
            stage.addEventListener(MouseEvent.CLICK,onClick);
            // サンプルデータイベント登録
            snd.addEventListener(SampleDataEvent.SAMPLE_DATA, SampleDataFunc);
            srcSnd = new Sound(url);
            srcSnd.addEventListener(Event.COMPLETE,onComplete);
            stage.addEventListener(KeyboardEvent.KEY_DOWN,onkey);
        
            // 再生開始
            snd.play();
        }
        private function onkey(e:KeyboardEvent):void{
            load1();
        }

        private var len:Number=0;
        private var loadedPos:Number=0;
        private function onComplete(e:Event):void{
            srcBytes = new ByteArray();
            len = srcSnd.extract(srcBytes,sampling*2,len);
        }
        
        private function load1():void{
            srcBytes = new ByteArray();
            len = srcSnd.extract(srcBytes,sampling*2,loadedPos);
            if(len<sampling*2)loadedPos=0;
            else loadedPos += len;
            srcBytes.position = 0;
            for(var i:int=0;i<sampling*2;i++){ 
                var d:Number = srcBytes[i].readFloat();
                // 左チャンネル
                buf.writeFloat(d);
                // 右チャンネル
                //buf.writeFloat(d);
            }
        }


        
        private function onClick(e:MouseEvent):void{
            sw1 = !sw1;
        }
        private var srcPos:int=0;
        private var srcBytes:ByteArray;
        

        private var buf:ByteArray;
        // サウンドデータ要求時に呼び出されるイベント
        private function SampleDataFunc(e:SampleDataEvent):void{
            var i:int;
            // サウンドバッファ
            buf = e.data;
            var str:String = new String();
            str = e.position.toString();
            str += "\n"+srcSnd.bytesTotal.toString();
            str += "\n"+srcPos.toString();
            str += "\nlen:"+len.toString();
            tf1.text = str;

            // 開始直後のノイズ対策
            if(e.position == 0){
                for(i=0;i < sampling*2;i++){
                    // 左チャンネル
                    buf.writeFloat(0.0);
                    // 右チャンネル
                    buf.writeFloat(0.0);
                }
                return;
            }

            for(i=0;i < sampling;i++){
                // ランダム
                var d:Number;
                if(sw1==true)d = Math.random() * 2 - 1;
                else d=0.0;

                // 左チャンネル
                buf.writeFloat(d);
                // 右チャンネル
                buf.writeFloat(d);
            }
        }
    }
}