混合来自ByteArray的2个声音
我已经构建了一个混音器并将所有序列保存在一个数组中,然后再次播放,现在我想将混音保存为MP3,我已经找到了保存混音的方法,答案是将声音加载为byteArrays (sound.extract)我很熟悉,但我真的不知道如何将所有声音存储在一个ByteArray中以便将其保存为MP3,我只是举例说明,加载2个音频文件并存储它们单独的ByteArrays,并播放每个声音,任何人都知道如何只存储2个byteArrays吗?
var mySound:Sound = new Sound();
var sourceSnd:Sound = new Sound();
var urlReq:URLRequest = new URLRequest("Track1.mp3");
sourceSnd.load(urlReq);
sourceSnd.addEventListener(Event.COMPLETE, loaded);
function loaded(event:Event):void
{
mySound.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
//mySound.play();
}
var mySound2:Sound = new Sound();
var sourceSnd2:Sound = new Sound();
var urlReq2:URLRequest = new URLRequest("Track2.mp3");
sourceSnd2.load(urlReq2);
sourceSnd2.addEventListener(Event.COMPLETE, loaded2);
function loaded2(event:Event):void
{
mySound2.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound2);
mySound2.play();
mySound.play();
}
function processSound(event:SampleDataEvent):void
{
var bytes:ByteArray = new ByteArray();
sourceSnd.extract(bytes, 8192);
event.data.writeBytes(bytes);
}
function processSound2(event:SampleDataEvent):void
{
var bytes:ByteArray = new ByteArray();
sourceSnd2.extract(bytes, 8192);
event.data.writeBytes(bytes);
}
没有找到相关结果
已邀请:
3 个回复
功飘
要么等到两个mp3完全加载,要么运行一个输入框来确定两个声音何时不再缓冲(Sound.isBuffering) 当mp3准备就绪时:
是的 - 您应该将可能的输出限制在-1/1。做吧。这是非常不优化的! 好。所以这很容易!困难的部分是将最终的byteArray转换为MP3。 Flash中的音频作为PCM /未压缩数据存在,MP3显然是压缩格式。这个“答案”已经太长了,我从几个非常聪明的人那里收集了所有这些信息。 您可以轻松地将“MicRecorder”改为通用声音数据记录器: http://www.bytearray.org/?p=1858 转换为MP3将是一个婊子:Thibault在ByteArray.org上发布了另一篇文章 - 搜索LAME MP3。 优秀的例子/资源: http://www.anttikupila.com/flash/soundfx-out-of-the-box-audio-filters-with-actionscript-3/ 在Google代码上查找Andre Michelle的开源“Tonfall”项目。 查看Kevin Goldsmith的博客和实验室 - 他就是利用Pixel Bender充满疯狂的一个很好的例子。 希望这可以帮助! PS - 从安德烈那里得到提示,音频缓冲区的最佳长度应为3072.试试你的机器吧!
究补闯
当然,您可能想要进行某种溢出检查,但这应该足以让您走上正确的轨道。
呈辖玫割善
中添加各个数组元素的值。但是你还必须处理最大/最小值的上限(没有溢出)。很确定没有任何东西可以混合使用MP3 - 因此您可能需要再次对MP3进行解码,混合和编码。