【发布时间】:2011-08-27 00:05:28
【问题描述】:
从这个 AS3 代码中,我预计 500 行包含“2048”的跟踪输出。但相反,我只得到一些包含“2048”的行。其余的痕迹打印一个“0”,这表明 extract() 方法没有返回任何数据。
为什么会这样?我想用特定数量的步骤遍历声音文件,以在相应位置提取 2048 个字节的声音。一次提取整个声音文件会使 flashplayer 冻结几秒钟,因此对我来说不是一个好的解决方案
只要 steps 小于 samplesInSound/2048,就会发现这种行为。越接近该值,与包含 2048 的行相比,打印的“0”行就越多。
var sound:Sound = new Sound();
sound.load(new URLRequest("soundfile.mp3"));
sound.addEventListener(Event.COMPLETE, soundLoaded);
function soundLoaded(e:Event){
var samplesInSound:Number = sound.length*44.1;
var steps:int = 500;
var byteArray:ByteArray = new ByteArray();
for(var i=0; i<samplesInSound; i += Math.floor(samplesInSound/steps)){
var extracted = sound.extract(byteArray, 2048, i);
trace(i + ": " + extracted);
}
}
我的想法是,提取后的声音文件的提取部分会从声音文件的其余部分中删除(如Actionscript 3 - Sound.extract method empties sound object data),所以我尝试了另一个 for 循环:
for(var i=0; i<samplesInSound - steps * 2048; i += Math.floor(samplesInSound/steps) - 2048)
但这也没有成功。
谁能帮我解决这个问题?
【问题讨论】:
标签: flash actionscript-3 audio bytearray extract