開発環境 Apache Flex SDK 4.12.1
FlashDevelop 4.6.2.5
実行環境 Microsoft Windows 8.1 (64bit)
プロジェクトの種類 ActionScript 3/AS3 Project
プロジェクト名 WaveForm2


Output/General
Dimensions 240 x 200 px

Main.as
package 
{
    import flash.display.*;
    import flash.events.*;
    import flash.media.*;
    import flash.text.*;
 
    public class Main extends Sprite 
    {
        private var wflist:Vector.<Vector.<Number>> = new Vector.<Vector.<Number>>;
        private var targetwf:Vector.<Number>;
        private var reverse:Number = 1;
        private var tfReverse:TextField;
        private var sound:Sound = new Sound;
        private var soundChannel:SoundChannel = null;
 
        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
 
        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point
 
            var name:Vector.<String> = new Vector.<String>;
            var wf:Vector.<Number>;
            var i:int;
            var t:Number;
 
            name.push("サイン波");
            wf = new Vector.<Number>(100);
            for (i = 0; i < 100; i++) 
            {
                t = i / 100;
                wf[i] = Math.sin(2 * Math.PI * t);
            }
            wflist.push(wf);
 
            name.push("矩形波");
            wf = new Vector.<Number>(100);
            for (i = 0; i < 100; i++) 
            {
                t = i / 100;
                wf[i] = (t < 0.5) ? 1 : -1;
            }
            wflist.push(wf);
 
            var dtf:TextFormat = new TextFormat;
            dtf.align = TextFormatAlign.CENTER;
            dtf.size = 16;
 
            for (var r:int = 0; r < wflist.length; r++) 
            {
                var tf:TextField = new TextField;
                tf.x = 10;
                tf.y = 10 + 60 * r;
                tf.width = 100;
                tf.height = 50;
                tf.background = true;
                tf.backgroundColor = 0x7fff7f;
                tf.border = true;
                tf.defaultTextFormat = dtf;
                tf.name = r.toString();
                tf.selectable = false;
                tf.text = name[r];
                tf.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
                tf.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
                addChild(tf);
 
                var sp:Sprite = new Sprite;
                sp.x = 120;
                sp.y = tf.y;
                addChild(sp);
 
                var g:Graphics = sp.graphics;
                g.beginFill(0xffffbf);
                g.drawRect(0, 0, 100, 50);
                g.endFill();
                g.lineStyle(1);
                g.moveTo(100, 25);
                g.lineTo(0, 25);
                g.lineStyle(1, 0xff0000);
                wf = wflist[r];
                for (i = 0; i < 100; i++)
                {
                    g.lineTo(i, 25 - 25 * wf[i]);
                }
            }
 
            tf = new TextField;
            tf.x = 10;
            tf.y = 10 + 60 * r;
            tf.width = 100;
            tf.height = 25;
            tf.background = true;
            tf.border = true;
            tf.defaultTextFormat = dtf;
            tf.selectable = false;
            tf.text = "Reverse(Shift)";
            addChild(tf);
            tfReverse = tf;
            dispReverse();
 
            sound.addEventListener(SampleDataEvent.SAMPLE_DATA, onSampleData);
 
            stage.addEventListener(KeyboardEvent.KEY_DOWN, onKey);
            stage.addEventListener(KeyboardEvent.KEY_UP, onKey);
        }
 
        private function dispReverse():void 
        {
            tfReverse.backgroundColor = (reverse < 0) ? 0xff7f00 : 0xbfbfbf;
        }
 
        private function onSampleData(e:SampleDataEvent):void 
        {
            // 2048~8192
            for (var i:int = 0; i < 8100; i++) 
            {
                var t:int = i % 100;
                var value:Number = targetwf[t];
                e.data.writeFloat(value);
                e.data.writeFloat(value * reverse);
            }
        }
 
        private function onKey(e:KeyboardEvent):void 
        {
            reverse = e.shiftKey ? -1 : 1;
            dispReverse();
        }
 
        private function onMouseDown(e:MouseEvent):void 
        {
            var i:int = parseInt(e.target.name);
            targetwf = wflist[i];
            reverse = e.shiftKey ? -1 : 1;
            dispReverse();
 
            var st:SoundTransform = new SoundTransform;
            st.volume = 0.2;
            soundChannel = sound.play(0, 0, st);
        }
 
        private function onMouseUp(e:MouseEvent):void 
        {
            if (soundChannel != null)
            {
                soundChannel.stop();
                soundChannel = null;
            }
        }
 
    }
 
}
 
最終更新:2014年09月11日 18:04