如何使用Java将音频流转换为MP3?

时间:2008-12-05 08:50:40

标签: java mp3 capture encode recording

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

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

6 个答案:

答案 0 :(得分:4)

可能你可以使用LAMEOnJ,这是一个包含标准LAME API的100%Java API(LAME是一个MP3编码器)。

我不确定它会编码“chunk by chunk”......

答案 1 :(得分:2)

使用Xuggler来做到这一点。它是免费的,开源的(LGPL),并使用libmp3lame。 Xuggler中的MediaTool API给出了很多如何使用它的例子:

答案 2 :(得分:1)

Lame确实是MP3编码的事实上的标准,部分原因在于它的高质量(编码MP3很难做到......这是一种主观艺术),部分原因是法律问题(MP3是专利技术) ,AFAIK,这就是为什么你从有限数量的网站获得Lame二进制文件的原因,其中大多数是在这些法律问题较少(或不执行)的国家。

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

答案 3 :(得分:0)

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

我知道这不是Java源代码,但可能会让您走上正轨 - 尝试查看Lame MP3 Encoder

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

答案 4 :(得分:0)

在Java中创建一个新进程,并将该流写入到SoX之类的工具的标准输入中,以便将音频数据动态转换为MP3。

答案 5 :(得分:-1)

尝试使用Ring缓冲区对fly中的原始音频缓冲区进行编码。