动作脚本修改声音数据实时

问题描述:

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