我正在一个项目中工作,我需要将一些mp3样本混合在一个ogg文件中作为输出。
有点像这个网站的作用:http://naturesoundsfor.me/
在研究时我偶然发现了这个图书馆,这似乎符合我的要求: http://labs.byhook.com/2011/02/22/ogg-vorbis-encoder-decoder-for-flash/
但是,当我编码一个2分钟的mp3文件时,它变成了一个2秒的ogg文件。这是我的代码:
var bytes:ByteArray = new ByteArray();
_sound.extract(bytes, _sound.length); // the sound is fully loaded from mp3 file
_oggManager.addEventListener(OggManagerEvent.ENCODE_COMPLETE, onEncodeComplete);
private function onEncodeComplete(e:OggManagerEvent):void
{
_oggManager.removeEventListener(OggManagerEvent.ENCODE_COMPLETE, onEncodeComplete);
var fileRef:FileReference = new FileReference();
fileRef.save(_oggManager.encodedBytes, "newFile.ogg");
}
但输出结果只是音频的一部分。我对声音编码和解码并不熟悉,因此必须有一些我遗漏或不理解的东西。
答案 0 :(得分:1)
在这篇伟大的文章中找到答案,该文章介绍了提取方法的工作原理以及音频数据如何存储在Flash中:http://www.marinbezhanov.com/web-development/14/actionscript-3-sound-extract-demystified-or-how-to-draw-a-waveform-in-flash/
代码的修复程序位于提取部分。必须是这样的:
_sound.extract(bytes, (_sound.length / 1000) * 44100);
Sound类的length属性以毫秒为单位返回长度,因此我们将其转换为秒,然后乘以采样率,闪存中的采样率始终为44.1khz。