微信小程序> 小程序进行语音识别(JAVAMP3转PCM)

小程序进行语音识别(JAVAMP3转PCM)

浏览量:3508 时间: 来源:qq_15801963

    公司最近有一个小程序项目需要使用语音识别功能,初步技术方案是:小程序录音-上传录音文件到后端服务器,后端服务器调用百度AI语音接口获取识别结果并返回给小程序。

   中间遇到一个小问题:小程序的录音文件格式只能是MP3或者AAC,而百度语音接口所能接受的音频文件格式为PCM,WAV,AMR 这样就十分尴尬了,最后确定方案,在后端将接收的MP3文件转换成PCM文件

   在网上看了不少文章,实际运行时会出现以下错误:

错误1   could not get audio input stream from input stream

出现这个错误的原因是没有引入MP3解析库,我们引入之,GRADLE 的引入配置

// https://mvnrepository.com/artifact/com.googlecode.soundlibs/mp3spi
compile group: 'com.googlecode.soundlibs', name: 'mp3spi', version: '1.9.5.4'

MAVEN 的引入配置

!-- https://mvnrepository.com/artifact/com.googlecode.soundlibs/mp3spi --
dependency
    groupIdcom.googlecode.soundlibs/groupId
    artifactIdmp3spi/artifactId
    version1.9.5.4/version
/dependency
 

引入过后,发现错误1解决了,除了了下面的错误2

错误2   java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED from MPEG1L3 44100.0 Hz, unknown bits per sample, stereo, unknown frame size, 38.28125 frames/second

咋一看是提示不支持此类型格式转换,网上寻找良久,发现是网上找的进行格式转换的源码有问题,有很多参数都没有设置,所有才会报这个错误,我们更改之,大功告成,识别成功。

下面是给出更改前的源码(错误源码

  public byte[] mp3Convertpcm(InputStream mp3Stream) throws Exception {        // 原MP3文件转AudioInputStream        AudioInputStream mp3audioStream = AudioSystem.getAudioInputStream(mp3Stream);        // 将AudioInputStream MP3文件 转换为PCM AudioInputStream        AudioInputStream pcmaudioStream = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED,                mp3audioStream);        byte[] pcmBytes = IOUtils.toByteArray(pcmaudioStream);        pcmaudioStream.close();        mp3audioStream.close();        return pcmBytes;    }

更改后的源码(正确源码

  public byte[] mp3Convertpcm(InputStream mp3Stream) throws Exception {        // MP3转AudioInputStream         InputStream bufferedIn = new BufferedInputStream(mp3Stream);    AudioInputStream mp3audioStream = AudioSystem.getAudioInputStream(bufferedIn);        //将AudioInputStream MP3文件 转换为PCM    AudioFormat baseFormat = mp3audioStream.getFormat();    AudioFormat targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16,                baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);        AudioInputStream pcmaudioStream = AudioSystem.getAudioInputStream(targetFormat,mp3audioStream);    byte[] pcmBytes = IOUtils.toByteArray(pcmaudioStream);    pcmaudioStream.close();    mp3audioStream.close();    return pcmBytes;    }

 

小程序

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