Web Speech API 使你能夠將語音數據合并到 Web 應用程序中。Web Speech API 有兩個部分:SpeechSynthesis 語音合成(文本到語音 TTS)和 SpeechRecognition 語音識別(異步語音識別)。
SpeechRecognition
-
語音識別通過
SpeechRecognition (en-US)
接口進行訪問,它提供了識別從音頻輸入(通常是設備默認的語音識別服務)中識別語音情景的能力。一般來說,你將使用該接口的構造函數來構造一個新的SpeechRecognition (en-US)
對象,該對象包含了一系列有效的對象處理函數來檢測識別設備麥克風中的語音輸入。 -
SpeechGrammar
接口則表示了你應用中想要識別的特定文法。文法則通過 JSpeech Grammar Format (JSGF.) 來定義。
語音識別api
SpeechRecognition (en-US)
語音識別服務的控制器接口;它也處理由語音識別服務發來的 SpeechRecognitionEvent (en-US)
事件。
-
創建SpeechRecognition的新實例
var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition
// 語音識別
var recognition = new SpeechRecognition()
-
設置是持續聽還是聽到聲音之后就關閉接收。
recognition.continuous = true;
-
設置是否允許臨時結果,臨時結果是識別的中間過程,這時候返回結果的isFinal = false。
recognition.interimResults = true;
-
設置語言
recognition.lang = 'cmn-Hans-CN'; //普通話 (中國大陸)
-
控制語音識別的開啟和停止,可使用start()和stop()方法,分別對應onstart、onend事件
// 開始語音識別監聽,開始接收和處理語音輸入
recognition.start();
// 停止語音識別監聽,不再接收和處理語音輸入
recognition.stop();
// 將當前的語音識別操作中止,并且不觸發任何結果事件
recognition.abort();
-
對識別到的結果進行處理,可以使用一些事件方法,比方說onresult:
recognition.onresult = function(event) { console.log(event);// event返回結果格式/*{results: {0: {0: {confidence: 0.695017397403717,transcript: "你好,世界"},isFinal:true,length:1},length:1},}*/
}
-
錯誤處理
recognition.onerror = function(event) { console.log(event);
}
以下是SpeechRecognition對象的一些常見事件說明:
??audioend:當音頻輸入結束時觸發,表示不再接收音頻數據。
audiostart:在開始處理音頻數據之前觸發,表示開始接收音頻輸入。
end:當SpeechRecognition實例停止監聽后觸發。
error:在處理期間發生錯誤時觸發。
nomatch:在沒有找到匹配的語音輸入時觸發。
result:在獲取到語音輸入結果時觸發,可以通過event.results獲取識別結果。
soundend:在聲音輸入結束時觸發。
soundstart:在開始處理聲音輸入時觸發。
speechend:當語音輸入結束時觸發。
speechstart:在開始處理語音輸入時觸發。
start:當SpeechRecognition實例開始監聽時觸發。
SpeechRecognitionAlternative (en-US)
表示由語音識別服務識別出的一個詞匯。
recognition.onresult = function(event) {// SpeechRecognitionEventresults 屬性返回一個 SpeechRecognitiontionResultList 對象// SpeechRecognitionResultList 對象包含了多個 SpeechRecognitionResultResult 對象。// 它具有 getter,因此可以像數組一樣進行訪問// 第一個 [0] 返回位置 0 處的 SpeechRecognitionResult。// 每個 SpeechRecognitionResult 對象都包含具有單獨結果的 SpeechRecognitionAlternative 對象。// 它們也有 getter ,因此可以像數組一樣對其進行訪問。// 第二個 [0] 返回位置 0 處的 SpeechRecognitionAlternative。// 然后,我們返回 SpeechRecognitionAlternative 對象的 transcript 屬性var color = event.results[0][0].transcript;diagnostic.textContent = '收到結果:' + color + '。';bg.style.backgroundColor = color;
}
SpeechGrammar
我們將要交由語音識別服務進行識別的詞匯或者詞匯的模式。
var grammar ="#JSGF V1.0; grammar colors; public <color> = aqua | azure | beige | bisque | black | blue | brown | chocolate | coral | crimson | cyan | fuchsia | ghostwhite | gold | goldenrod | gray | green | indigo | ivory | khaki | lavender | lime | linen | magenta | maroon | moccasin | navy | olive | orange | orchid | peru | pink | plum | purple | red | salmon | sienna | silver | snow | tan | teal | thistle | tomato | turquoise | violet | white | yellow ;";
var recognition = new SpeechRecognition();
var speechRecognitionList = new SpeechGrammarList();
speechRecognitionList.addFromString(grammar, 1);
recognition.grammars = speechRecognitionList;
SpeechGrammarList (en-US)
表示一個由 SpeechGrammar
對象構成的列表。
SpeechRecognitionResult (en-US)
表示一次識別中的匹配項,其中可能包含多個 SpeechRecognitionAlternative (en-US)
對象。
SpeechRecognitionResultList (en-US)
表示包含 SpeechRecognitionResult (en-US)
對象的一個列表,如果是以 continuous (en-US)
模式捕獲的結果,則是單個對象。
安全性
http協議下瀏覽器每次都會提醒用戶去確認語音操作,然而https的頁面,沒有這樣一個麻煩的操作。
JavaScript上下文,整個頁面,都能過訪問到捕獲的音頻。
瀏覽器兼容性
實驗性: 這是一項實驗性技術 在將其用于生產之前,請仔細檢查瀏覽器兼容性表格。