? ? ? ?很久前我曾經[提到](http://blog.csdn.net/hfahe/article/details/7338032)過[**Web Speech API**](https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html),現在Chrome剛剛發布的25版本已經為桌面和Android提供了對此API的支持,這對Web開發者來說無疑是一個具有里程碑意義的事件,因為我們可以直接在Web App中原生使用語音識別技術,Web應用的新時代將會由此開啟。
??????? 控制不住激動的心情,下面我會通過示例馬上給大家介紹此API的詳細信息。
??????? Google專門提供了一個[原生示例](https://www.google.com/intl/en/chrome/demos/speech.html),來演示Web Speech API。

? ? ? ?我們來看看實現代碼。首先需要判斷瀏覽器是否支持Web Speech API,我們通過window下是否存在webkitSpeechRecognition對象來判斷。如果支持,我們創建webkitSpeechRecognition對象,并設置相關屬性和事件。
~~~
if (!('webkitSpeechRecognition' in window)) {
upgrade();
} else {
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onstart = function() { ... }
recognition.onresult = function(event) { ... }
recognition.onerror = function(event) { ... }
recognition.onend = function() { ... }
...
~~~
? ? ? ?continuous屬性的默認值是false,代表當用戶停止說話時,語音識別將結束。在這個[演示中](https://www.google.com/intl/en/chrome/demos/speech.html)?,我們將它設置為true,這樣即便用戶暫時停止講話,語音識別也將會繼續。
? ? ? ?interimResults屬性的默認值也是false,代表語音識別器的返回值不會改變。在這個演示中,我們把它設置為true,這樣隨著我們的輸入,識別結果有可能會改變。仔細觀看演示,灰色的文字是臨時性的,有時會改變,而黑色文本是最終結果,不會改變。
? ? ? ?當我們點擊麥克風按鈕時,會觸發如下代碼:
~~~
function startButton(event) {
...
final_transcript = '';
recognition.lang = select_dialect.value;
recognition.start();
~~~
? ? ? ?我們用recognition.lang來設置語音識別的語言,在這個示例中默認為HTML頁面的語言,通過下拉列表用戶可以進行更換,例如“cmn-Hans-CN”代表普通話,而“en-us”代表美式英語。Chrome瀏覽器的語音識別支持眾多的語言,非常強大。
? ? ? ?設置語言后,我們調用recognition.start()來激活語音識別。一旦開始捕獲音頻,它調用onstart方法,然后為每一個新的結果集調用onresult方法進行處理。
~~~
recognition.onresult = function(event) {
var interim_transcript = '';
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
final_transcript = capitalize(final_transcript);
final_span.innerHTML = linebreak(final_transcript);
interim_span.innerHTML = linebreak(interim_transcript);
};
}
~~~
? ? ? ?這個handler把結果分成兩個字符串:final_transcript和interim_transcript。這里調用Linebreak方法來進行分段。最后,它會將final_transcript設置為final_span的innerHTML,顯示為黑色;而將interim_transcript設置為interim_span的innerHTML,顯示為灰色。
? ? ? ?以上就是功能核心代碼。當recognition.start()被調用時,麥克風識別動畫開始顯示,同時Chrome需要獲得用戶對麥克風的授權。有一點非常重要的是,**HTTPS網頁不需要反復獲取授權,而HTTP**網頁需要**。

? ? ? ?當開始語音輸入、捕獲和識別時,我們還會在桌面右下角看到相關提示。


? ? ? ?從現在開始,Web App的開發者們可以好好考慮考慮,利用Web Speech API能夠開發出什么樣有趣的產品,或者為自己的產品添加什么有趣的功能?
? ? ? ?提示:如果要體驗文中的Demo,請使用Chrome 25以上的版本或者Chrome Canary。
? ? ? ?相關文章:《[對HTML5 Device API相關規范的解惑](http://blog.csdn.net/hfahe/article/details/7338032)》
? ? ? ?參考文章:[VOICE DRIVEN WEB APPS: INTRODUCTION TO THE WEB SPEECH API](http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API)
? ? ? ?轉載請標明出處:[蔣宇捷的專欄](http://blog.csdn.net/hfahe)
- 前言
- AutoPager的簡單實現
- 利用CSS3特性巧妙實現漂亮的DIV箭頭
- IE9在Win7下任務欄新特性簡介
- 瀏覽器九宮格的簡單實現
- Raphael js庫簡介
- 使用CSS3構建Ajax加載動畫
- 用CSS3創建動畫價格表
- 用CSS3實現瀏覽器的縮放功能
- 用純CSS3實現QQ LOGO
- 用CSS3創建旋轉載入器
- 使用Javascript開發移動應用程序
- 用HTML5創建超酷圖像灰度漸變效果
- 使用CSS3創建文字顏色漸變(CSS3 Text Gradient)
- 僅用CSS創建立體旋轉幻燈片
- 如何創建跨瀏覽器的HTML5表單
- 用CSS3實現動畫進度條
- HTML5 Guitar Tab Player
- 奇妙的HTML5 Canvas動畫實例
- 談HTML5和CSS3的國際化支持
- 實現跨瀏覽器的HTML5占位符
- 前端開發必備工具:WhatFont Bookmarklet-方便的查詢網頁上的字體
- 使用HTML5和CSS3來創建幻燈片
- HTML5之美
- 如何使用HTML5創建在線精美簡歷
- 以小見大、由淺入深-談如何面試Javascript工程師
- 快速入門:HTML5強大的Details元素
- 用CSS3實現圖像風格
- HTML5視頻字幕與WebVTT
- 用純CSS3實現Path華麗動畫
- 用3個步驟實現響應式網頁設計
- 遇見CSS3濾鏡
- 關于CSS3濾鏡的碎念
- 用純CSS3繪制萌系漫畫人物動態頭像
- CSS3新的鼠標樣式介紹
- 用HTML5獻上愛的3D玫瑰
- 對HTML5 Device API相關規范的解惑
- 如何使用HTML5實現拍照上傳應用
- 2012第一季度國外HTML5移動開發趨勢
- HTML5新特性:范圍樣式
- 百度開發者大會-《用HTML5新特性開發移動App》PPT分享
- Chrome 19對于HTML5最新支持的動態:電池狀態API,全屏API,震動API,語音API
- 遇見Javascript類型數組(Typed Array)
- 用HTML5 Audio API開發游戲音樂
- 用HTML5實現人臉識別
- 用Javascript實現人臉美容
- Chrome 20對于HTML5最新支持的動態:顏色輸入,網絡信息API,CSS著色器
- 用HTML5實現手機搖一搖的功能
- 用HTML5實現iPad應用無限平滑滾動
- 用非響應式設計構建跨端Web App
- 了解SVG
- HTML5圖像適配介紹
- HTML5安全:內容安全策略(CSP)簡介
- HTML5安全:CORS(跨域資源共享)簡介
- 用CSS3 Region和3D變換實現書籍翻頁效果
- 談談移動App的思維誤區
- Chrome新特性:文件夾拖拽支持
- 《關注HTML5安全》
- HTML5安全風險詳析之一:CORS攻擊
- HTML5安全風險詳析之二:Web Storage攻擊
- HTML5圖像適配最新進展:響應式圖片規范草案
- HTML5移動Web App相關標準狀態及路線圖
- HTML5安全風險詳析之三:WebSQL攻擊
- Chrome引入WebRTC支持視頻聊天App
- HTML5安全風險詳析之四:Web Worker攻擊
- HTML5安全風險詳析之五:劫持攻擊
- HTML5安全風險詳析之六:API攻擊
- HTML5安全攻防詳析之七:新標簽攻擊
- 在iOS Safari中播放離線音頻
- 使用WebRTC實現遠程屏幕共享
- Firefox、Android、iOS遇見WebRTC
- HTML5光線傳感器簡介
- HTML5安全攻防詳析之八:Web Socket攻擊
- HTML5安全攻防詳析之完結篇:HTML5對安全的改進
- 激動人心!在網頁上通過語音輸入文字 - HTML5 Web Speech API介紹
- Web滾動性能優化實戰
- 用CSS3設計響應式導航菜單
- 用HTML5構建高性能視差網站
- 漫談@supports與CSS3條件規則
- HTML5下載屬性簡介
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(一)
- 如何開發優秀的HTML5游戲?-迪斯尼《尋找奧茲之路》游戲技術詳解(二)
- 趨勢:Chrome為打包應用提供強大新特性
- 從HTML5移動應用現狀談發展趨勢
- 基于HTML5的Web跨設備超聲波通信方案