现有个需求需要微信小程序发出的mp3语音文件转amr格式到终端设备,在网上查了一些方式又说用com.github.dadiyang的jave包转换在linux有问题的,经过实践知识音频编码正确设置就可以正常转换代码如下:
public static void mp3ToAmrUtil(File source, File target){
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libopencore_amrnb");
audio.setBitRate(12200);//比特率
audio.setChannels(1);//声道;1单声道,2立体声
audio.setSamplingRate(8000);//采样率(重要!!!)
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("amr");
attrs.setAudioAttributes(audio);
Mp3ToAmrEncoder encoder = new Mp3ToAmrEncoder();
try {
encoder.encode(source, target, attrs);
} catch (EncoderException e) {
log.error("mp3ToAmrUtil is error source={}, target", source.getAbsolutePath(), target.getAbsolutePath(), e);
throw new IllegalArgumentException(ErrorCode.EJ0000000.getCode(), e.getMessage());
}
}
有个坑直接用包中的encoder会一直抛异常,因此集成包中encoder 来解决,如下:
public class Mp3ToAmrEncoder extends Encoder {
@Override
protected void processErrorOutput(EncodingAttributes attributes, BufferedReader errorReader, File source, EncoderProgressListener listener) throws EncoderException, IOException {
try {
String line;
while ((line = errorReader.readLine()) != null) {
log.info(line);
}
} catch (Exception exp) {
log.error("file convert error message process failed. ", exp);
}
}
}