度秘语音引擎app_带有语音识别功能的APP
实验目的:
调用讯飞api实现一个带有语音识别功能的app,
功能主要包括 1.实现语音输入转换成文本,显示在输入文本框中
2. 实现语音合成,能让文本框中的文字转换成语音输出
先跑通这样的一个demo,后续需求再慢慢添加学习。拒绝使用官方的样例
实验过程:
第一步:申请科大讯飞的api
在控制台上创建一个新应用,在里面选择 语音合成,语音拼写等服务
下载sdk (这个就不图示了,也比较简单)
吐槽:讯飞官网时常崩溃...不知道是我的浏览器问题,还是就是讯飞的官网有问题
第二步:将SDK 配置到项目环境当中。
解压sdk安装包,
将libs文件夹下的两个jar包 复制到 项目的libs
将libs文件夹下的剩余文件夹 复制到 项目的src/main下 新创建的jniLibs目录下
将assets文件夹 复制到 main目录下
最终结果如图所示
第三步:整体流程图及调用函数说明。
a. 初始化sdk,调用申请的科大讯飞appid
b. 点击识别按钮,开启语音识别模块,将输入的语音转换成文字在文本框显示
c. 点击播放按钮,开启语音合成模块,将文本框的内容做语音输出
语音识别模块:这个模块主要有两种实现方法,
一种是自带识别对话框的RecognizerDialog类,
另外一种是不带对话框识别的SpeechRecognizer类。
这里我主要使用了第一种RecognizerDialog类。
1. RecognizerDialog(上下文环境变量context,初始化监听器listener) :构造初始化一个识别对话框。
2.
RecognizerDialogListener中的
onResult(识别结果result,最后一次返回结果判定isLast)方法:
将输入的语音采用JSON格式解析,返回一个字符串。
3. 显示。
语音合成模块:SpeechSynthesizer类 用于文语转换的类
这个模块比较简单,创建对象后,设置一些参数,如发声的人,音量大小,语速快慢等
再调用startSpeaking方法实现播放,这里要传入一个SynthesizerListener 监听器对象,用途是关注合成的语音进度概况。
心得想法:
本次完成一个比较简单的app,实现了语音的输入输出,还是挺有成就感的。由本次动手实践,首先就是更加熟悉了调用api的流程(之前也调用过百度地图的api 写过一个地图app),然后是通过查阅api文档去实现语音合成和语音识别,对自我能力也是一种提高。
这次完成的内容还是比较简单,主要是想通过跑通简单的demo来建立自信,后续还要完善。
目前我想完善的两个点,一个是通过语音唤醒,另外一个是合成声音的音质(尽量不要太机械化)。
具体代码如下 (布局文件为两个按钮,一个输入文本框,这个很简单)
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText editText;
private Button bt1,bt2;
private HashMap mIatResults=new LinkedHashMap();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt1=(Button)findViewById(R.id.recognize);
bt2=(Button)findViewById(R.id.play);
editText=(EditText)findViewById(R.id.et);
bt1.setOnClickListener(this);
bt2.setOnClickListener(this);
//调用科大讯飞申请的appid 这里要填自己申请的api
SpeechUtility.createUtility(this,SpeechConstant.APPID+"=11111111");
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.recognize:
startSpeechDialog();//语音识别 把声音转成文字
break;
case R.id.play:
speekText();//语音合成 文字转声音
break;
}
}
private void speekText(){
//创建SpeechSynthesizer对象
SpeechSynthesizer speechSynthesizer=SpeechSynthesizer.createSynthesizer(this,null);
// speechSynthesizer.setParameter(SpeechConstant.VOICE_NAME,"vixyun");//发音人
speechSynthesizer.setParameter(SpeechConstant.SPEED,"50");//设置语速
speechSynthesizer.setParameter(SpeechConstant.VOLUME,"80");//设置音量
speechSynthesizer.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);//设置云端
speechSynthesizer.setParameter(SpeechConstant.TTS_AUDIO_PATH,"./sdcard/iflytek.pcm");
speechSynthesizer.startSpeaking(editText.getText().toString(),new MySynthesizeListener());
}
class MySynthesizeListener implements SynthesizerListener{
@Override
public void onSpeakBegin() {
Toast.makeText(MainActivity.this,"开始播放",Toast.LENGTH_SHORT).show();
}
@Override
public void onBufferProgress(int i, int i1, int i2, String s) {
//合成进度
}
@Override
public void onSpeakPaused() {
Toast.makeText(MainActivity.this,"暂停播放",Toast.LENGTH_SHORT).show();
}
@Override
public void onSpeakResumed() {
Toast.makeText(MainActivity.this,"继续播放",Toast.LENGTH_SHORT).show();
}
@Override
public void onSpeakProgress(int i, int i1, int i2) {
//播放进度
}
@Override
public void onCompleted(SpeechError speechError) {
if(speechError==null){
Toast.makeText(MainActivity.this,"播放完成",Toast.LENGTH_SHORT).show();
}else if(speechError!=null){
Toast.makeText(MainActivity.this,speechError.getErrorDescription(),Toast.LENGTH_SHORT).show();
}
}
@Override
public void onEvent(int i, int i1, int i2, Bundle bundle) {
}
}
private void startSpeechDialog(){
//创建RecognizerDialog对象
RecognizerDialog mDialog=new RecognizerDialog(this,new MyInitListener());
mDialog.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//设置中文
mDialog.setParameter(SpeechConstant.ACCENT,"mandarin");//普通话
mDialog.setListener(new MyRecognizerDialogListener());//回调接口
mDialog.show();//显示框 接收语音输入
}
class MyRecognizerDialogListener implements RecognizerDialogListener{
@Override
public void onResult(RecognizerResult recognizerResult, boolean b) {
//b 表示是否说完了
String result=recognizerResult.getResultString();
String text=JsonParser.parseIatResult(result);
String sn=null;
try{
JSONObject resultJson=new JSONObject(recognizerResult.getResultString());
sn=resultJson.optString("sn");
}catch (JSONException e){
e.printStackTrace();
}
mIatResults.put(sn,text);
StringBuffer resultBuffer =new StringBuffer();
for(String key :mIatResults.keySet()){
resultBuffer.append(mIatResults.get(key));
}
editText.setText(resultBuffer.toString());//设置输入框的文本
editText.setSelection(editText.length());//光标定位到末尾
}
@Override
public void onError(SpeechError speechError) {}
}
class MyInitListener implements InitListener{
@Override
public void onInit(int i) {
if(i!= ErrorCode.SUCCESS) {
Toast.makeText(MainActivity.this, "初始化失败", Toast.LENGTH_SHORT).show();
}
}
}
// /**
// * 语音识别 另外一种识别方法
// */
// private void startSpeech(){
// //语音识别器对象,听写、语法识别功能 把人的自然语言音频数据转换为文本数据
// SpeechRecognizer SR=SpeechRecognizer.createRecognizer(this,null);
// SR.setParameter(SpeechConstant.DOMAIN,"iat");//默认
// SR.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//设置中文
// SR.setParameter(SpeechConstant.ACCENT,"mandarin");//设置普通话
// SR.startListening(mRecoListener);
// }
// //听写监听
// private RecognizerListener mRecoListener=new RecognizerListener() {
// //听写结果回调接口
// //通过onResults接口多次返回结果,完整的识别内容是多次结果的累加
// @Override
// public void onResult(RecognizerResult recognizerResult, boolean b) {
// Log.d("MainActivity.this",recognizerResult.getResultString());
// Toast.makeText(MainActivity.this,recognizerResult.getResultString(),Toast.LENGTH_SHORT).show();
// }
// @Override
// public void onVolumeChanged(int i, byte[] bytes) {
//
// }
//
// @Override
// public void onBeginOfSpeech() {
//
// }
//
// @Override
// public void onEndOfSpeech() {
//
// }
// @Override
// public void onError(SpeechError speechError) {
//
// }
//
// @Override
// public void onEvent(int i, int i1, int i2, Bundle bundle) {
//
// }
// };
}
Josn解析
public class JsonParser {
public static String parseIatResult(String json){
StringBuffer ret=new StringBuffer();
try {
JSONTokener tokener=new JSONTokener(json);
JSONObject joResult=new JSONObject(tokener);
JSONArray words=joResult.getJSONArray("ws");
for(int i=0;i
JSONArray items=words.getJSONObject(i).getJSONArray("cw");
JSONObject obj=items.getJSONObject(0);
ret.append(obj.getString("w"));
}
} catch (JSONException e) {
e.printStackTrace();
}
return ret.toString();
}
}
度秘语音引擎app_带有语音识别功能的APP相关推荐
- 度秘语音引擎app_语音机器人哪家强 度秘/小冰/Siri/小娜横向评测
关于智能语音机器人,想必大家都不陌生,它们在某种程度上给我们带来了极大的便利. 近日,百度推出了基于百度人工智能的手机助理产品--度秘.笔者也进行了体验,感觉不错,就顺带连着微软小冰.小娜和苹果Sir ...
- 度秘语音引擎app_「资源」9个(实时)语音转文字APP分享(推荐收藏)
" 做会议记录.看无字幕网课再也不用担心,解放双手,提高效率." 随着语音转文字技术的发展,我们记录会议.上课内容等有了更好的方式. 实时语音转文字实现边听边看,并且还可回看转译记 ...
- 度秘语音引擎app_三款语音写作App的选择
最近,想开始尝试语音的写作方式.这样,对于一些题材(特别是小说类)的写作,在节省很多的码字时间的同时,也促使我可以利用其它的时间进行写作. 开始在网上找了一些可以实现我需求的APP.我的需求主要包括以 ...
- 度秘会重新定义语音助理吗?跟Siri不同在哪里?
就在苹果秋季发布会的前一天,近20家中国科技企业在北京召开发布会,其中最受关注的是一年一度的"百度世界".百度世界大会对标苹果的WWDC或Google I/O,向开发者.合作伙伴和 ...
- Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容。通过plus.speech可获取语音输入管理对象
Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容.通过plus.speech可获取语音输入管理对象. 语音输入接口可使得网页开发人员能快速调用设备的麦克风进 ...
- iOS中 语音识别功能/语音转文字教程具体解释 韩俊强的博客
前言:近期研究了一下语音识别,从百度语音识别到讯飞语音识别:首先说一下个人针对两者的看法,讯飞毫无疑问比較专业.识别率也非常高真对语音识别是比較精准的,可是非常多开发人员和我一样期望离线识别,而讯飞离 ...
- 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索。
全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓调用系统语音识别功能全解(谷歌语音服务):获取识别结果,使用语音识别进行搜索. 首先要添加权限 <uses-permission andro ...
- Android App开发语音处理之系统自带的语音引擎、文字转语音、语音识别的讲解及实战(超详细 附源码)
需要源码请点赞关注收藏后评论区留下QQ~~~ 一.系统自带的语音引擎 语音播报的本质是将书面文字转换成自然语言的音频流,这个转换操作被称作语音合成,又称TTS(从文本到语音)在转换过程中,为了避免机械 ...
- 华为手机计算机怎么语音算术,华为自带的语音识别功能太实用了!这样操作,3秒语音变文字...
原标题:华为自带的语音识别功能太实用了!这样操作,3秒语音变文字 如果用过华为手机的小伙伴肯定都知道,华为手机有很多实用的实用的功能,对于商务人士来说,特别有用,例如:无线投屏.智能识物等功能,又方便 ...
最新文章
- Java项目:酒店管理系统(java+SSM+jsp+mysql+maven)
- 基于MTCNN的人脸自动对齐技术原理及其Tensorflow实现测试
- 《智能网联汽车技术路线图 2.0》重磅发布
- CSharpGL(19)用glReadPixels把渲染的内容保存为PNG图片(C#)
- 【计组实验】P3 Verilog多周期处理器开发 MIPS指令集
- 基于SOA的银行系统架构
- mysql 重复字段查询及排除重复值
- 系统架构师学习笔记-操作系统(三)
- ZZULIOJ 1123: 最佳校友
- 在一个C程序中,main()函数可以放在哪?
- AWS 人工智能黑客马拉松正式开启!用实力演绎科技向善!
- java 对象排重_现代化的 Java (八)——重说对象序列化
- 设计模式之-模版模式(Template Pattern)
- python调用dll时路径问题_使用ctypes(python)在带括号的路径中加载dll时出错
- 关于总时差和自由时差的作用及理由
- php mocking,php – Mocking Static Eloquent Models方法包括find()
- android模拟器安装
- 小猫爪:PMSM之FOC控制07-有传感器的速度环
- python多线程下载小姐姐图片
- 半导体功率器件静态参数测试仪系统 能测 IGBT. Mosfet. Diode. BJT......