Flash10でのサウンド作成機能を使ってみたよ。その4

今度は電話の呼び出し音ってのをやってみました。
http://moeten.info/flex/20081016_fp10Test/bin-release/test14.html
音出るのでボリューム絞ってからアクセスしてください(^−^)

sin波とcos波でうまく打ち消すとそれっぽく聞こえるようです。
ソースはこちら

<?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 function onSampleData(e:SampleDataEvent):void
{
    bdC = new BitmapData( myImageC.width , myImageC.height);
    var smpl:Number;
    bdC.lock();
    t+=1;
    for (var i:int = 0; i < 4096; ++i) {
        if( t % 20 <= 10 ){
            smpl = Math.cos( 30 * i / slidermyT.value /100) * Math.sin( 0.5 * i /  slidermyT.value/100);
        }else{
            smpl = 0;
        }
        bdC.setPixel( i ,smpl * 100 + 100, 0x0000ff );
        e.data.writeFloat(smpl);
        e.data.writeFloat(smpl);
    }
    //画像へ表示
    myImageC.source  = new Bitmap( bdC );
}
]]>
</mx:Script>
<mx:VBox width="100%" height="100%" verticalGap="3">
    <mx:Label text="{slidermyT.value}"/>
    <mx:HSlider id="slidermyT" minimum="0" maximum="10" value="3.14" width="100%"
        showTrackHighlight="true" labels="{[0,1]}" allowTrackClick="true" liveDragging="true" enabled="true"/>
    <mx:Image id="myImageC" width="100%" height="200"/>
</mx:VBox>
</mx:Application>