前言:

近期做帮做毕业设计,需求里面要做语音识别,识别出用户朗读的文章,将识别出来的字符串返回给用户查看。这个想到的就只有百度开放平台的api了。

思路:

① 前往百度开放平台拿到APP_ID,API_KEY,SECRET_KEY

② 用户本地录音后,将MP3或其他格式文件上传到服务器指定接口。

③ 服务器端将MP3格式转换成pcm格式(百度语音推荐格式)

④ 服务器将pcm格式文件发送到百度开放平台接口

⑤ 接收回馈信息,存入数据库,并返回给用户

准备工作:

pom.xml文件:

<!-- 文件格式转换包 -->
        <dependency>
            <groupId>com.googlecode.soundlibs</groupId>
            <artifactId>mp3spi</artifactId>
            <version>1.9.5.4</version>
        </dependency>
        <!-- json转换工具包 -->
        <dependency>
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
            <version>20180130</version>
        </dependency>

<!-- 百度api工具 -->
        <dependency>
            <groupId>com.baidu.aip</groupId>
            <artifactId>java-sdk</artifactId>
            <version>4.7.0</version>
        </dependency>

开始开发:

import com.baidu.aip.speech.AipSpeech;public class AudioSingleton {/*** 百度开放平台获取*/private static final String APP_ID = "你的APP_ID";private static final String API_KEY = "你的API_KEY";private static final String SECRET_KEY = "你的SECRET_KEY";/*** 单例模式,jvm保证只生成一个单例*/public static class AudioSingletonInstance {public static  AipSpeech aipSpeech = new AipSpeech(APP_ID,API_KEY,SECRET_KEY);}/*** 获取AipSpeech对象* @return*/public static AipSpeech getInstance(){return AudioSingletonInstance.aipSpeech;}
}

用于转换的Bean

