Java实现音频转码,WAV、MP3、AMR互转

1.背景

最近在集成一款产品支持语音双向对讲,首先是采集小程序的音频下发给设备端,然后可以控制设备录音生成音频链路让小程序播放。在这个过程中发现,设备除了AMR格式的音频外,其他的音频都不支持,而微信小程序有不支持AMR格式的音频文件,所以这里需要进行音频转码。

2.Java实现

2.1.引入Jar包

XML 复制代码
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-core</artifactId>
            <version>2.4.4</version>
        </dependency>

        <!-- Linux 环境 -->
        <dependency>
            <groupId>ws.schild</groupId>
            <artifactId>jave-native-linux64</artifactId>
            <version>2.4.4</version>
        </dependency>

        <!-- Windows 环境 -->
<!--        <dependency>-->
<!--            <groupId>ws.schild</groupId>-->
<!--            <artifactId>jave-native-win64</artifactId>-->
<!--            <version>2.4.4</version>-->
<!--        </dependency>-->

如果运行环境是Linux则使用:jave-native-linux64

如果运行环境是Windows则使用: jave-native-win64

2.2.封装工具方法

我们可以将源音频文件按照需求输出成:wav/mp3/amr

java 复制代码
/**
     * 音频格式处理
     * @param source 源音频文件
     * @param target 输出的音频文件
     * @param format wav/mp3/amr
     */
    public static void audioFormatConversion(File source,File target,String format) {
        try {
            //Audio Attributes
            AudioAttributes audio = new AudioAttributes();
            if(format.equals("wav")) {
                audio.setCodec("pcm_s16le");
            }else if(format.equals("mp3")) {
               audio.setCodec("libmp3lame");
            }else if(format.equals("amr")){
                audio.setCodec("libvo_amrwbenc");
            }
            audio.setBitRate(16000);
            audio.setChannels(1);
            audio.setSamplingRate(16000);
            //Encoding attributes
            EncodingAttributes attrs = new EncodingAttributes();
            attrs.setFormat(format);
            attrs.setAudioAttributes(audio);
            //Encode
            Encoder encoder = new Encoder();
            encoder.encode(new MultimediaObject(source), target, attrs);

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
相关推荐
28岁青春痘老男孩2 小时前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧2 小时前
限流的算法
java·开发语言
元Y亨H2 小时前
Nacos - 服务注册
java·微服务
Android系统攻城狮2 小时前
Android16音频之获取录制状态AudioRecord.getRecordingState:用法实例(一百七十六)
音视频·android16·音频进阶
曲莫终2 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
一心赚狗粮的宇叔2 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
奋进的芋圆3 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
计算机程序设计小李同学3 小时前
个人数据管理系统
java·vue.js·spring boot·后端·web安全
小途软件3 小时前
用于机器人电池电量预测的Sarsa强化学习混合集成方法
java·人工智能·pytorch·python·深度学习·语言模型
alonewolf_993 小时前
Spring MVC启动与请求处理全流程解析:从DispatcherServlet到HandlerAdapter
java·spring·mvc