與android一塊兒聯調錄音接口

1 總體思路javascript

 

 需求:前端

  語音輸入功能:java

  1 提供問題語音播報功能android

  2 支持語音輸入功能api

  3 語音輸入須要邊輸入邊識別,並把識別後的結果傳給前端展現app

  4 若是用戶發現語音輸入不是本身想要的,能夠從新輸入函數

  5 若是用戶不想語音輸入,能夠關閉語音輸入。this

前端與andriod交互apiurl

  andriod apispa

    KFZ.startRecorder: 開始錄音

    KFZ.stopRecorder: 關閉錄音api

    KFZ.cancelRecorder: 取消本次錄音

  前端api

    window['onduration']: 供android端持續調用[javascript:window. + 'callbackname'方式調用],前端經過支持該方法時,傳遞迴調函數,不斷往頁面中追加內容

    window['onsuccess']: 供android端調用[javascript:window. + 'callbackname'方式調用],通知前端本次錄音結束。

    window['onfailed']: 供android端調用[javascripte:window. + 'callbackname方式調用'],以通知前端 本次錄音識別失敗。

 

    前端實現:

        

    1 語音播報功能,根據後臺返回的音頻資源url進行語音播放;

var audio = createAudio('audio');
audio.src = url;
function createAudio(id) { var audio = $(id); if (audio) { document.body.removeChild(audio); } audio = document.createElement('audio'); audio.id = id; audio.style.display = 'none'; document.body.appendChild(audio); return audio }

2 建立錄音對象,添加語音調用接口

var Recorder = {
    started: false,
    ending: false,
    start: function (dsuccess, esuccess, efailed) {
        this.started = true;
        KFZ.startRecorder();
        window['ondurative'] = function (res) {// 持續識別
            dsuccess(res);
        };
        window['onsuccess'] = function (res) {// 持續識別
            esuccess(res);
            deleteApi();
        };
        window['onfailed'] = function (res) { // 錄音識別失敗結束
            efailed(res);
            deleteApi();
        };
    },
    stop: function () {
        if (!this.started) {
            return;
        }
        KFZ.stopRecorder();
        this.started = false;
    },
    cancel: function () {
        if (!this.started) {
            return;
        }
        KFZ.cancelRecorder();
        this.started = false;
    }
};

function deleteApi() { //刪除沒必要要的引用定義,防止內存泄漏
if (window.ondurative) {
window.ondurative = null;
}
if (window.onsuccess) {
window.onsuccess = null;
}
if (window.onfailed) {
window.onfailed = null;
}
}
 

 

    2.1 監聽語音播報結束事件('ended'), 開始調用android startRecorder接口

audio.addEventListener('ended', function () { 
  Recorder.start(function duration(durationres) {}, 
           function success(susres) {},
           function failed(failres) {});
});

 

    3  從新輸入功能實現

調用andriod接口 KFZ.cancel方法結束;
調用KFZ.startRecorder方法,從新啓動語音輸入;
調用deleteApi

 

       4 關閉當前錄音:調用KFZ.stop通知andriod結束當前的錄音功能。

調用andriod接口 KFZ.cancelRecorder方法取消當前錄音
調用deleteApi
相關文章
相關標籤/搜索