import lombok.Data;@Data
public class AudioBean {/*** 错误信息*/private String err_msg;/*** 标识*/private String sn;/*** 错误码*/private Integer err_no;/*** 结果*/private String result;
}
package com.english.listening.utils;import com.baidu.aip.speech.AipSpeech;
import com.english.listening.exception.CheckException;
import com.english.listening.result.AudioBean;
import javazoom.spi.mpeg.sampled.file.MpegAudioFileReader;
import org.json.JSONObject;import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.io.File;
import java.io.IOException;public class AudioUtils {/*** @param mp3FilePath mp3文件路径* @param pcmFilePath 保存pcm文件路径*/public static void mp3ToPcm(String mp3FilePath, String pcmFilePath) {//获取MP3文件的流AudioInputStream audioInputStream = getPcmAudioInputStream(mp3FilePath);try {//生成pcm文件AudioSystem.write(audioInputStream, AudioFileFormat.Type.WAVE, new File(pcmFilePath));} catch (IOException e) {e.printStackTrace();}}private static AudioInputStream getPcmAudioInputStream(String mp3filepath) {File mp3 = new File(mp3filepath);AudioInputStream audioInputStream = null;AudioFormat targetFormat = null;AudioInputStream in = null;try {//读取音频文件的类MpegAudioFileReader mp = new MpegAudioFileReader();in = mp.getAudioInputStream(mp3);AudioFormat baseFormat = in.getFormat();//设定输出格式为pcm格式的音频文件targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16,baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);//输出到音频audioInputStream = AudioSystem.getAudioInputStream(targetFormat, in);} catch (Exception e) {e.printStackTrace();} finally {/*** 释放资源*/free(audioInputStream, in);}return audioInputStream;}/*** 关闭流*/private static void free(AudioInputStream audioInputStream, AudioInputStream in) {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}if (audioInputStream != null) {try {audioInputStream.close();} catch (IOException e) {e.printStackTrace();}}}/*** 检查返回消息** @param pcm*/public static void CheckAudio(AudioBean pcm) {if (pcm.getErr_no() == 3301) {throw new CheckException("语音质量太差,请重新录音");}if (pcm.getErr_no() == 3309) {throw new CheckException("音频数据问题,请重新录音");}}/*** 语音识别返回文本** @param pcmPath* @param voidetype* @return*/public static AudioBean getBaiduMessage(String pcmPath, String voidetype) {AipSpeech instance = AudioSingleton.getInstance();instance.setConnectionTimeoutInMillis(2000);instance.setSocketTimeoutInMillis(6000);JSONObject asr = instance.asr(pcmPath, voidetype, 16000, null);AudioBean audioBean = JsonUtil.jsonToObject(asr.toString(), AudioBean.class);return audioBean;}public static void main(String[] args) {try {//百度开放平台下载的pcm文件String pcmPath = "E:\\16k.pcm";//随便找的MP3,用于格式转换AudioUtils.mp3ToPcm("E:\\60shongbao64.mp3", "E:\\60shongbao64.pcm");//讲返回格式转成beanAudioBean pcm = getBaiduMessage(pcmPath, "pcm");System.out.println(pcm);} catch (Exception e) {e.printStackTrace();}}}

这个不是正式服务端测试,直接用main方法调用返回。

测试:

总结:

代码写的很烂,没有很好整理,不过暂时实现就好,不过语音识别有点无语,就是经常说啥语音质量太差,没办法。JsonUtil工具类需要找之前的博客吧,这里接不列出。CheckException这个类是自定义异常,可以删掉的。

程序人生,与君共勉~!

随笔(十) mp3格式转pcm格式并调用百度语音识别相关推荐

  1. BD(蓝光)的LPCM格式到PCM格式的转换

    最近因为一些原因在折腾这方面的事情,朋友负责DVD-LPCM的,我这边则是BD-LPCM的,我轻松了很多,因为BD的LPCM的比DVD的那是舒服了不少.. 不过开发环境限制死了在VS2010我很蛋疼, ...

  2. 十分钟带你玩转人工智能——调用百度AI接口实现文字转语音

    调用别人的接口,实现人工智能就是站在巨人的肩膀上 打开百度AI,点这个控制台,(你要是没有注册 ,就注册一下,很简单的) 点开这个语音技术 创建一下应用 好了以后,按照这个图的步骤,免费领取一下使用次 ...

  3. 微信小程序录音silk文件格式转换为MP3及PCM格式的方法

    关于silk文件如何转码为MP3或PCM格式的方法 介绍:最近在做微信小程序的人工客服,需要用到百度AI语音识别,但是因为微信的录音文件格式为 .silk,但是百度AI识别的格式应该为PCM或者WAV ...

  4. php silk文件转换pcm,微信小程序录音silk文件格式转换为MP3及PCM格式的方法

    关于silk文件如何转码为MP3或PCM格式的方法 介绍:最近在做微信小程序的人工客服,需要用到百度AI语音识别,但是因为微信的录音文件格式为 .silk,但是百度AI识别的格式应该为PCM或者WAV ...

  5. JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据【华为云分享】

    [摘要] WebRTC音频处理基础知识及实战 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 本 ...

  6. JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据

    我的github主页:https://github.com/dashnowords 我的新书上架啦,3天即登京东计算机编程语言类排行榜Top1!!!精选30+JavaScript库,从使用方式,设计原 ...

  7. 百度语音识别JAVA代码_【百度语音识别】JavaAPI方式语音识别示例MP3转PCM

    [百度语音识别]JavaAPI方式语音识别示例MP3转PCM Java-API合成语音示例:http://ai.baidu.com/forum/topic/show/496727 REST-API文档 ...

  8. 使用FFmpeg转换mp3或wav文件为pcm格式文件

    使用FFmpeg转换mp3或wav文件为pcm格式文件 由于项目开发中需要验证pcm格式音频的播放,可以使用FFmpeg进行转换 安装时这里推荐一个便捷方式,sudo apt install smpl ...

  9. 【Java】java转换可播放的QQ/微信高质量语音格式,mp3/wav转silk格式(高质量音频),mp3转换amr格式(低质量音频),mp3/wav转pcm(非语音格式)

    1.简要 参考各个博主,发现java里mp3转silk的案例真的少,几乎没有,有的都是基于 linux系统的,所以自己研究了下就有了以下代码 tips:mp3转换silk格式,需要先转换成pcm再转换 ...

最新文章

  1. Logistic Regression(逻辑回归)原理及公式推导
  2. AI CC2019软件安装教程
  3. 3、Power Map—入门之楼盘分布图
  4. 推荐一个非常好玩的falsh游戏
  5. Part1: Specification of Required Functions
  6. 新法规将处罚垃圾邮件制造者
  7. ASP.NET 4.0尚未在 Web 服务器上注册 解决方法
  8. Linux 和 Win10 上实现端口映射
  9. msf-Msfvenonm生成后门木马
  10. 3D Motion Capture(3D运动捕捉)
  11. android手机home键,手机Home键在哪里?手机Home键是什么意思?
  12. Microsoft Edge浏览器或者电脑上其他浏览器的主页被篡改后的解决办法。(适用于联想电脑)
  13. 达叔的游戏框架(二) 得到其他模块的方式
  14. mysql salve从库设置read only 属性
  15. 第十一、十二、十三、十四章 网络配置管理、归档和远程复制同步文件、软件包管理、创建访问linux文件系统
  16. 微信小程序换行符↵转义
  17. 解决-笔记本安装CentOS 7 后无法连接Wi-Fi
  18. IC模拟版图工程师高薪进阶之路,三年实现年薪30w+
  19. 一个不错的免费二级域名,可以自己解析A记录 CNAME等,而且是备案的域名。
  20. 【ps功能精通】8.形状工具

热门文章

  1. 在Google地图中显示行政区边界
  2. 黑客工具之AppScan下载安装,超详细使用教程
  3. 【元胞自动机】元胞自动机交通流模拟仿真【含Matlab源码 1252期】
  4. 最好的.NetCore代码生成器
  5. JavaWeb项目打包成桌面程序,内嵌浏览器、tomcat、jre、mysql,实现一键安装
  6. JDK8新特性(三):集合之 Stream 流式操作
  7. VC操作excel表格
  8. 【Python学习】自定义对象转JSON
  9. 得物小程序最新版算法
  10. 杰理之带内杂散超标【篇】