在音频

时间:2016-03-30 20:26:48

标签: javascript

我正在使用下面的JavaScript代码触发"按键"每按一次键就发出声音。 最大的问题是如果输入太快(似乎在上一个剪辑完成之前),发送到要播放的嵌入标签的下一个剪辑有一个未定义的源。

document.onkeydown = function() {
    var numberOfSongs = 3 
    var sound = new Array(numberOfSongs+1)
    sound[0]= "key1.mp3"
    sound[1]= "key2.mp3" 
    sound[2]= "key3.mp3"
    function randomNumber(){
    var randomLooper = -1
    while (randomLooper < 0 || randomLooper > numberOfSongs || isNaN(randomLooper)){    randomLooper = parseInt(Math.random()*(numberOfSongs+1))
    }
        return randomLooper
    }
    var randomsub = randomNumber()
    var soundFile = sound[randomsub]
    document.getElementById("audio").innerHTML = '<EMBED src= "' + soundFile + '" hidden=true autostart=true loop=true>';
}

我认为这很容易通过允许剪辑在前一个剪辑上播放,或允许剪辑中断前一个剪辑来解决,但这只是推测。

1 个答案:

答案 0 :(得分:0)

您获得object MyObj { var objs = Set( MyObj("MyObj1", anotherObjList), MyObj("MyObj1", anotherObjList), ) def findAll = objs.flatMap(_.anotherObjList) // if Set as return type is okay def findAll: List[Int] = objs.flatMap(_.anotherObjList)(collection.breakOut) // if elements are of type Int and you want to get a List at the end, not a Set } 的原因是因为您尝试从数组获取的其中一个值是 undefined

数组问题:

此代码:

undefined

构建一个类似于:

的数组
  

[“key1.mp3”,“key2.mp3”,“key3.mp3”,undefined]

随机数问题:

你的随机数生成器通过在数组之外生成值来完全没有帮助。

就像现在一样,你的随机数生成器将返回0到3之间的值,但你的数组只有3个位置的值,0,1和2。

效果问题:

最后,您将使用每个按键重新声明声音数组和randomNumber函数。这是不必要的,会抑制性能,尤其是在向上缩放时。

更新代码:

考虑到这一点,你可以这样做:

var numberOfSongs = 3 
var sound = new Array(numberOfSongs+1)
sound[0]= "key1.mp3"
sound[1]= "key2.mp3" 
sound[2]= "key3.mp3"

你可以在这个JS小提琴中看到一个例子:https://jsfiddle.net/egrgnmqp/2/

添加更多.mp3s

如果您要扩展它以获得更多声音文件,您还可以动态生成这些文件,而不必输入每个被推入阵列的文件。例如,如果你想要50个声音,这样的东西可以起作用:

var sound = [];
sound.push("key1.mp3");
sound.push("key2.mp3");
sound.push("key3.mp3");

function randomNumber(){
    return parseInt(Math.random()*(sound.length))
}

document.onkeydown = function() {
    var soundFile = sound[randomNumber()]
    document.getElementById("audio").innerHTML = '<EMBED src= "' + soundFile + '" hidden=true autostart=true loop=true>';
}

这个JS小提琴有一个更新的例子,说明它是如何工作的:https://jsfiddle.net/egrgnmqp/3/

干杯:-)我希望有所帮助!