使用Java库将音频AMR转换为WAV

3

我需要WAV格式的音频文件来实现一些功能,但如果客户端传输AMR格式的音频文件到服务器,我需要将其转换为WAV格式。现在我正在使用JAVE库文件将其他格式的音频媒体文件转换为WAV格式。一切都很顺利,但当我接收AMR音频文件时,它会抛出异常,例如"it.sauronsoftware.jave.EncoderException:Duration:N / A,bitrate: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或者需要修改我的代码?提前感谢。


公共it.sauronsoftware.jave.MultimediaInfo getInfo告诉您输入文件的什么信息? - gfelisberto
@gfelisberto 感谢您的回复 :). Multimediainfo getInfo 返回值为 "it.sauronsoftware.jave.MultimediaInfo (format=amr, duration=-1, video=null, audio=null)",因此我认为编码器无法读取 AMR 文件。 - chellapandi k
1个回答

1
这个Java项目过于陈旧,无法处理某些异常情况。我创建了一个项目来解决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/")

顺便提一下,为了兼容性,我的项目包名与java相同,为避免包冲突,请删除sauronsoftware jave的jar文件。
项目网站:https://github.com/dadiyang/jave 英文文档:https://github.com/dadiyang/jave/blob/master/README-en.md

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接