4

是否可以使用 Java 将实时音频流从混音器转换为 MP3?

  • 它必须逐块转换,否则内存将被耗尽。
  • 我已经知道如何录制,但仅限于无损格式,例如 wav 和 aiff。
  • 当音频进来时,我需要转换。
4

6 回答 6

4

也许你可以使用LAMEOnJ,它是一个 100% Java API 包装了标准 LAME API(LAME 是一个 MP3 编码器)。

我不确定它是否会“逐块”编码......

于 2008-12-05T09:03:19.300 回答
2

使用 Xuggler 来做到这一点。它是免费的、开源的 (LGPL),并且在后台使用 libmp3lame。Xuggler 中的MediaTool API提供了很多如何使用它的示例:

于 2009-11-06T06:18:25.477 回答
1

Lame 确实是 MP3 编码的事实上的标准,部分原因是它的高质量(编码 MP3 很难做到正确......这是一门主观艺术),部分原因是法律问题(MP3 是一项专利技术,AFAIK,这就是为什么您从有限数量的站点获取 Lame 二进制文件的原因,其中大多数位于这些法律问题较少(或未执行)强制执行的国家/地区)。

VonC 发现的 LAMEOnJ 项目似乎使用了非自由的 JNI 实现,但我想您可以自己绑定 JNI 甚至 JNA,特别是如果您针对的是精确系统。

于 2008-12-05T09:23:06.933 回答
0

至于第一个问题 - 是否有可能,我能看到的唯一限制是处理器速度。如果您使用的算法和您的处理器都足够快,那么就没有理由不可能。

我知道这不是 Java 源代码,但它可能会让你走上正轨——试试看Lame MP3 Encoder

据我所知,所有 MP3 转换算法都是逐块工作的。他们不需要读取整个 WAV 文件即可开始转换,但他们可以即时转换。

于 2008-12-05T09:22:41.023 回答
0

在 Java 中创建一个新进程,然后将流写入到SoX等工具的标准输入中,让它即时将音频数据转换为 MP3。

于 2008-12-05T10:30:06.923 回答
-1

尝试使用环形缓冲区对原始音频缓冲区进行实时编码。

于 2009-09-09T05:48:16.680 回答