「FP10beta2でsamplesCallbackDataを認識しない?」エントリでオーディオ新機能の実装変更でサンプルが動かなくなったことを書きましたが、その後、アドビのFlash PlayerプログラマであるTinic Uro氏のブログエントリを見てみると、FP10 beta2(build 10.0.1.525)リリース後にサンプルコードがアップデートされたようです。
Part 2(サイン波生成) の以前のコード(一部省略)
var sound:Sound = new Sound();
function sineWavGenerator(event:SamplesCallbackEvent):void {
//省略
sound.samplesCallbackData.writeFloat(sample);
sound.samplesCallbackData.writeFloat(sample);
}
sound.addEventListener("samplesCallback",sineWavGenerator);
sound.play();
Part 2(サイン波生成) の新しいコード(変更点のみ)
function sineWavGenerator(event:SampleDataEvent):void {
event.data.writeFloat(sample);
event.data.writeFloat(sample);
}
sound.addEventListener("sampleData",sineWavGenerator);
Part 3(MP3の再生) の以前のコード(一部省略)
var mp3sound:Sound = new Sound();
var dynamicSound:Sound = new Sound();
var samples:ByteArray = new ByteArray();
function samplesCallback(event:SamplesCallbackEvent):void {
//省略
dynamicSound.samplesCallbackData.writeFloat(left);
dynamicSound.samplesCallbackData.writeFloat(right);
//省略
}
private function loadComplete(event:Event):void {
dynamicSound.addEventListener("samplesCallback",samplesCallback);
dynamicSound.play();
}
mp3sound.addEventListener(Event.COMPLETE, loadCompleteMP3);
mp3sound.load(new URLRequest("sound.mp3"));
Part 3(MP3の再生) の新しいコード(変更点のみ)
function sampleData(event:SampleDataEvent):void {
event.data.writeFloat(left);
event.data.writeFloat(right);
}
private function loadComplete(event:Event):void {
dynamicSound.addEventListener("sampleData",sampleData);
}
変更点は、上記サンプルコードの違いから見てみると大きくは3点です。
(1)リスナーに登録するイベント名が変更された。
"samplesCallback" → "sampleData" または Event.SAMPLE_DATA
(2)コールバックで渡されるイベント名が変更された。(1)の変更に伴う
event:SamplesCallbackEvent → event:SampleDataEvent
(3)書き込み先がコールバックイベントのdataプロパティに変更された。
sound.samplesCallbackData → event.data (SampleDataEvent)
SoundクラスからsamplesCallbackDataプロパティは削除された。
何となく今後の展開が心配になるような・・・感じがする。
※追記情報
SampleDataEventオブジェクトで利用できるサンプルの設定範囲が変更された。
512~8192 → 2048~8192