FlashPlayer10 beta2で音まわりのAPIが変わったみたいです。

FlashPlayer10 beta2を入れてから、ここで公開しているサンプルの音が出なくなっていた。
#というわけで以前のサンプルはbeta2以降では再生不能ですすみません…。
調べてみたら、FlashPlayer10 beta2では音まわりのAPIがちょっと変わってるみたい。

以前は

sound = new Sound();
sound.addEventListener(Event.SAMPLES_CALLBACK, onSamplesCallback);
sound.play();

private function onSamplesCallback(e:Event):void 
{
	for (var i:int=0; i < 4096; ++i)
	{
		sound.samplesCallbackData.writeFloat(Math.random());
		sound.samplesCallbackData.writeFloat(Math.random());
	}
}

みたいな感じだったと思いますが、beta2ではイベント名が「Event.SAMPLE_DATA」に変更され、またイベントも「SampleDataEvent」に変わってました。
「SampleDataEvent」には「data」と「position」というプロパティがあり、この「data」に音のデータを書き込む形に変更になってて、ちょっとコードが見やすくなったような気が。

sound = new Sound();
sound.addEventListener(Event.SAMPLE_DATA, onSamplesCallback);
soundChannelObject = sound.play();

private function onSamplesCallback(e:SampleDataEvent):void 
{
	//レイテンシを計測
	var latency:Number = e.position/44.1 - SoundChannelObject.position
	for (var i:int=0; i < 4096; ++i)
	{
		e.data.writeFloat(Math.random());
		e.data.writeFloat(Math.random());
	}
}

あと、変更になった点として、一度に書き込む波形データの数が、以前は「512〜8192」サンプルまで、くらいだったように思うのですが、これが「2048〜8192」サンプルに変更になった模様。
それと、今回特筆すべきは「SampleDataEvent.position」で、こいつをSoundChannel.positionと比較することで、レイテンシ(音データを書き込んでから実際に音が出るまでの遅延時間)の値をリアルタイムに計測できるようになった。これで音とアニメーション等との同期が少しやりやすくなりそうです! ※計算式は上記コードに。

#あとはネイティブ超速FFTでもつけてくれれば言う事ないんだけど(以下略