+
95
-

回答

可以通过 webkitSpeechRecognition,不过这个是chrome的内置服务,需要访问google服务器,请确保你的网络能访问google,示例代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width">

<title>Speech color changer</title>

<style>
body, html {
margin: 0;
}

html {
height: 100%;
}

body {
height: inherit;
overflow: hidden;
max-width: 800px;
margin: 0 auto;
}

h1, p {
font-family: sans-serif;
text-align: center;
padding: 20px;
}

div {
height: 100px;
overflow: auto;
position: absolute;
bottom: 0px;
right: 0;
left: 0;
background-color: rgba(255,255,255,0.2);
}

ul {
margin: 0;
}

.hints span {
text-shadow: -1px 1px 0px rgb(254 254 254 / 90%);
margin: 10px;
display: block;
height: 40px;
line-height: 40px;
cursor: pointer;
}
</style>
</head>

<body>
<h1>用英文说出以下颜色</h1>
<p>需要您的网络能够访问google提供的服务</p>

<p class="hints"></p>
<div>
<p class="output">
<em>指令识别中.....</em>
</p>
</div>

<script>
//


var SpeechRecognition = SpeechRecognition || webkitSpeechRecognition
var SpeechGrammarList = SpeechGrammarList || webkitSpeechGrammarList
var SpeechRecognitionEvent = SpeechRecognitionEvent || webkitSpeechRecognitionEvent

var colors = ['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 grammar = '#JSGF V1.0; grammar colors; public <color> = ' + colors.join(' | ') + ' ;'

var recognition = new SpeechRecognition();
var speechRecognitionList = new SpeechGrammarList();
speechRecognitionList.addFromString(grammar, 1);
recognition.grammars = speechRecognitionList;
recognition.continuous = true;
recognition.lang = 'en-US';
recognition.interimResults = false;
recognition.maxAlternatives = 1;

var diagnostic = document.querySelector('.output');
var bg = document.querySelector('html');
var hints = document.querySelector('.hints');

var colorHTML = '';
colors.forEach(function(v, i, a) {
console.log(v, i);
colorHTML += '<span style="background-color:' + v + ';"> ' + v + ' </span>';
});
hints.innerHTML = '说出一个颜色' + colorHTML + '.';

setTimeout(function() {
recognition.start();
console.log('系统识别中,请说出点击的颜色.');

}, 1000);
//document.body.onclick = function() {

// }

recognition.onresult = function(event) {
// The SpeechRecognitionEvent results property returns a SpeechRecognitionResultList object
// The SpeechRecognitionResultList object contains SpeechRecognitionResult objects.
// It has a getter so it can be accessed like an array
// The first [0] returns the SpeechRecognitionResult at the last position.
// Each SpeechRecognitionResult object contains SpeechRecognitionAlternative objects that contain individual results.
// These also have getters so they can be accessed like arrays.
// The second [0] returns the SpeechRecognitionAlternative at position 0.
// We then return the transcript property of the SpeechRecognitionAlternative object
console.log(event);
var color = event.results[event.results.length-1][0].transcript;
diagnostic.textContent = '识别结果 ' + color + '.';
bg.style.backgroundColor = color;
console.log('信心值: ' + event.results[0][0].confidence);
}

recognition.onspeechend = function() {
recognition.stop();
recognition.start();
}

recognition.onnomatch = function(event) {
diagnostic.textContent = "不能识别该颜色.";
}

recognition.onerror = function(event) {
diagnostic.textContent = '识别错误: ' + event.error;
}
</script>
</body>
</html>


网友回复

我知道答案,我要回答