var sound:Sound = new Sound();
var req:URLRequest = new URLRequest(url);
sound.load(url)
我想修改聲音數據(一個MP3),因爲它進來。具體來說,MP3將被加密使用流密碼,我想解密數據,因爲它進來。這可能使用某種類型的事件嗎?動作腳本修改聲音數據實時
var sound:Sound = new Sound();
var req:URLRequest = new URLRequest(url);
sound.load(url)
我想修改聲音數據(一個MP3),因爲它進來。具體來說,MP3將被加密使用流密碼,我想解密數據,因爲它進來。這可能使用某種類型的事件嗎?動作腳本修改聲音數據實時
要處理現有的音頻流,您必須設置一個輸出聲音對象,而不向其中加載聲音。然後偵聽SampleDataEvent.SAMPLE_DATA的聲音對象,只要緩衝區爲空的Sound對象開始播放,就會觸發該對象。您將需要填補它的立體聲PCM數據緩衝區(對浮點數)
得到這些號碼,使用Sound.extract()方法您輸入的Sound對象(你只是叫聲音在一個對你上面的代碼)將PCM數據讀取到ByteArray。無論您想要如何處理該ByteArray的數據,並將其放入輸出緩衝區中。
var input : Sound;
var output : Sound;
// ... set up your input sound source ... //
output = new Sound();
output.addEventListener(SampleDataEvent.SAMPLE_DATA, handleSampleData);
output.play();
// The SAMPLE_DATA event is dispatched whenever the output Sound object
// buffer is empty. Fill the buffer to keep playing sound.
function handleSampleData(ev : SampleDataEvent) : void
{
var buffer : ByteArray = new ByteArray;
input.extract(buffer, 2048);
// PCM data from input is now in the buffer ByteArray. Filter the sound
// data according to your requirements here.
ev.data.writeBytes(buffer);
}
還有上爲extract()方法的參考文獻中的問題的一些示例代碼。
在flash 10中,您可以做到這一點。我不確定在以前的版本中是否可行。在Flash 10 Sound類中有一種新類型的事件SampleDataEvent,在Sound對象上調用Play時以及沒有可供Sound對象播放的數據時會實際觸發它,即請求數據。然後趕上事件寫一些MP3數據和Sound對象可以播放。這link可能會有所幫助。
我一直在嘗試在AS3中最近創建動態音頻。我已經向我的博客發佈了一些實驗:http://labs.makemachine.net