因为项目中用到了阿里的语音识别技术,但是返回的是PCM原始数据,这里就需要将PCM转为AMR的音频格式,这里将其中遇到的问题记录下来,有需要的小伙伴们可以参考一下。
这里的实现思路先大致说一下,将PCM先转为WAV,然后再由WAV转为AMR。
话不多说,直接上代码。
我们先PCM转为WAV,要注意的是16k的PCM一定要对采样率进行向下采样成8kPCM之后,再将PCM进行转换成WAV,否则后面转出来的8k的AMR就一塌糊涂了!!!重新采样用的是三方库JSSRC,我这里是对JSSRCResampler进行了一些调整,直接将源码改成了16k转8k的。
public void pcmToWav(String inFilename, String outFilename, PcmToWavTransformListener listener) {
FileOutputStream out;
long totalAudioLen;//总录音长度
long totalDataLen;//总数据长度
long longSampleRate = 8000;
int channels = 1;
long byteRate = 8 * longSampleRate * channels / 8;
byte[] data = new byte[mBufferSize];
try {
FileInputStream inputStream = new FileInputStream(inFilename);
totalAudioLen = input