使用SampleDataEvent实时修改声音,以获取NetStream中的音频

时间:2011-01-27 17:44:54

标签: flash flex audio netstream

我正在使用NetConnection和NetStream传输音频。我知道您可以使用Sound对象实时修改示例数据,但是我无法找到用于使用NetStream对象播放音频的SampleDataEvent。有没有办法将音频从NetStream对象传递到Sound对象并修改该对象的声音?

修改 我愿意做任何疯狂的黑客攻击,所以任何解决方案都可以!

2 个答案:

答案 0 :(得分:2)

你需要访问声音的字节码,如果使用netstream,只有将其传递给NetStream.send() / NetConnection.call() 另外,才能将其传递给数据正在流式传输。否则你需要像SoundURLStream

这样的直接网址

答案 1 :(得分:2)

根据您正在寻找的质量,您可以将其牺牲为低比特率的单声道信号,您可以将其流式传输以在客户端获取它作为URLStream,然后输入该URLStream的数据在运行时逐步变为空Sound对象的SampleDataEvent。

额外的工作主要是在服务器端,将MP3解压缩为浮点数的波形流(单声道[mono]信号的流或两者的混合组合为单声道)然后推送那是你的客户端应用程序。

当URLStream被加载时,将其下载的字节附加到Sound的SampleDataEvent上可用的ByteArray(也给它一些缓冲“时间”以加载足够的波形数据)。对于从URLStream读取的每个单样本,您应该将两次相同的值写入SampleDataEvent.data对象(一次到左侧通道,一次到右侧)。

所有这一切都说,将类似WAV的声音流降级为单声道可能不足以减少带宽并覆盖广泛的目标受众。也许看一下AS3的OGG库(应该存在)将是一个更好的选择,并且当然应该支持解码部分下载的流。