From 9455aae95c5aa658e12a105b3a23b7d23dd91166 Mon Sep 17 00:00:00 2001 From: Dash <389399428@qq.com> Date: Fri, 22 Sep 2017 23:39:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E4=BA=86day23=E7=9A=84?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=8C=E6=9B=B4=E6=96=B0=E4=BA=86readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 23 - Speech Synthesis/README.md | 93 +++++++++++++++++ 23 - Speech Synthesis/effects.png | Bin 0 -> 74904 bytes .../index-finished-Dashrun.html | 82 +++++++++++++++ 23 - Speech Synthesis/index-start.html | 40 +++++++ 23 - Speech Synthesis/style.css | 98 ++++++++++++++++++ README.md | 4 +- 6 files changed, 315 insertions(+), 2 deletions(-) create mode 100644 23 - Speech Synthesis/README.md create mode 100644 23 - Speech Synthesis/effects.png create mode 100644 23 - Speech Synthesis/index-finished-Dashrun.html create mode 100644 23 - Speech Synthesis/index-start.html create mode 100644 23 - Speech Synthesis/style.css diff --git a/23 - Speech Synthesis/README.md b/23 - Speech Synthesis/README.md new file mode 100644 index 0000000..c0140e4 --- /dev/null +++ b/23 - Speech Synthesis/README.md @@ -0,0 +1,93 @@ +# 23 Speech Synthesis 中文指南 + +> 本篇作者:©[大史快跑Dashrun](https://github.com/dashrun)——Chinasoft Frontend Developer + +> 简介:[JavaScript30](https://javascript30.com) 是 [Wes Bos](https://github.com/wesbos) 推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。目的是帮助人们用纯 JavaScript 来写东西,不借助框架和库,也不使用编译器和引用。现在你看到的是这系列指南的第 23 篇。完整指南在 [GitHub](https://github.com/soyaine/JavaScript30),喜欢请 Star 哦♪(^∇^*) + +> 创建时间:2017-09-20 +最后更新:2017-09-22 + +## 挑战任务 +初始文档`index-start.html`提供了一个阅读器,你需要完成如下编程任务: +1.使用相应的WebAPI接口获得浏览器支持的语言种类列表,并填充至页面的下拉菜单中,选择中文; +2.在文本域中输入对应语言的文字,点击`speak`按钮后浏览器会阅读输入的文字; +3.在浏览器阅读时,点击`stop`按钮,浏览器会停止阅读; +4.拖动`rate`和`pitch`滑块可改变阅读速度和音高。 + +## 实现效果 +![结果展示](https://github.com/dashrun/vanilla-javascript-30/blob/master/23%20-%20Speech%20Synthesis/effects.png) + +## 相关知识 +1.`SpeechSynthesisUtterance`接口 + 本接口用于设置阅读器阅读的配置参数,包括语言,阅读速度,语调等,实例化`SpeechSynthesisUtterance`后,可以通过为其属性赋值来完成参数配置,详细信息请直接参考MDN中的[SpeechSynthesisUtterance接口说明](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesisUtterance)。 +2.`SpeechSynthesis`接口 + 本接口用于控制阅读器行为,包括获取浏览器支持的朗读语言,文本朗读,暂停,停止等,接口属性中定义有paused,speaking等只读属性来表明当前的状态,详细使用方式请参考MDN中的[SpeechSynthesis接口说明](https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis)。 + +## 编程思路 + 本次编程任务使用相应接口的最基本功能即可实现,编程中根据挑战任务中的说明逐步实现即可。 + +## 过程指南 +1.取得`speechSynthesis`对象,并取得浏览器支持的朗读语言,将所有支持的选项动态添加至下拉列表 +```js +const synth = window.speechSynthesis; + +//将获取支持语言并添加至下拉列表的代码段封装在一个函数中 +function getSupportVoice() { + voices = synth.getVoices();//获取支持的语言 + for(i = 0; i < voices.length ; i++) { + var option = document.createElement('option'); + option.textContent = voices[i].name + ' (' + voices[i].lang + ')'; + + if(voices[i].default) { + option.textContent += ' -- DEFAULT'; + } + + option.setAttribute('data-lang', voices[i].lang); + option.setAttribute('data-name', voices[i].name); + voicesDropdown.appendChild(option); + } +} + +//经测试直接执行getSupportVoice()时无法获得预期效果,须由事件触发该函数。 +synth.addEventListener('voiceschanged', getSupportVoice); +``` +2.点击`speak`按钮后朗读(为方便说明,以下代码段与所提供的完成代码顺序不完全一致) +```js +//实例化配置对象 +const msg = new SpeechSynthesisUtterance(); + +//定义一段默认朗读内容 +msg.text = '你能说中文吗'; + +//点击speak按钮时阅读文字 +function speak() { + console.log(voicesDropdown.value); + synth.speak(msg); +} + +//将阅读函数绑定至`speak`按钮的点击事件上 +speakButton.addEventListener('click', speak); +``` +3.点击`stop`按钮停止朗读 +```js +//停止朗读 +function stopSpeak(){ + synth.cancel(); +} +//将停止朗读函数绑定至`stop`按钮的点击事件上 +stopButton.addEventListener('click', stopSpeak); +``` +4.参数配置可更改 +```js +//index-start.html中提供的选择器将返回rate值,pitch值以及阅读内容对应的DOM元素 + const options = document.querySelectorAll('[type="range"], [name="text"]'); +//将阅读参数赋值至msg的同名实例属性 +function paramChange(){ + msg[this.name] = this.value; +} +options.forEach(opt => opt.addEventListener('change', paramChange)); +``` + + + + diff --git a/23 - Speech Synthesis/effects.png b/23 - Speech Synthesis/effects.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f342a989f36590747051cf5cd87c885f37ad98 GIT binary patch literal 74904 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 J+;{rw{{wW=?&|;m literal 0 HcmV?d00001 diff --git a/23 - Speech Synthesis/index-finished-Dashrun.html b/23 - Speech Synthesis/index-finished-Dashrun.html new file mode 100644 index 0000000..56affc8 --- /dev/null +++ b/23 - Speech Synthesis/index-finished-Dashrun.html @@ -0,0 +1,82 @@ + + + + + Speech Synthesis + + + + +
+ +

