2011-02-14 48 views
5

我用Java挣扎了很多,但无法将Java .wav的工作示例与.mp3转换器结合在一起。该转换器将用于Java小应用程序,因此它应该仅依赖于使用纯Java编写的库,而不需要基础的C代码调用。有没有任何纯java的方式将.wav转换为.mp3?

任何人都可以提供一个完整的工作示例吗?

谢谢

+0

那么,你需要一个.way解码器,并用纯Java编写的MP3播放编码器。有这样的事吗?我对此表示怀疑。 – delnan 2011-02-14 22:19:40

+0

[Java中的MP3编码]的可能重复(http://stackoverflow.com/questions/316612/mp3-encoding-in-java) – 2011-02-14 23:00:33

+0

关闭,虽然这里的答案更有用 – 2011-02-15 08:26:32

回答

3

如果速度对你来说不重要,可以采取任何c实现MP3(例如lame)并尝试使用NestedVM编译为Java字节码。它会很慢(就像模拟器中的模拟器),但它应该工作。

而且它应该比尝试将MP3库移植到纯Java上的工作少。

0

另一个潜在的相关项目是jffmpeg。这显然是针对使用本机和Java编解码器的各种格式的JMF支持。从'格式'页面看,他们在纯Java方面取得了重大进展。不幸的是,这个项目已经过去了。

这不会在短期内直接帮助OP。但是如果他或其他人长期热衷于使用纯Java编解码器,请考虑参与其中。

0

见SourceForge上的这个链接http://sourceforge.net/projects/jump3r/files/

它的JAR唯一的(没有源代码),但它在PC和Android上工作,但没有必要在作者发布http://pure-java-mp3-encoder.blogspot.com.au/

说明我得到了它通过仅使用jump3r-1.0.3.jar文件作为库来工作,并且实例化了 mp3.Main然后使用被称为mp3.run() 例如我的Android代码的一部分

String[] mp3Args = {"--preset","standard", 
      "-q","0", 
      "-m","s", 
      Environment.getExternalStorageDirectory().getPath()+"/myfile.wav", 
      Environment.getExternalStorageDirectory().getPath()+"/myfile.mp3"}; 
    Main m = new mp3.Main(); 
    try 
    { 
     m.run(mp3Args); 
    } 
    catch(Exception e) 
    { 
     System.out.println("ERROR processing MP3 " + e);// Some bug in Android seems to cause error BufferedOutputSteam is Closed. But it still seems to work OK. 
    } 

我怀疑这将有可能直接调用LAME编码器传送数据等的缓冲器,但是对于这个Java版本的确切API未记录,这将需要一些研究

2

我使用Jump3r将wav转换为我的项目中的mp3,因为IE11的html5播放器无法播放wav文件。

Jump3r是发现在tomcat servlet中运行的最简单的解决方案。由于安全经理的原因,我无法整合像jave这样的其他解决方案...... Jump3r是一个纯Java程序。

Jump3r可在Maven仓库(https://mvnrepository.com/artifact/de.sciss/jump3r/1.0.4)和来源可在github上(https://github.com/Sciss/jump3r

要转换的文件,你应该调用的主要方法(在​​下面的代码,我使用内嵌版本如果有必要赶上的主要方法/抛出IOException)

private void convertWavFileToMp3File(File source, File target) throws IOException { 
    String[] mp3Args = { "--preset","standard", 
     "-q","0", 
     "-m","s", 
     source.getAbsolutePath(), 
     target.getAbsolutePath() 
    }; 
    (new Main()).run(mp3Args); 
}