我打算像多轨一样同时播放多个MP3,我知道这会导致内存大幅增加。有没有办法直播或缓冲现场?
如果我在创建虚拟钢琴时使用它,是否可以嵌入88或500MB的MP3以获得性能或动态负载?
答案 0 :(得分:0)
唔...
来自文件的流?
这是可能的,但我认为使用AIR API 是不可能的......我想在这里可以使用自定义库...基本上,你会有一个类 SoundPlayer ,其中包含方法 addSound 和 removeSound 。
每次调用 addSound 时,所需的路径(需要的注释和工具)用于初始化 FileStream 以及新的回调方法创建声音实例。回调将从 FileStream 实例中读取(缓冲)某些内容,例如,8192字节,或缓冲区的大小,并将其写入 Sound 缓冲区。
removeSound 只会删除(关闭等等) addSound <创建的 FileStream 和声音的实例/ em>的
实例应存储在某种数组中。
此外,请注意声音的动态流版本是非常未记录的...但这是一个示例代码,以了解它是如何工作的:
var mySound:Sound = new Sound(); // new one
mySound.addEventListener("sampleData", getData); // the callback event
var myChannel:SoundChannel = mySound.play(); // no arguments for play, channel
// the callback function - it is used to get the new sound buffer
function getData(e:SampleDataEvent):void {
for (var wi:int = 0; wi < 8192; wi++){
e.data.writeFloat(Math.random());
}
}
这会产生噪音(随机)。
这是锯齿波形。只因为它很有趣:(警告:响亮)
var subWi:Number = 0;
for (var wi:int = 0; wi < 8192; wi++){
e.data.writeFloat(subWi);
subWi += 0.01;
if (subWi >= 1){
subWi = 0;
}
}
注意:使用此代码,您也可以执行合成:D