2010-10-15 43 views
0

我打算同时播放多个MP3像多轨一样,我知道这会造成内存的巨大增加。有没有一种方法来流式传输或缓冲直播?空气2和流媒体MP3

如果我在创建虚拟钢琴时使用它,将88或500MB的MP3嵌入到性能或动态负载中是否可行?

回答

0

嗯...

从文件流?

这将是可能的,但我不认为这将有可能与AIR API ...我想定制库将可用在这里......基本上,你将有一个类声音播放,这将有方法addSoundremoveSound

每次addSound被调用时,路径所需(ID EST音符和仪器需要)被用来初始化一个的FileStream以及用于新创建的声音实例的回调方法。回调会从FileStream实例(例如8192字节)或缓冲区的大小读取(缓冲区),并将其写入声音缓冲区。

removeSound只会通过addSound删除(接近,等...)创建的两个的FileStream声音的实例。

这些实例应该存储在某种数组中。

而且,请注意,声音的动态流版本是非常无证......但是,这是一个示例代码来了解它是如何工作:

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