先上代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>test</title>
</head>
<body>
<div id="result">测试显示</div>
<button id="transcribe-now" onclick="toggleSpeechRecognition()">Start</button>
<!-- built files will be auto injected -->
</body>
<script>
function toggleSpeechRecognition() {
if (!window.webkitSpeechRecognition && !window.SpeechRecognition) {
alert("Your browser does not support the SpeechRecognition API");
}
else if (window.transcriptionInProgress) {
window.transcriptionInProgress.stop();
}
else {
let btn = document.getElementById("transcribe-now");
window.transcriptionInProgress = window.webkitSpeechRecognition ? new webkitSpeechRecognition() : new SpeechRecognition();
window.transcriptionInProgress.lang = "zh-CN";
window.transcriptionInProgress.interimResults = true;
window.transcriptionInProgress.addEventListener("result", function (e) {
const re = document.getElementById("result");
re.innerHTML = e.results[0][0].transcript;
console.log(e.results[0][0].transcript);
});
window.transcriptionInProgress.addEventListener("error", function (event) {
console.error("语音识别失败",event.error);
});
window.transcriptionInProgress.addEventListener("end", function (e) {
window.transcriptionInProgress = null;
console.log("结束了");
btn.innerHTML = '<i class="fa fa-circle"></i>Start';
});
window.transcriptionInProgress.addEventListener("start", function (e) {
console.log("开始了");
btn.innerHTML = '<i class="fa fa-square"></i>Stop';
});
window.transcriptionInProgress.start();
}
};
</script>
</html>
这个只能翻墙后,识别出说话的语音,否则会提示错误”network“,也是很不友好,这里记录一下踩过的坑
浏览器限制:
对于 Web Speech API speech recognition(语音识别) 的支持,在各浏览器中还不成熟,还在发展,现在主要的限制如下:
- Firefox 桌面端和移动端在 Gecko 44+ 中都支持,并且是没有前缀的,它可以在
about:config
中把media.webspeech.recognition.enable
设置为true
打开。权限设置/UI 还没有整理出来,所以权限还不能被用户使用,也就是不能用。不过很快会修复吧~ - Firefox OS 2.5+ 也支持,但作为一个特权 API(privileged API) 需要权限,因此你需要在manifest.webapp (也可以通过 WebIDE 下载,或者使应用得到验证后在 Firefox Marketplace 可使用) 如下设置:
JSONCopy to Clipboard
"permissions": { "audio-capture" : { "description" : "Audio capture" }, "speech-recognition" : { "description" : "Speech recognition" } }
JSONCopy to Clipboard
"type": "privileged"
- Chrome 桌面端和 Android 端自 version 33 以来均支持,但是带有前缀,所以你需要使用带有前缀的版本,比如:
webkitSpeechRecognition
运行html,直接点击start 就开始监听录音,大概1分钟后结束,如果没翻墙就识别不到,network错误,翻墙后,如果说话中断会自动结束监听,输出结果。
未翻墙的结果,具体也不知道为什么,看外网有说 Web Speech 语音 && 麦克风 - Xzavier's Blog | xiaohuazheng Blog | zhengxiaohua Blog
详细请访问官网api 使用 Web Speech API - Web API | MDN