1

我有几个简短的 mp3 文件,用户可以在时间线上重新组织。之后,我想将结果保存为一个 mp3 文件,结合六个短文件。在其他项目中,我完成了麦克风录音,使用 alchemy ShineMP3Encoder 压缩为 mp3,并将其保存为文件。

我看到至少两种方法:

  1. 从加载的 Sound 对象中提取所有 ByteArray 数据,将其连接到一个新的 ByteArray 中并使用 Shine 对其进行压缩。但是 Sound.extract 中的 ByteArray 似乎与编码器不兼容,告诉我“错误:输入不是 MS-RIFF 文件”
  2. 以某种方式组合原始 MP3 文件而不需要解码和编码。但这意味着必须剥离文件头信息等。

如果在 Flash 中不可能或效率很低,我会考虑使用 PHP 的服务器端解决方案。所以如果这很容易,请告诉我。

谢谢!

4

2 回答 2

0

这些是否需要物理组合成一个文件?即 Flash 是否需要实际生成单个 MP3?或者只是像一个长文件一样回放给用户?

Flash 没有任何内置的 MP3 编码能力,尽管我相信各种 Flash 媒体服务器都有这种能力(Red5 等)。实际上,在探索中,这里有一个人的链接,他声称他拥有可以让您录制 MP3 客户端的技术,尽管它似乎更多地用于来自内置麦克风的音频录制:

http://fms.denniehoopingarner.com/

也许你可以和他一起修改代码以使用现有的声音文件并生成一个新的。否则,您可能需要使用一些花哨的服务器端步法来完成它。

于 2012-05-02T15:52:21.733 回答
0

事实证明,合并多个 mp3 文件实际上很容易。您可以连接他们的原始数据并将其保存为新的 mp3 文件。有几个条件适用:

  1. 确保所有压缩设置相同且非动态。比特率、频率、立体声/单声道等。
  2. 您的操作系统或 mp3 播放器指示的最终结果长度可能是错误的,并且仅显示第一段的长度。这是标题数据。大多数播放器,包括 Flash,只会播放整个文件,所以在大多数情况下,这可能不是问题。

在这个例子中,我使用了 Greensock 的 LoaderMax 库。DataLoader 是您要使用的特定加载器类型(默认情况下应为二进制)。*请注意,我稍后使用 url 作为名称来标识加载程序,并且需要将一些 *_variables* 声明为类成员* 当然,您也可以使用本地方式或不同的库来加载文件。

for each ( var mp3FileURL : String in _mp3FileURLs )
{
    var loader : DataLoader = new DataLoader( mp3FileURL, mp3FileURL ) );
    _preloadQueue.append( loader );
}

加载队列完成后,您可以开始处理来自加载器的数据。

_audioEditMP3 = new ByteArray();

for each ( var mp3FileURL : String in _mp3FileURLs )
{
    var content : * = _preloadQueue.getContent( mp3FileURL );
    _audioEditMP3.writeBytes( content );
}

您现在可以保存文件了!

var file : FileReference = new FileReference();
file.save( _audioEditMP3, "myAudioCompilation.mp3" );
于 2013-07-26T08:19:37.207 回答