java - 使用 java 库将音频 AMR 转换为 WAV

标签 java jakarta-ee audio wav amr

我需要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/

相关文章:

java - 删除 XML 字符元素中重复的换行符/制表符/空格

java - 反序列化时如何获取多态类的java代码中@JsonTypeInfo中定义的属性?

java - 如何让 ContainerRequestFilter 过滤多个注释,但在 Java 中一次过滤 1 个注释?

python - 使用 matplotlib 和 python 中的多处理功能保存多个图像(~50k)

swift - 检查是否正在使用音频输入设备 (macOS) (Swift)

java - 使用级联将数据集分成 block

java - Kotlin从xml转换为具有样式的html

multithreading - 从 servlet 内的线程访问请求对象

java - JAXB 注释 - Marshall List<String[]>

java - 在播放期间更改样本的属性