第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 科大讯飞语音云使用经历

科大讯飞语音云使用经历

时间:2019-05-05 08:43:31

相关推荐

科大讯飞语音云使用经历

下载好了之后 将

按照文档导入包: Msc.Jar, libmsc.so.

导入后 第一步:注册

在程序入口处初始化 SDK

SpeechUtility.createUtility(this, "appid=53fd96ce");

这个初始化的是文字转语音的对象

mTts = SpeechSynthesizer.createSynthesizer(this, mTtsInitListener); // 初始化合成对象

mTtsInitListener 对象就是初始化的时候监听,当初始化成功之后就代表你现在可是使用语音功能了

private InitListener mTtsInitListener = new InitListener() {@Overridepublic void onInit(int code) {Log.e("合成监听监听", "InitListener init() code = " + code);if (code == ErrorCode.SUCCESS) {btnWZ.setEnabled(true);text.setText("可以进行识别文字(文字转声音)\n");btnSY.setEnabled(true);text.append("可以进行识别声音(声音转文字)\n");}}};

然后下一步,对于合成对象 进行相关属性的设置。

还有一些其他属性可以参考API文档进行理解和添加。这里就不详细说明了。

// 设置合成if (mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);} else {mTts.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_LOCAL);}// 设置发音人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");

之后就进行上传你要转录的文本和监听接口了

int code = mTts.startSpeaking(context, mTtsListener);

context:是要合成的文字

code:就是最后的结果了 如果是0 就代表了正常了。如果不为零就代表出现了错误,具体的值所代表的意思可参考ErrorCode类来对照。

new SpeechError(code).getPlainDescription(true)

可以使用上面的那段代码 将code 转换成文本,错误的文本。

mTtsListener

