speechRecognition API

Speech API 只支持 Chrome,
http://updates.html5rocks.com/2013/01/Voice-Driven-Web-Apps-Introduction-to-the-Web-Speech-API

speech = new webkitSpeechRecognition
speech.onresult = (event) ->
  console.log event.results[0][0]

speech.lang = 'cmn-Hans-CN'
speech.continous = yes
speech.start()

Chrome 启用语音识别的接口需要每次用户确认
推测是只有 HTTPS 的页面才能保存用户设置, 避免每次重复手动必用
按照 Chromium 的 Issue 里的写的, 设计上就是这样子的
https://code.google.com/p/chromium/issues/detail?id=248987

写了个简单的页面进行测试, 确实 HTTPS 的页面即便刷新权限还是保留的:

<!DOCTYPE html>
<html>
<head>
  <title>Speech</title>
  <script defer src="src/main.js"></script>
</head>
<body>
<div id="entry">Entry</div>
</body>
</html>
entry = document.querySelector '#entry'

entry.onclick = ->
  speech = new webkitSpeechRecognition
  speech.start()

关于 HTTPS 权限问题, 下面的文章也涉及讲了一些
http://shapeshed.com/html5-speech-recognition-api/

getUserMedia API 以及 AudioContext

音频内容可以通过 navigator.getUserMedia() 来获取
W3C 有文档但是没法看懂
http://dev.w3.org/2011/webrtc/editor/getusermedia.html

StackOverflow 找到的问题的解答:
http://stackoverflow.com/questions/11979528/record-audio-stream-from-getusermedia/19238153#19238153

网上找到一个随时读取音频, 绘制图表的例子:
http://www.webaudiodemos.appspot.com/AudioRecorder/index.html
https://github.com/cwilso/AudioRecorder

这份代码的结构, 除了 audioplayer.js 其他都和音频处理相关:

index.html
main.js
audioplayer.js
recorderjs/
  recorder.js
  recorderWorker.js

recorder.js 主要是对另一个 web worker 文件的封装
worker 文件在后台处理音频编解码的工作, 通过消息传回 recorder.js
数据从 main.js 里调用 getUserMedia 取出, 经过 new AudioContext() 处理

Audio 处理的模型

比较复杂, 我无法转述

还行的一篇中文的解释可以看这里:
http://html5online.com.cn/articles/2013030901.html


题叶
17.3k 声望2.6k 粉丝

Calcit 语言作者