1.背景
最近在集成一款产品支持语音双向对讲,首先是采集小程序的音频下发给设备端,然后可以控制设备录音生成音频链路让小程序播放。在这个过程中发现,设备除了AMR格式的音频外,其他的音频都不支持,而微信小程序有不支持AMR格式的音频文件,所以这里需要进行音频转码。
2.Java实现
2.1.引入Jar包
<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
/*** 音频格式处理* @param source 源音频文件* @param target 输出的音频文件* @param format wav/mp3/amr*/public static void audioFormatConversion(File source,File target,String format) {try {//Audio AttributesAudioAttributes 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 attributesEncodingAttributes attrs = new EncodingAttributes();attrs.setFormat(format);attrs.setAudioAttributes(audio);//EncodeEncoder encoder = new Encoder();encoder.encode(new MultimediaObject(source), target, attrs);} catch (Exception ex) {ex.printStackTrace();}}