随笔(十) mp3格式转pcm格式并调用百度语音识别
前言:
近期做帮做毕业设计,需求里面要做语音识别,识别出用户朗读的文章,将识别出来的字符串返回给用户查看。这个想到的就只有百度开放平台的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格式并调用百度语音识别相关推荐
- BD(蓝光)的LPCM格式到PCM格式的转换
最近因为一些原因在折腾这方面的事情,朋友负责DVD-LPCM的,我这边则是BD-LPCM的,我轻松了很多,因为BD的LPCM的比DVD的那是舒服了不少.. 不过开发环境限制死了在VS2010我很蛋疼, ...
- 十分钟带你玩转人工智能——调用百度AI接口实现文字转语音
调用别人的接口,实现人工智能就是站在巨人的肩膀上 打开百度AI,点这个控制台,(你要是没有注册 ,就注册一下,很简单的) 点开这个语音技术 创建一下应用 好了以后,按照这个图的步骤,免费领取一下使用次 ...
- 微信小程序录音silk文件格式转换为MP3及PCM格式的方法
关于silk文件如何转码为MP3或PCM格式的方法 介绍:最近在做微信小程序的人工客服,需要用到百度AI语音识别,但是因为微信的录音文件格式为 .silk,但是百度AI识别的格式应该为PCM或者WAV ...
- php silk文件转换pcm,微信小程序录音silk文件格式转换为MP3及PCM格式的方法
关于silk文件如何转码为MP3或PCM格式的方法 介绍:最近在做微信小程序的人工客服,需要用到百度AI语音识别,但是因为微信的录音文件格式为 .silk,但是百度AI识别的格式应该为PCM或者WAV ...
- JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据【华为云分享】
[摘要] WebRTC音频处理基础知识及实战 示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 本 ...
- JavaScript基础修炼(14)——WebRTC在浏览器中如何获得指定格式的PCM数据
我的github主页:https://github.com/dashnowords 我的新书上架啦,3天即登京东计算机编程语言类排行榜Top1!!!精选30+JavaScript库,从使用方式,设计原 ...
- 百度语音识别JAVA代码_【百度语音识别】JavaAPI方式语音识别示例MP3转PCM
[百度语音识别]JavaAPI方式语音识别示例MP3转PCM Java-API合成语音示例:http://ai.baidu.com/forum/topic/show/496727 REST-API文档 ...
- 使用FFmpeg转换mp3或wav文件为pcm格式文件
使用FFmpeg转换mp3或wav文件为pcm格式文件 由于项目开发中需要验证pcm格式音频的播放,可以使用FFmpeg进行转换 安装时这里推荐一个便捷方式,sudo apt install smpl ...
- 【Java】java转换可播放的QQ/微信高质量语音格式,mp3/wav转silk格式(高质量音频),mp3转换amr格式(低质量音频),mp3/wav转pcm(非语音格式)
1.简要 参考各个博主,发现java里mp3转silk的案例真的少,几乎没有,有的都是基于 linux系统的,所以自己研究了下就有了以下代码 tips:mp3转换silk格式,需要先转换成pcm再转换 ...
最新文章
- Logistic Regression(逻辑回归)原理及公式推导
- AI CC2019软件安装教程
- 3、Power Map—入门之楼盘分布图
- 推荐一个非常好玩的falsh游戏
- Part1: Specification of Required Functions
- 新法规将处罚垃圾邮件制造者
- ASP.NET 4.0尚未在 Web 服务器上注册 解决方法
- Linux 和 Win10 上实现端口映射
- msf-Msfvenonm生成后门木马
- 3D Motion Capture(3D运动捕捉)
- android手机home键,手机Home键在哪里?手机Home键是什么意思?
- Microsoft Edge浏览器或者电脑上其他浏览器的主页被篡改后的解决办法。(适用于联想电脑)
- 达叔的游戏框架(二) 得到其他模块的方式
- mysql salve从库设置read only 属性
- 第十一、十二、十三、十四章 网络配置管理、归档和远程复制同步文件、软件包管理、创建访问linux文件系统
- 微信小程序换行符↵转义
- 解决-笔记本安装CentOS 7 后无法连接Wi-Fi
- IC模拟版图工程师高薪进阶之路,三年实现年薪30w+
- 一个不错的免费二级域名,可以自己解析A记录 CNAME等,而且是备案的域名。
- 【ps功能精通】8.形状工具