科大讯飞SDK学习与总结

科大讯飞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) {
    
            }
        };

    未完待续。。。

你可能感兴趣的:(其他研究)