2012-08-09 63 views
0

我正在写一个Java程序,我想将一个ogg文件转换成mp3文件。
我花了很多时间试图找到一个好的图书馆来做到这一点,但没有成功的时刻。Java - 转换ogg到mp3

我想我需要一个ogg解码器(jorbis?)和一个mp3编码器(lameOnJ?)。
此外,转换完成后,我需要在文件(艺术家/曲目标签等)中设置一些标签。

这是一个Windows和OS X应用程序。
你可以给我任何关于如何处理的提示,如果可能的话,用例子。

感谢

+1

你的具体问题是什么?有些图书馆可以执行每一个可用的步骤,并且您已经计算出可以使用的候选人。您只需编写胶水代码将它们连接在一起。 – Durandal 2012-08-09 12:45:40

+0

嗯,我对Java相当陌生,并且很难找到写好胶水代码的好例子。 – jitowix 2012-08-09 13:00:29

+1

*没有人会为你写* *(除非你付钱)。并且最有可能没有任何示例可以满足您的需求。但是,您可以通过谷歌搜索每个步骤的部分解决方案示例(分而治之!)。从第一步开始,解码ogg文件。如果有,请将其扩展以将解码后的数据送入编码器。等等...... – Durandal 2012-08-09 13:03:56

回答

0

你有很多的选择,这取决于你想要多大的努力投入,并已就执行平台有什么限制。

许多开发人员只是将System.exec()调用到外部解码/编码/标签可执行文件,将中间文件写入磁盘。这有点笨重,但一旦设置正确,它就可以工作。

更复杂的选择是使用库,例如​​你找到的库。您仍然可以使用文件系统临时存储未压缩的版本。

但是,您可以通过流水线避免存储中间步骤 - 也许可以使其更快。您需要将解码器的输出作为编码器的输入,并将它们设置为两者。

这个的细节取决于API。如果你幸运的话,他们可以使用块,你也许可以在一个线程中管理它们。

如果他们使用流,你可能需要弄脏你的手,并使用线程。一个用于编码器的线程,一个用于解码器。

+0

你为什么需要*多个线程来处理流? – Durandal 2012-08-09 13:50:13

+0

@Durandal说一个API有一个同步方法'OggDecoder.decode(InputStream in,OutputStream out)',另一个具有'Mp3Encoder.encode(InputStream in,OutputStream out)'。如果你想将一个管道插入另一个,你需要线程 - 或者将中间格式存储在某个地方。 – slim 2012-08-20 09:05:32

+0

啊,我没有想太多。我现在看到你的意思。 – Durandal 2012-08-20 09:14:49