SamplesCallbackEventで音が途切れないように鳴らすメモ
こないだAstroのSamplesCallbackEventで音を鳴らしてみたところ、どうも音切れが発生しているようなので途切れないためのメモ
旧
新
修正箇所はampの計算方法の違い。旧版は、byteArrayのポジションから計算してたけど、それだと周波数が変わったときにジャンプしちゃうので新版では前回の数値を保持し、そこに加算する事にした。
旧
for ( var c:int=0; c<512; c++ ) {
amp = (event.position + c) * freq
var sample:Number = Math.sin( amp ) * 0.5
sound.samplesCallbackData.writeFloat(sample);
sound.samplesCallbackData.writeFloat(sample);
}
新
for ( var c:int=1; c <= 512; c++ ) {
//前回のサンプル末尾に加算
amp = (c * freq) + ampEnd
var sample:Number = Math.sin(amp) * 0.5
this.samplesCallbackData.writeFloat(sample);
this.samplesCallbackData.writeFloat(sample);
}
//サンプルの末尾を保持
ampEnd = amp
修正箇所はampの計算方法の違い。旧版は、byteArrayのポジションから計算してたけど、それだと周波数が変わったときにジャンプしちゃうので新版では前回の数値を保持し、そこに加算する事にした。