听说 5000

+ + + + + + + + + + + + + +
+ + + + + diff --git a/23 - Speech Synthesis/index-start.html b/23 - Speech Synthesis/index-start.html new file mode 100644 index 0000000..b909453 --- /dev/null +++ b/23 - Speech Synthesis/index-start.html @@ -0,0 +1,40 @@ + + + + + Speech Synthesis + + + + +
+ +

The Voiceinator 5000

+ + + + + + + + + + + + + +
+ + + + + diff --git a/23 - Speech Synthesis/style.css b/23 - Speech Synthesis/style.css new file mode 100644 index 0000000..86bd48e --- /dev/null +++ b/23 - Speech Synthesis/style.css @@ -0,0 +1,98 @@ +html { + font-size: 10px; + box-sizing: border-box; +} + +*, *:before, *:after { + box-sizing: inherit; +} + +body { + margin: 0; + padding: 0; + font-family: sans-serif; + background-color:#3BC1AC; + display:flex; + min-height: 100vh; + align-items: center; + + background-image: + radial-gradient(circle at 100% 150%, #3BC1AC 24%, #42D2BB 25%, #42D2BB 28%, #3BC1AC 29%, #3BC1AC 36%, #42D2BB 36%, #42D2BB 40%, transparent 40%, transparent), + radial-gradient(circle at 0 150%, #3BC1AC 24%, #42D2BB 25%, #42D2BB 28%, #3BC1AC 29%, #3BC1AC 36%, #42D2BB 36%, #42D2BB 40%, transparent 40%, transparent), + radial-gradient(circle at 50% 100%, #42D2BB 10%, #3BC1AC 11%, #3BC1AC 23%, #42D2BB 24%, #42D2BB 30%, #3BC1AC 31%, #3BC1AC 43%, #42D2BB 44%, #42D2BB 50%, #3BC1AC 51%, #3BC1AC 63%, #42D2BB 64%, #42D2BB 71%, transparent 71%, transparent), + radial-gradient(circle at 100% 50%, #42D2BB 5%, #3BC1AC 6%, #3BC1AC 15%, #42D2BB 16%, #42D2BB 20%, #3BC1AC 21%, #3BC1AC 30%, #42D2BB 31%, #42D2BB 35%, #3BC1AC 36%, #3BC1AC 45%, #42D2BB 46%, #42D2BB 49%, transparent 50%, transparent), + radial-gradient(circle at 0 50%, #42D2BB 5%, #3BC1AC 6%, #3BC1AC 15%, #42D2BB 16%, #42D2BB 20%, #3BC1AC 21%, #3BC1AC 30%, #42D2BB 31%, #42D2BB 35%, #3BC1AC 36%, #3BC1AC 45%, #42D2BB 46%, #42D2BB 49%, transparent 50%, transparent); + background-size:100px 50px; +} + + +.voiceinator { + padding:2rem; + width:50rem; + margin:0 auto; + border-radius:1rem; + position: relative; + background:white; + overflow: hidden; + z-index: 1; + box-shadow:0 0 5px 5px rgba(0,0,0,0.1); +} + +h1 { + width:calc(100% + 4rem); + margin: -2rem 0 2rem -2rem; + padding:.5rem; + background: #ffc600; + border-bottom: 5px solid #F3C010; + text-align: center; + font-size: 5rem; + font-weight: 100; + font-family: 'Pacifico', cursive; + text-shadow:3px 3px 0 #F3C010; + +} + +.voiceinator input, +.voiceinator button, +.voiceinator select, +.voiceinator textarea { + width: 100%; + display: block; + margin:10px 0; + padding:10px; + border:0; + font-size: 2rem; + background:#353535; + color:white; + outline:0; +} + +textarea { + height: 20rem; +} + +input[type="select"] { + +} + +.voiceinator button { + background:#ffc600; + border:0; + width: 49%; + float:left; + font-family: 'Pacifico', cursive; + margin-bottom: 0; + font-size: 2rem; + border-bottom: 5px solid #F3C010; + cursor:pointer; + position: relative; +} + +.voiceinator button:active { + top:2px; +} + +.voiceinator button:nth-of-type(1) { + margin-right: 2%; +} + diff --git a/README.md b/README.md index 0d6d9a6..73a4b78 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ No | Guide | Demo 19 | [Webcam Fun 指南](https://github.com/soyaine/JavaScript30/blob/master/19%20-%20Webcam%20Fun/README.md) | [网络摄像头及图片处理在线效果](https://github.com/soyaine/JavaScript30/blob/master/19%20-%20Webcam%20Fun/index-finished-Dashrun.html) 20 | [Speech Detection指南](https://github.com/soyaine/JavaScript30/blob/master/20%20-%20Speech%20Detection/README.md) | [Speech Detection效果](https://github.com/soyaine/JavaScript30/blob/master/20%20-%20Speech%20Detection/index-finished-Dashrun.html) 21 | [Geolocation指南](https://github.com/soyaine/JavaScript30/blob/master/21%20-%20Geolocation/README.md) | [Geolocation效果](https://github.com/soyaine/JavaScript30/blob/master/21%20-%20Geolocation/index-finished-Dashrun.html) -22 | Follow Along Link Highlighter | - +22 | [Follow Along Link Highlighter指南](https://github.com/soyaine/JavaScript30/blob/master/22%20-%20Follow%20Along%20Link%20Highlighter/README.md) | [Follow Along Link Highlighter效果](https://github.com/soyaine/JavaScript30/blob/master/22%20-%20Follow%20Along%20Link%20Highlighter/index-finished-Dashrun.html) 23 | Speech Synthesis | - 24 | Sticky Nav | - 25 | Event Capture, Propagation, Bubbling, and Once | - @@ -80,7 +80,7 @@ Name | Contribution [@DrakeXiang](https://github.com/DrakeXiang) | No.[11](https://github.com/soyaine/JavaScript30/tree/master/11%20-%20Custom%20Video%20Player) [@zzh466](http://github.com/zzh466) | Review [@Xing Liu](https://github.com/S1ngS1ng) | Review -[@大史快跑Dashrun](https://github.com/dashrun) | No.[16](https://github.com/soyaine/JavaScript30/tree/master/16%20-%20Mouse%20Move%20Shadow).[17](https://github.com/soyaine/JavaScript30/tree/master/17%20-%20Sort%20Without%20Articles).[18](https://github.com/soyaine/JavaScript30/tree/master/18%20-%20AddingUpTimesWithReduce).[19](https://github.com/soyaine/JavaScript30/blob/master/19%20-%20Webcam%20Fun).[20](https://github.com/soyaine/JavaScript30/tree/master/20%20-%20Speech%20Detection).[21](https://github.com/soyaine/JavaScript30/tree/master/21%20-%20Geolocation) +[@大史快跑Dashrun](https://github.com/dashrun) | No.[16](https://github.com/soyaine/JavaScript30/tree/master/16%20-%20Mouse%20Move%20Shadow).[17](https://github.com/soyaine/JavaScript30/tree/master/17%20-%20Sort%20Without%20Articles).[18](https://github.com/soyaine/JavaScript30/tree/master/18%20-%20AddingUpTimesWithReduce).[19](https://github.com/soyaine/JavaScript30/blob/master/19%20-%20Webcam%20Fun).[20](https://github.com/soyaine/JavaScript30/tree/master/20%20-%20Speech%20Detection).[21](https://github.com/soyaine/JavaScript30/tree/master/21%20-%20Geolocation).[22](https://github.com/soyaine/JavaScript30/tree/master/22%20-%20Follow%20Along%20Link%20Highlighter) [@缉熙Soyaine](https://github.com/soyaine) | No.[1](https://github.com/soyaine/JavaScript30/tree/master/01%20-%20JavaScript%20Drum%20Kit).[2](https://github.com/soyaine/JavaScript30/tree/master/02%20-%20JS%20%2B%20CSS%20Clock).[3](https://github.com/soyaine/JavaScript30/tree/master/03%20-%20CSS%20%Variables).[4](https://github.com/soyaine/JavaScript30/tree/master/04%20-%20Array%20Cardio%20Day%201).[5](https://github.com/soyaine/JavaScript30/blob/master/05%20-%20Flex%20Panel%20Gallery).[6](https://github.com/soyaine/JavaScript30/blob/master/06%20-%20Type%20Ahead).[7](https://github.com/soyaine/JavaScript30/tree/master/07%20-%20Array%20Cardio%20Day%202).[8](https://github.com/soyaine/JavaScript30/tree/master/08%20-%20Fun%20with%20HTML5%20Canvas).[9](https://github.com/soyaine/JavaScript30/blob/master/09%20-%20Dev%20Tools%20Domination).[10](https://github.com/soyaine/JavaScript30/blob/master/10%20-%20Hold%20Shift%20and%20Check%20Checkboxes/README.md).[12](https://github.com/soyaine/JavaScript30/tree/master/12%20-%20Key%20Sequence%20Detection/README.md).[13](https://github.com/soyaine/JavaScript30/blob/master/13%20-%20Slide%20in%20on%20Scroll/README.md).[14](https://github.com/soyaine/JavaScript30/tree/master/14%20-%20JavaScript%20References%20VS%20Copying) ## JOIN US