## Web Speech 語音輸入
老版本中,如果我們要部署一個帶有語音搜索功能的input,可用如下代碼:
```
<input id="speech" type="search"
x-webkit-speech speech />
```
然后通過webkitspeechchange事件來監聽用戶輸入:
```
var speech = document.getElementById('speech');
speech.onwebkitspeechchange = funciton(){
}
```
注意:目前只有Chrome支持這種帶語音的輸入框。
在新版本中,我們還可以用JavaScript操作語音輸入,就是通過Web Speech這個API。(也是只有Chrome支持)
主要有兩部分:
- 語言識別(將所說的轉換成文本文字)
- 語言合成(將文本文字讀出來)
**1、語言識別**
**1.1 SpeechRecognition對象**
這個API部署在`SpeechRecognition`對象之上。
**1.1.1 檢測是否支持**
```
if ('webkitSpeechRecognition' in window) {
// 支持
}
```
確定支持后,新建一個`SpeedchRecognition`的實例對象:
```
if ('webkitSpeechRecognition' in window) {
var recognition = new webkitSpeechRecognition();
}
```
**1.1.2 屬性和方法**
**屬性**
- continous:是否讓瀏覽器始終進行語言識別,默認為false,也就是說,當用戶停止說話時,語音識別就停止了。這種模式適合處理短輸入的字段。
- maxAlternatives:設置返回的最大語音匹配結果數量,默認為1
- lang:設置語言類型,默認值就繼承自HTML文檔的根節點或者是祖先節點的語言設置。
**方法**
- start():啟動語音識別
- stop():停止語音識別
- abort():中止語音識別
**1.1.3 事件**
瀏覽器會詢問用戶是否許可瀏覽器獲取麥克風數據
這個API提供了11個事件。
- audiostart:當開始獲取音頻時觸發,也就是用戶允許時。
- audioend:當獲取音頻結束時觸發
- error:當發生錯誤時觸發
- nomatch:當找不到與語音匹配的值時觸發
- result: 當得到與語音匹配的值時觸發,它傳入的是一個SpeechRecognitionEvent對象,它的results屬性就是語音匹配的結果數組,最匹配的結果排在第一位。該數組的每一個成員是SpeechRecognitionResult對象,該對象的transcript屬性就是實際匹配的文本,confidence屬性是可信度(在0到1之間)
- soundstart
- soundend
- speechstart
- speechend
- start:當開始識別語言時觸發
- end:當語音識別斷開時觸發
看個實例:
```
<input id="speech" type="search"
x-webkit-speech speech />
var speech = document.getElementById('speech');
if('webkitSpeechRecognition' in window) {
var recognition = new webkitSpeechRecognition();
recognition.onaudiostart = function(){
speech.value = '開始錄音';
};
recognition.ononmatch = function(){
speech.value = '沒有匹配結果,請再次嘗試';
};
recognition.onerror = function(){
speech.value ='錯誤,請再次嘗試';
};
// 如果得到與語音匹配的值,則會觸發result事件。
recognition.onresult = function(event){
if(event.results.length > 0) {
var results = event.results[0];
var topResult = results[0];
if(topResult.confidence > 0.5) {
} else {
speech.value = '請再次嘗試';
}
}
}
}
```
**2、語音合成**
語音合成只有Chrome和Safari支持。
**2.1 SpeechSynthesisUtterance對象**
打開控制臺,黏貼下面的函數,然后調用:
```
funciton speak(textToSpeak){
var newUtterance = new SpeechSynthesisUtterance();
newUtterance.text = textToSpeak;
window.speechSynthsisi.speak(newUtterance);
}
```
**2.1 SpeechSynthesisUtteranc的實例對象的屬性**
- text:識別的文本
- volume:音量(0~1)
- rate:發音速度
- pitch:音調
- voice:聲音
- lang:語言類型
**2.2 window.speechSynthesis.getVoices()**
通過API提供給用戶的聲音在很大程度上取決于操作系統。谷歌有自己的一套給Chrome的默認聲音,可以在Mac OS X,Windows和Ubuntu上使用。Mac OS X的聲音也可用,所以和OSX的Safari的聲音一樣。你可以通過開發者工具的控制臺看有哪種聲音可用。
`window.speechSynthesis.getVoices()`用來獲取發音列表,返回一個數組,每個元素的name屬性表示聲音名稱
**2.3 window.speechSynthsisi.speak()**
`window.speechSynthsisi.speak()`方法是用于發音的。
- 前言
- JavaScript簡介
- 基本概念
- 語法
- 數據類型
- 運算符
- 表達式
- 語句
- 對象
- 數組
- 函數
- 引用類型(對象)
- Object對象
- Array對象
- Date對象
- RegExp對象
- 基本包裝類型(Boolean、Number、String)
- 單體內置對象(Global、Math)
- console對象
- DOM
- DOM-屬性和CSS
- BOM
- Event 事件
- 正則表達式
- JSON
- AJAX
- 表單和富文本編輯器
- 表單
- 富文本編輯器
- canvas
- 離線應用
- 客戶端存儲(Cookie、Storage、IndexedDB)
- HTML5 API
- Video/Audio
- Geolocation API
- requestAnimationFrame
- File API
- FullScreen API
- IndexedDB
- 檢測設備方向
- Blob
- vibrate
- Luminosity API
- WebRTC
- Page Visibility API
- Performance API
- Web Speech
- Notification
- 面向對象的程序設計
- 概述
- this關鍵字
- 原型鏈
- 作用域
- 常用API合集
- SVG
- 錯誤處理機制
- JavaScript開發技巧合集
- 編程風格
- 垃圾回收機制