我需要WAV格式的音频文件来建立某些功能,但是如果我从客户端到服务器获取AMR格式的音频文件,则需要将其转换为WAV格式。现在,我正在使用JAVE库文件将其他格式的音频媒体文件转换为WAV格式。一切正常,但是当我收到AMR音频文件时,它会引发异常,例如“it.sauronsoftware.jave.EncoderException:持续时间:N / A,比特率:N / A”,
我已经在下面发布了我的代码...
/**
* method to convert all media format to wav format
*
* @param fileLoc
* @return
*/
public static String universalContentToWav(String fileLoc) {
String location = SoundWaveConstants.AUDIO_LOCATION + new Date().getTime() + ".wav";
AudioAttributes audio = new AudioAttributes();
audio.setCodec("pcm_s16le");
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("wav");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
try {
encoder.encode(new File(fileLoc), new File(location), attrs);
System.out.println("done");
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
我正在使用http://www.sauronsoftware.it/projects/jave/的Java库文件。有什么办法可以将AMR文件更改为WAV或需要在我的代码中进行一些更改。提前致谢。
最佳答案
jave项目太旧,无法处理某些异常情况。我创建了一个项目来解决EncoderException。您唯一需要做的就是包含Maven依赖项:
<dependency>
<groupId>com.github.dadiyang</groupId>
<artifactId>jave</artifactId>
<version>1.0.2</version>
</dependency>
并调用AudioUtils.amrToWav方法:
File source = new File("testAudio.amr");
File wavTarget = new File("testAudio.wav");
it.sauronsoftware.jave.AudioUtils.amrToWav(source, wavTarget);
该项目包含适用于Linux / Mac / Windows的ffmpeg可执行文件,如果提供的exe与您的平台不兼容,则可以将ffmpeg.home设置为系统属性,以告诉您自己的ffmpeg可执行文件在哪里,例如:
System.setProperty("ffmpeg.home", "/usr/local/bin/")
顺便说一下,为了兼容,我项目的软件包名称与jave相同,为避免软件包冲突,请删除sauronsoftware jave的jar。
项目地点:https://github.com/dadiyang/jave
英文文件:https://github.com/dadiyang/jave/blob/master/README-en.md
关于java - 使用Java库将音频AMR转换为WAV,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37050976/