解释现在的整个程序:有6条音轨。我有语音识别运行,可以检测到用户语音,并且当他讲话时,第一首曲目将被完全播放,并在曲目结束时停止播放。然后它开始收听语音,并在检测到第二音轨时一直播放,直到音轨6。
我要更改的内容:正在播放第一首曲目..等待用户语音响应,如果5秒钟后没有响应,则播放下一首曲目。但是如果检测到用户响应,则立即转到下一首。
function parseResult() {
var mostrecentword = myRec.resultString.split(' ').pop();
if (mostrecentword.indexOf("") !== -1) {
setInterval(myTimer, 1);
songs[currentSong].playMode('untilDone');
songs[currentSong].play();
background(0, 255, 0);
}
}
function myTimer() {
if (millis() > startT + fiveSeconds) {
startT = millis();
console.log(startT);
currentSong++;
background(0, 0, 255);
}
}
函数draw()中没有任何内容,它为空。
function setup() {
frameRate(1);
createCanvas(600, 600);
background(255, 255, 255);
fill(0, 0, 0, 255);
myRec.start();
startT = millis();
}
然后就是设置。我使用https://github.com/IDMNYU/p5.js-speech进行语音朗读(这一部分效果很好,一点也不麻烦)
答案 0 :(得分:0)
let currentSongIndex = 0
let totalSongs = 6
let canPlay = true
let timer = null
function playSong() {
if (timer) {
clearTimeout(timer)
timer = null
}
songs[currentSongIndex].play()
timer = setTimeout(nextSong, 5000)
}
function nextSong() {
if (currentSongIndex < totalSongs) {
currentSongIndex++
}else{
currentSongIndex = 0
}
playSong()
}
function speechResult() {
var resultArray = myRec.resultString.split(' ').pop()
if (resultArray.indexOf('') > -1 && canPlay) {
nextSong()
}
}
从@lassekorsgaard得到答案