基于讯飞语音云的Android语音识别与朗读
语音云开放平台是科大讯飞股份有限公司旗下的全球首个面向互联网开发者的智能语音交互平台,为开发者免费开放语音识别、语音合成、智能语义等服务。自2010年首度在北京香格里拉饭店发布以来,吸引了各个领域的优秀APP的加盟,目前已经为数以亿计的终端提供了智能语音交互的服务。本文主要讲述其两个比较常用的功能,语音识别与文本朗读,这两个功能可以方便地嵌入各开发者的应用中。
1.搭建开发环境
1.1 在Eclipse中建立你的Android工程,如MyiFly。
1.2 将Msc.jar、Sunflower.jar以及armeabi复制到新建工程的libs目录中,并将导进来的jar包Build Path(如下图示)。
1.3 将所需的资源文件放进assets文件夹中(如下图所示)。
1.4 在AndroidManifest.xml配置如下权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1.5 在application节点下配置meta-data,value值为自己在讯飞语音云的应用秘钥
(开发者可到讯飞语音云平台注册自己的账号和应用http://open.voicecloud.cn/)
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="IFLYTEK_APPKEY"
android:value="myappkey" />
<activity
android:name=".MainActivity"
android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden |navigation|orientation|screenLayout|fontScale"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
2.应用界面
2.1 该界面很简单,只是一个EditText和两个Button,当用户点击识别时,即可将用户的讲话转成文字并显示在 EditText下。当用户在EditText输好文本点击朗读时即可将文本转为语音
2.2布局代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.myifly.MainActivity" >
<EditText
android:id="@+id/content_rec"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="识别内容" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:onClick="startRec"
android:text="识别" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/button2"
android:layout_alignLeft="@+id/button2"
android:layout_alignParentRight="true"
android:onClick="read"
android:text="朗读" />
</RelativeLayout>
3.主要代码
3.1初始化,验证用户秘钥,// 创建语音听写对象,听写UI和音合成对象
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
//用于验证应用的key
SpeechUtility.createUtility(MainActivity.this, "appid=548ee912");
// 创建语音听写对象
mIat = SpeechRecognizer.createRecognizer(this, mInitListener);
// 初始化听写Dialog,如果只使用有UI听写功能,无需创建SpeechRecognizer
// 创建语音听写UI
iatDialog = new RecognizerDialog(this, mInitListener);
// 创建语音合成对象
mTts = SpeechSynthesizer.createSynthesizer(this, mInitListener);
mToast = Toast.makeText(this, "", Toast.LENGTH_SHORT);
mResultText = ((EditText) findViewById(R.id.content_rec));
}
// mInitListener为验证用户秘钥的回调方法
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "SpeechRecognizer init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失败,错误码:" + code);
}
}
};
3.2 识别
public void startRec(View view) {
mResultText.setText(null);
setParam();
boolean isShowDialog = true;
if (isShowDialog) {
// 显示听写对话框
iatDialog.setListener(recognizerDialogListener);
iatDialog.show();
// showTip("begin");
} else {
// 不显示听写对话框
ret = mIat.startListening(recognizerListener);
if (ret != ErrorCode.SUCCESS) {
// showTip("听写失败,错误码:" + ret);
} else {
// showTip("begin");
}
}
}
//注意,在使用语音听写对象要为其设置好参数,在setParam()方法中进行
public void setParam() {
// 清空参数
mIat.setParameter(SpeechConstant.PARAMS, null);
// 设置语言
mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");
// 设置语言区域
mIat.setParameter(SpeechConstant.ACCENT, "mandarin");
// 设置语音前端点
mIat.setParameter(SpeechConstant.VAD_BOS, "4000");
// 设置语音后端点
mIat.setParameter(SpeechConstant.VAD_EOS, "1000");
// 设置标点符号 1为有标点 0为没标点
mIat.setParameter(SpeechConstant.ASR_PTT, "0");
// 设置音频保存路径
mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH,
Environment.getExternalStorageDirectory()
+ "/iflytek/wavaudio.pcm");
}
当用户点击识别时会弹出下图UI
/**
* 听写UI监听器,用户倾听用于语音,在onResult方法中获得服务器返回的识别结果
*/
private RecognizerDialogListener recognizerDialogListener = new RecognizerDialogListener() {
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
mResultText.append(text);
mResultText.setSelection(mResultText.length());
}
/**
* 识别回调错误.
*/
public void onError(SpeechError error) {
showTip(error.getPlainDescription(true));
}
};
本文用UI返回结果所以将isShowDialog 设为 true,如果你不用的话就使用下面的识别方式
/**
* 听写监听器。
*/
private RecognizerListener recognizerListener = new RecognizerListener() {
@Override
public void onBeginOfSpeech() {
showTip("开始说话");
}
@Override
public void onEndOfSpeech() {
showTip("结束说话");
}
@Override
public void onResult(RecognizerResult results, boolean isLast) {
String text = JsonParser.parseIatResult(results.getResultString());
mResultText.append(text);
mResultText.setSelection(mResultText.length());
if (isLast) {
// TODO 最后的结果
}
}
@Override
public void onVolumeChanged(int volume) {
showTip("当前正在说话,音量大小:" + volume);
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
}
@Override
public void onError(SpeechError arg0) {
// TODO Auto-generated method stub
}
};
3.3朗读功能
public void read(View view) {
String text = mResultText.getText().toString();
// 设置参数
setParam2();
//朗读
int code = mTts.startSpeaking(text, mTtsListener);
if (code != ErrorCode.SUCCESS) {
if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {
// 未安装则跳转到提示安装页面
} else {
showTip("语音合成失败,错误码: " + code);
}
}
}
setParam2()为语音合成对象设置如下参数
/**
* 参数设置
*
* @param param
* @return
*/
private void setParam2() {
// 设置合成
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
// 设置发音人
mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);
// 设置语速
mTts.setParameter(SpeechConstant.SPEED, "50");
// 设置音调
mTts.setParameter(SpeechConstant.PITCH, "50");
// 设置音量
mTts.setParameter(SpeechConstant.VOLUME, "50");
// 设置播放器音频流类型
mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
}
mTtsListener为合成语音对象回调监听,监听内容看监听方法名称即可知道
/**
*
*/
private SynthesizerListener mTtsListener = new SynthesizerListener() {
@Override
public void onSpeakBegin() {
showTip("开始播放");
}
@Override
public void onSpeakPaused() {
showTip("暂停播放");
}
@Override
public void onSpeakResumed() {
showTip("继续播放");
}
@Override
public void onBufferProgress(int percent, int beginPos, int endPos,
String info) {
mPercentForBuffering = percent;
showTip(String.format(getString(R.string.tts_toast_format),
mPercentForBuffering, mPercentForPlaying));
}
@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
mPercentForPlaying = percent;
showTip(String.format(getString(R.string.tts_toast_format),
mPercentForBuffering, mPercentForPlaying));
}
@Override
public void onCompleted(SpeechError error) {
if (error == null) {
showTip("播放完成");
} else if (error != null) {
showTip(error.getPlainDescription(true));
}
}
@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
}
};
4. 结语
至此,整个讯飞语音云的语音识别与文本朗读功能介绍完毕,希望对大家有帮助。
5.MyiFly下载链接 http://download.csdn.net/detail/ninggezhenbang/8271675
基于讯飞语音云的Android语音识别与朗读相关推荐
- 讯飞语音包实现Android语音识别
1.先要到讯飞官网去注册并且获取相对应的appid,申请地址:http://www.xfyun.cn/ 2 将开发工具包中libs目录下的Msc.jar和armeabi复制到Android工程的lib ...
- 真人语音朗读软件_讯飞语音云助力移动“和阅读”,打造个性化听书应用
不知不觉,"语"时代已悄然走进我们的生活.各行业移动应用也乘势插上了语音腾飞的翅膀.移动"和阅读"是中国移动推出的一款花了包月费用后免流量看书的套餐配套软件,集 ...
- Android讯飞语音云语音听写学习
讯飞语音云语音听写学习 这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google".但种种原因, ...
- 聚焦语音交互,引爆智能硬件——暨讯飞语音云沙龙杭州站成功举办
5月16日,"让世界聆听我们的声音"--2014年语音云开发者沙龙暨"聚焦语音交互引爆智能硬件"在杭州贝塔咖啡成功举办. 自2013年8月以来,由讯飞语音云举办 ...
- linux下运行讯飞语音云的测试程序
from : http://club.voicecloud.cn/forum.php?mod=viewthread&tid=5484 摸索了一段时间,大概明白了如何在linux下运行讯飞语音云 ...
- Android 讯飞语音开发(Android Studio)
前段时间火了一个很牛的讯飞语音,去看官方文档,瞬间蒙逼,官方是用的eclipse,我用的Android Studio.好了,能上代码尽量不BB. 先来看看gradle里面要配置的东西. module里 ...
- 讯飞语音包实现Android语音合成
1.先要到讯飞官网去注册并且获取相对应的appid,申请地址:http://www.xfyun.cn/ 2 将开发工具包中libs目录下的Msc.jar和armeabi复制到Android工程的lib ...
- Unity2021接入讯飞语音听写(Android)
使用的引擎工具: Unity2021.3.19 android-studio-2021.1.21 第一步: 新建一个Android项目(工程名字随便啦) 然后新建一个library (同上,库名自己命 ...
- Android语音识别开发详解(基于讯飞语音SDK)
一.准备工作 1.你需要android手机应用开发基础 2.科大讯飞语音识别SDK android版 3.科大讯飞语音识别开发API文档 4.android手机 关于科大讯飞SDK及API文档,请到科 ...
最新文章
- 查询服务器上几张显卡命令
- maya怎么保持2u_【肘进健康】手肘超伸怎么练?
- Spring Boot——一种包含分页和排序参数的接收方法DEMO
- [RN] React Native 实现 类似京东 的 沉浸式状态栏和搜索栏
- java list 取前3个_用java 截取字符串,每三个一组
- 制作根文件系统时的错误解决
- 解决springBoot 的templates中html引入css文件失败
- 《C和指针》——指向数组的指针(逐个移动和逐行的区别)
- (36)System Verilog类中方法示例
- Blocks in Objective-C
- VM centos网络配置
- BootStrap:基础学习
- ESP8266刷入MicroPython固件教程
- Vue Router系列之 route 和 router 的区别
- 关于爬取豆瓣电影和豆瓣书本的图片
- 关于win10防火墙“高级设置”变成灰色点不了,解决办法
- Adobe cc版安装
- (转载)分享一个昨天写的,3GQQ登录及取回sid的php源代码,内涵post/get访问网页的源代码。...
- 利用mxnet生成rec文件(图像分类)
- NERO刻录使用教程