Flash10でのサウンド作成機能を使ってみたよ。その3
今度は矩形波ってのを試してみました。
http://moeten.info/flex/20081016_fp10Test/bin-release/test13.html
音出るのでボリューム絞ってからアクセスしてください(^−^)
こっちのほうがファミコンっぽいかなぁ。
ソースはこちら
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="creationCompleteHandler(event)" width="700" height="800" backgroundGradientAlphas="[1.0, 1.0]" backgroundGradientColors="[#FFFFFF, #626262]"> <mx:Script> <![CDATA[ import flash.sampler.Sample; import flash.display.Sprite; import flash.events.SampleDataEvent; import flash.media.Sound; private var phase:Number = 0; private var freq:Number = 440; private const PI2:Number = Math.PI * 2; private var soundChannelObject:SoundChannel = new SoundChannel(); private var bdC:BitmapData //初期化 private function creationCompleteHandler(e:Event):void{ //sin波描画用 bdC = new BitmapData( myImageC.width , myImageC.height); //サウンド作成 var mySound:Sound = new Sound(); mySound.addEventListener(SampleDataEvent.SAMPLE_DATA,onSampleData); soundChannelObject = mySound.play(); } private var t:Number = 1; private var bytes:ByteArray = new ByteArray(); private var spectrum:Array = new Array(256); private function onSampleData(e:SampleDataEvent):void { var smpl:Number; var w:Number = PI2 * freq / 44100; var latency:Number = e.position / 44.1 - soundChannelObject.position; bdC.lock(); var myT:int = slidermyT.value; //sin波の作成 for (var i:int = 0; i < 4096; ++i) { phase += w; if( i% slidermyT.value > slidermyT.value/2 ){ smpl = slidermyV.value; }else{ smpl = 0 } if( i % (slidermyT.value/2) == 0 ){ for( var j:int = 0 ; j < slidermyV.value*100 ; j ++ ){ bdC.setPixel( i ,j, 0x0000ff ); } } bdC.setPixel( i ,smpl * 100, 0x0000ff ); e.data.writeFloat(smpl); e.data.writeFloat(smpl); } //画像へ表示 myImageC.source = new Bitmap( bdC ); } //キャンバスをクリア private function onChange():void{ bdC = new BitmapData( myImageC.width , myImageC.height); } ]]> </mx:Script> <mx:VBox width="100%" height="100%" verticalGap="3"> <mx:HSlider id="slidermyT" minimum="0" maximum="100" value="80" change="onChange()" showTrackHighlight="true" labels="{[0,1]}" snapInterval="1" allowTrackClick="true" liveDragging="true" enabled="true"/> <mx:HSlider id="slidermyV" minimum="0" maximum="1" value="0.5" change="onChange()" showTrackHighlight="true" labels="{[0,1]}" allowTrackClick="true" liveDragging="true" enabled="true"/> <mx:Image id="myImageC" width="100%" height="80"/> </mx:VBox> </mx:Application>