- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 http://www.masswerk.at/mespeak/ 中的 MeSpeak 库编写了一些简单的 javascript
如果输入脚本包含括号和数字,我想做的是在单词之间暂停几秒钟(即 - “[3]”将暂停 3 秒)...
我已经在其他地方看到了更优雅的方法,但是,这里让我困惑的是为什么下面的代码不播放第二个单词? (在 FireFox 25.0.1 版和 meSpeak 1.8.1 版中测试)
代码如下:
<html>
<head>
<script src="mespeak.js"></script>
</head>
<body>
<button onclick="speakdata('Testing Word [2]Another [3]Again [5]Blah')">Talk</button>
<div id="audio"></div>
<script>
meSpeak.loadConfig("mespeak_config.json");
meSpeak.loadVoice("voices/en/en-us.json");
var t=0;
var speechArr = [];
var pauseArr = [];
var len =0;
var recurseLoop = 0;
function speakdata(spokendata) {
var looper = new Boolean();
looper = true;
var posCount = new Number(0);
var pauseCount = new Number(0);
while (looper)
{
if (spokendata.substring(posCount).indexOf("[") == -1) {
speechArr.push(meSpeak.speak (spokendata.substring(posCount)),{ 'rawdata': true });
pauseArr.push(0);
len++;
looper = false;
} else {
if (posCount == 0) {
speechArr.push(meSpeak.speak(spokendata.substring(posCount,spokendata.indexOf("[")-1),{ 'rawdata': true }));
pauseArr.push(0);
len++;
}
pauseCount += parseInt(spokendata.substring(posCount).substring(spokendata.substring(posCount).indexOf("[")+1, spokendata.substring(posCount).indexOf("]")))
posCount = parseInt(posCount+spokendata.substring(posCount).indexOf("]")+1)
if (spokendata.substring(posCount).indexOf("[") != -1) {
var posCount2 = spokendata.substring(posCount).indexOf("[");
speechArr.push(meSpeak.speak(spokendata.substring(posCount,posCount2+posCount),{ 'rawdata': true }));
pauseArr.push(pauseCount*1000);
len++;
posCount = posCount2+posCount
looper = true;
} else {
speechArr.push(meSpeak.speak(spokendata.substring(posCount),{ 'rawdata': true }));
pauseArr.push(pauseCount*1000);
len++;
looper = false;
}
}
}
setTimeout(function(){meSpeak.play(speechArr[0],1,playNext)},pauseArr[0]);
recurseLoop++;
}
function playNext() {
if (recurseLoop < len) {
setTimeout(function(){meSpeak.play(speechArr[recurseLoop],1,playNext)},pauseArr[recurseLoop]);
recurseLoop++;
}
}
</script>
</body>
</html>
最佳答案
所以......我想我找到了:
setTimeout(function(){meSpeak.play(speechArr[0],1,playNext)},pauseArr[0]);
recurseLoop++;
function playNext() {
if (recurseLoop < len) {
setTimeout(function(){meSpeak.play(speechArr[recurseLoop],1,playNext)},pauseArr[recurseLoop]);
recurseLoop++;
}
}
为我记录序列:
timeout to 0 Testing Word
playing "Testing Word"
timeout to 1 Another
playing "Again "
timeout to 2 Again
playing "Blah"
timeout to 3 Blah
playing undefined
Speak: Can't play, not an Array, or ArrayBuffer, or base64-String: [object Undefined]
ended
请注意“recurseLoop++;”就在超时之后!
这会影响
将代码更改为在“playNext()”的最开始处递增可以解决问题:
setTimeout(function(){meSpeak.play(speechArr[0],1,playNext)},pauseArr[0]);
function playNext() {
if (++recurseLoop < len) {
setTimeout(function(){meSpeak.play(speechArr[recurseLoop],1,playNext)},pauseArr[recurseLoop]);
}
}
这会记录以下序列:
timeout to 0 Testing Word
playing "Testing Word"
timeout to 1 Another
playing "Another "
timeout to 2 Again
playing "Again "
timeout to 3 Blah
playing "Blah"
ended
(我对 未定义 值非常着迷,它看起来像是 mespeak.js 中或寻址 meSpeak.speak() 中的错误,以至于我完全错过了迭代中的这种跳过 - 请参阅其他人也可以尝试一下。)
关于javascript - meSpeak.js - 使用回调方法时不播放第二个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20215355/
我使用 http://www.masswerk.at/mespeak/ 中的 MeSpeak 库编写了一些简单的 javascript 如果输入脚本包含括号和数字,我想做的是在单词之间暂停几秒钟(即
我是 meSpeak.js 的新手. 我无法接受他们演示中的默认声音。我尝试使用他们提供的选项,但没有太大区别。 我想知道如何调整它才能使声音接近 Siri 的水平,而不是像他们演示中那样的机器人。我
我正在编辑 Mespeak.js 来帮助解决视觉跟踪问题的 friend 。 我一直在浏览 Mespeak.js ( http://www.masswerk.at/mespeak/ ) 并试图弄清楚如
我是一名优秀的程序员,十分优秀!