/*** 合成回调监听。*/private SynthesizerListener mTtsListener = new SynthesizerListener() {@Overridepublic void onSpeakBegin() {showTip("开始播放");}@Overridepublic void onSpeakPaused() {showTip("暂停播放");}@Overridepublic void onSpeakResumed() {showTip("继续播放");}@Overridepublic void onBufferProgress(int percent, int beginPos, int endPos,String info) {mPercentForBuffering = percent;upProgressBar();}@Overridepublic void onSpeakProgress(int percent, int beginPos, int endPos) {mPercentForPlaying = percent;upProgressBar();}@Overridepublic void onCompleted(SpeechError error) {if (error == null) {showTip("播放完成");} else if (error != null) {showTip(error.getPlainDescription(true));}}};其中的showTip ()方法只是我的一个回调显示的方法,可根据自己的需求自定义设置。其中的onBufferProgress 方法返回的是数据缓存的长度, 最大100 这个数据是从网络进行识别之后传递过来的数据onSpeakProgress 播放的长度,当前播放进度, 最大值也是100文字转语音也就上面的那些内容了。语音转文字:<span style="font-size:12px;">mIat = SpeechRecognizer.createRecognizer(this, mTtsInitListener);iatDialog = new RecognizerDialog(this, mTtsInitListener);</span>其中的这个iatDialog 方法就是讯飞自己的语音交互界面了。 会弹出一个麦克风的dialgo并带有动画。,能根据我的声音大小进行动画。第二步那个就是一个初始化监听。这个上面有介绍第三步就是设置属性了 设置mIat的属性// 设置语言mIat.setParameter(SpeechConstant.LANGUAGE, "en_us");// 设置语言mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");// 设置语言区域mIat.setParameter(SpeechConstant.ACCENT, "mandarin");// 设置语音前端点mIat.setParameter(SpeechConstant.VAD_BOS, "4000");// 设置语音后端点mIat.setParameter(SpeechConstant.VAD_EOS, "1000");// 设置标点符号mIat.setParameter(SpeechConstant.ASR_PTT, "1");// 设置音频保存路径mIat.setParameter(SpeechConstant.ASR_AUDIO_PATH,"/sdcard/my/luyin.pcm");设置完成之后就可以点击按钮进行录制了点击按钮 按钮上的方法写:iatDialog.setListener(recognizerDialogListener);iatDialog.show();监听方法 recognizerDialogListener/*** 听写UI监听器*/private RecognizerDialogListener recognizerDialogListener = new RecognizerDialogListener() {public void onResult(RecognizerResult results, boolean isLast) {String text = JsonParser.parseIatResult(results.getResultString());edit.append(text);edit.setSelection(edit.length());}/*** 识别回调错误.*/public void onError(SpeechError error) {showTip(error.getPlainDescription(true));}};其中的onResult()方法会不断的回调,因为语音识别是一个字一个字识别并发送过来的。当然也有是一个词的形式发送过来。这个时候我们就需要通过它来进行识别了这个JsonParser类是直接从 讯飞提供的Demo中复制的。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 < words.length(); i++) {// 转写结果词,默认使用第一个结果JSONArray items = words.getJSONObject(i).getJSONArray("cw");JSONObject obj = items.getJSONObject(0);ret.append(obj.getString("w"));// 如果需要多候选结果,解析数组其他字段// for(int j = 0; j < items.length(); j++)// {// JSONObject obj = items.getJSONObject(j);// ret.append(obj.getString("w"));// }}} catch (Exception e) {e.printStackTrace();}return ret.toString();}public static String parseGrammarResult(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 < words.length(); i++) {JSONArray items = words.getJSONObject(i).getJSONArray("cw");for(int j = 0; j < items.length(); j++){JSONObject obj = items.getJSONObject(j);if(obj.getString("w").contains("nomatch")){ret.append("没有匹配结果.");return ret.toString();}ret.append("【结果】" + obj.getString("w"));ret.append("【置信度】" + obj.getInt("sc"));ret.append("\n");}}} catch (Exception e) {e.printStackTrace();ret.append("没有匹配结果.");}return ret.toString();}}然后有人要说了 如果没有使用讯飞提供的语音交互界面,那应该怎么写?简单在按钮的处理方法中将上面的显示iatDialog给替换成下面的代码就可以了。int ret = mIat.startListening(recognizerListener);if (ret != ErrorCode.SUCCESS) {<span style="font-size:14px;">/*** 听写监听器。*/private RecognizerListener recognizerListener = new RecognizerListener() {@Overridepublic void onBeginOfSpeech() {showTip("开始说话");}@Overridepublic void onError(SpeechError error) {showTip(error.getPlainDescription(true));}@Overridepublic void onEndOfSpeech() {showTip("结束说话");}@Overridepublic void onEvent(int eventType, int arg1, int arg2, String msg) {}@Overridepublic void onResult(RecognizerResult results, boolean isLast) {String text = JsonParser.parseIatResult(results.getResultString());edit.append(text);edit.setSelection(edit.length());if (isLast) {// TODO 最后的结果}}@Overridepublic void onVolumeChanged(int volume) {showTip("当前正在说话,音量大小:" + volume);}};</span>

大概就这样了。

总结一下: 使用第三方的SDK 都不是一件麻烦的事情,只要你去看看API和Demo 就能往自己的项目中套了。

这个讯飞语音识别,也不复杂。

第一个 注册SDK 将你申请到的APPID给赋值进去。 (所有的第三方 SDK都有这个要求)

第二步 根据你的需要来创建指定的对象。

创建对象的时候绑定一个InitListener接口。来检测 创建是否成功。

第三步 给对象设置基本属性

第四步 对象开始工作。

第五步给工作的对象添加回调接口,实时了解对象工作状态。

第六步 根据对象的状态来写各种不同的提示和说明。就是个交互的过程了。

--------------------- 本文来自 Zswx98 的CSDN 博客 ,全文地址请点击:/zy987654zy/article/details/38899795?utm_source=copy

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。