SpeechSynthesis.speak()
期望字符串或SpeechSynthesisUtterance
对象,而不是普通对象
您可以使用Array.prototype.map()
将书籍章节的文本转换为盲文。
data-*
在 HTML 中使用属性来设置JSON
期望被服务识别的章节的表示,例如分别为"chapter one"
and"chapter 1"
和"chapter two"
and "chapter 2"
。
在过滤元素的result
事件中选择书的相应章节作为文本。重新启动识别服务,例如,在实例事件中。SpeechSynthesisUtterance
<textarea>
webkitSpeechRecognition
end
SpeechReconitionUtterance
<!DOCTYPE html>
<html>
<head>
<title>Ethical Hacking book</title>
<style type="text/css">
body {
font-family: verdana;
}
.button {
display: inline-block;
background: #f6f6f6;
padding: 10px 20px;
color: #000;
border: 1px solid #ccc;
cursor: pointer;
margin-top: 20px;
}
.button:hover {
box-shadow: 4px 4px 10px 0 #ccc;
}
.container textarea,
.container .brailleResult {
width: 1333px;
height: 1000px;
resize: none;
outline: none;
border: 1px solid #ccc;
box-shadow: 0 0 10px 0 #ddd;
font-size: 14px;
}
</style>
</head>
<body>
<div class="container">
<h3>Ethical Hacking</h3>
<textarea class="myText" data-chapter='["chapter one", "chapter 1"]'>Chapter 1. Introduction to Hacking. There are many definitions for hacker. Ask this question from a phalanx, and you will get a new answer every time, because more mouths will have more talks, and this is the reason behind the different definitions
of hackers, which in my opinion is quite justified for everyone has a right to think differently. In the early 1990s, the word hacker was used to describe a great programmer, someone who was able to build complex logics.
</textarea>
<div class="brailleResult"></div>
<textarea class="myText" data-chapter='["chapter two", "chapter 2"]'>Chapter 2. Linux Basics. In order to become a good ethical hacker or penetration tester, you need to be conversant with Linux, which is by far one of the most powerful operating systems. Linux is really good for ethical hacking and penetration testing
because it is compatible with a wide variety of related tools and software, whereas other operating systems such as Mac and Windows support fewer of these software and tools. In this chapter, I will teach you some of the very basics of operating
a Linux OS. If you are already familiar with Linux basics, you can skip this chapter.</textarea>
<div class="brailleResult"></div>
</div>
<script type="text/javascript">
var braille = [
['1', '⠼⠁'],
['2', '⠼⠃'],
['3', '⠼⠉'],
['4', '⠼⠙'],
['5', '⠼⠑'],
['6', '⠼⠋'],
['7', '⠼⠛'],
['8', '⠼⠓'],
['9', '⠼⠊'],
['0', '⠼⠚'],
['A', '⠠⠁'],
['B', '⠠⠃'],
['C', '⠠⠉'],
['D', '⠠⠙'],
['E', '⠠⠑'],
['F', '⠠⠋'],
['G', '⠠⠛'],
['H', '⠠⠓'],
['I', '⠠⠊'],
['J', '⠠⠚'],
['K', '⠠⠅'],
['L', '⠠⠇'],
['M', '⠠⠍'],
['N', '⠠⠝'],
['O', '⠠⠕'],
['P', '⠠⠏'],
['Q', '⠠⠟'],
['R', '⠠⠗'],
['S', '⠠⠎'],
['T', '⠠⠞'],
['U', '⠠⠥'],
['V', '⠠⠧'],
['W', '⠠⠺'],
['X', '⠠⠭'],
['Y', '⠠⠽'],
['Z', '⠠⠵'],
['a', '⠁'],
['b', '⠃'],
['c', '⠉'],
['d', '⠙'],
['e', '⠑'],
['f', '⠋'],
['g', '⠛'],
['h', '⠓'],
['i', '⠊'],
['j', '⠚'],
['k', '⠅'],
['l', '⠇'],
['m', '⠍'],
['n', '⠝'],
['o', '⠕'],
['p', '⠏'],
['q', '⠟'],
['r', '⠗'],
['s', '⠎'],
['t', '⠞'],
['u', '⠥'],
['v', '⠧'],
['w', '⠺'],
['x', '⠭'],
['y', '⠽'],
['z', '⠵'],
['\\.', '⠲'],
[',', '⠂'],
['\\?', '⠦'],
[';', '⠆'],
['!', '⠖'],
['<', '⠦'],
['>', '⠴'],
['\\[', '⠶'],
['-', '⠤'],
["'", '⠄'],
];
function checkCompatibilty() {
if (!('speechSynthesis' in window)) {
alert('Your browser is not supported. If google chrome, please upgrade!');
}
};
checkCompatibilty();
var chapters = document.querySelectorAll('.myText');
var brailleResult = document.querySelectorAll(".brailleResult");
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = false;
recognition.maxAlternatives = 1;
recognition.onresult = handleRecognition;
recognition.start();
var book = new SpeechSynthesisUtterance();
book.onend = resetRecognition;
book.default = false;
var voiceselect = window.speechSynthesis.getVoices();
book.voice = voiceselect.filter(function(voice) {
return voice.name == 'Google UK English Male';
})[0];
book.lang = 'en-EN';
book.volume = 1;
book.rate = 1;
book.pitch = 1;
function textToBraille(chapter) {
return Array.prototype.map.call(chapter, function(text) {
var result = braille.find(([key, prop]) => text === key);
return result && result[1] || text
}).join("")
}
function handleRecognition(event) {
recognition.stop();
var chapter = event.results[event.results.length - 1][0].transcript.trim();
console.log(chapter);
for (var i = 0; i < chapters.length; i++) {
if (JSON.parse(chapters[i].dataset.chapter).some(function(ch) {
return ch === chapter
})) {
speak(chapters[i].value);
brailleResult[i].innerHTML = textToBraille(chapters[i].value)
}
}
}
function resetRecognition() {
recognition.start();
}
function speak(chapter) {
book.text = chapter;
window.speechSynthesis.speak(book);
};
</script>
</body>
</html>
plnkr https://plnkr.co/edit/Xwc5iFtgbTnz13DDKC3z?p=preview