科大讯飞SDK使用研究
语音听写(主要对象 SpeechRecognizer)
- 初始化
SpeechRecognizer recognizer=SpeechRecognizer.createRecognizer(activity,initListener);
- 设置参数
/** * 参数设置,可设置的参数有: * 1.引擎类型 SpeechConstant.ENGINE_TYPE ,可选值 TYPE_LOCAL,TYPE_CLOUD * 2.返回结果类型 SpeechConstant.RESULT_TYPE,一般为 “json” * 3.听写语言 SpeechConstant.LANGUAGE ,值为语言代码,如 “zh_cn”,"en_us"等 * 4.前端点,即多长时间不说话当做超时 SpeechConstant.VAD_BOS ,值为时间 * 5.后端点,即说完话多久开始识别 SpeechConstant.VAD_EOS,值为时间 * 6.识别结果是否显示标点符号 SpeechConstant.ASR_PTT , 可选值 ‘0’,‘1’ * 7.音频保存格式 SpeechConstant.AUDIO_FORMAT ,可选值 “pcm”,"wav" * 8.音频保存路径 SpeechConstant.ASR_AUDIO_PATH ,值为存储路径 */ recognizer.setParameter(paramKey,paramValue);
- 开始监听
recognizer.startListening(recognizerListener);
- 监听处理
recognizerListener = new RecognizerListener() { @Override public void onBeginOfSpeech() { // 此回调表示:sdk内部录音机已经准备好了,用户可以开始语音输入 } @Override public void onError(SpeechError error) { // Tips: // 错误码:10118(您没有说话),可能是录音机权限被禁,需要提示用户打开应用的录音权限。 } @Override public void onEndOfSpeech() { // 此回调表示:检测到了语音的尾端点,已经进入识别过程,不再接受语音输入 } @Override public void onResult(RecognizerResult results, boolean isLast) { //识别结果在RecognizerResult中,根据需要进行相关处理 } @Override public void onVolumeChanged(int volume, byte[] data) { //音量改变回调 } @Override public void onEvent(int eventType, int arg1, int arg2, Bundle obj) { // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因 // 若使用本地能力,会话id为null // if (SpeechEvent.EVENT_SESSION_ID == eventType) { // String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID); // Log.d(TAG, "session id =" + sid); // } } };
- 识别外部音频文件
//设置参数 SpeechConstant.AUDIO_SOURCE ,可选值 “-1”,“-2” //开始监听后,向recognizer写入二进制音频数据 recognizer.writeAudio(audioData, 0, audioData.length);
语音合成(主要对象 SpeechSynthesizer)
- 初始化
SpeechSynthesizer synthesizer=SpeechSynthesizer.createSynthesizer(activity, initListener);
- 设置参数
/** * 参数设置,可设置的参数有: * 1.引擎类型 SpeechConstant.ENGINE_TYPE ,可选值 TYPE_LOCAL,TYPE_CLOUD * 2.发音人 SpeechConstant.VOICE_NAME,值为人名 * 3.合成速度 SpeechConstant.SPEED ,值为具体速度 * 4.音调 SpeechConstant.PITCH ,值为具体音调 * 5.音量 SpeechConstant.VOLUME,值为具体音量 * 6.播放器音频流类型 SpeechConstant.STREAM_TYPE , 值为具体类型 * 7.音频保存格式 SpeechConstant.AUDIO_FORMAT ,可选值 “pcm”,"wav" * 8.音频保存路径 SpeechConstant.ASR_AUDIO_PATH ,值为存储路径 */ synthesizer.setParameter(paramKey,paramValue);
- 开始合成
synthesizer.startSpeaking(string, synthesizerListener);
- 监听处理
synthesizerListener = new SynthesizerListener() { @Override public void onSpeakBegin() { //开始播放 } @Override public void onSpeakPaused() { //暂停播放 } @Override public void onSpeakResumed() { //继续播放 } @Override public void onBufferProgress(int percent, int beginPos, int endPos, String info) { // 合成进度 } @Override public void onSpeakProgress(int percent, int beginPos, int endPos) { // 播放进度 } @Override public void onCompleted(SpeechError error) { //播放完成 } @Override public void onEvent(int eventType, int arg1, int arg2, Bundle obj) { // 以下代码用于获取与云端的会话id,当业务出错时将会话id提供给技术支持人员,可用于查询会话日志,定位出错原因 // 若使用本地能力,会话id为null // if (SpeechEvent.EVENT_SESSION_ID == eventType) { // String sid = obj.getString(SpeechEvent.KEY_EVENT_SESSION_ID); // Log.d(TAG, "session id =" + sid); // } } };
语音唤醒(主要对象 VoiceWakeuper)
- 初始化
VoiceWakeuper wakeuper=VoiceWakeuper.createWakeuper(activity, initListener);
- 设置参数
/** * 参数设置,可设置的参数有: * 1.唤醒资源路径 SpeechConstant.IVW_RES_PATH ,资源存放路径 * 2.唤醒类型 SpeechConstant.IVW_SST,可选值 ‘wakeup’,‘oneshot’ * 3.唤醒门限 SpeechConstant.IVW_THRESHOLD ,值为具体门限 * 4.持续唤醒 SpeechConstant.KEEP_ALIVE ,可选值 ‘0’,‘1’ * 5.闭环优化 SpeechConstant.IVW_NET_MODE,可选值 ‘0’,‘1’ * 6.音频保存格式 SpeechConstant.AUDIO_FORMAT ,可选值 “pcm”,"wav" * 7.音频保存路径 SpeechConstant.ASR_AUDIO_PATH ,值为存储路径 */ wakeuper.setParameter(paramKey,paramValue);
- 启动唤醒
wakeuper.startListening(wakeuperListener);
- 监听处理
wakeuperListener = new WakeuperListener() { @Override public void onResult(WakeuperResult result) { //唤醒结果 } @Override public void onError(SpeechError error) { //唤醒出错 } @Override public void onBeginOfSpeech() { // } @Override public void onEvent(int eventType, int isLast, int arg2, Bundle obj) { switch( eventType ){ // EVENT_RECORD_DATA 事件仅在 NOTIFY_RECORD_DATA 参数值为 真 时返回 case SpeechEvent.EVENT_RECORD_DATA: final byte[] audio = obj.getByteArray( SpeechEvent.KEY_EVENT_RECORD_DATA ); Log.i( TAG, "ivw audio length: "+audio.length ); break; } } @Override public void onVolumeChanged(int volume) { } };
未完待续。。。