发布
社区首页 >问答首页 >嵌入音频后未定义的标记源

嵌入音频后未定义的标记源
EN

Stack Overflow用户
提问于 2016-03-30 20:26:48
回答 1查看 31关注 0票数 0

每次按下键时,我都会使用下面的JavaScript代码触发一个"keypress“声音。最大的问题是,如果键入过快(似乎在前一个剪辑完成之前),发送到要播放的嵌入标记的下一个剪辑有一个未定义的源。

代码语言:javascript
代码运行次数:0
复制
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>';
}

我认为这是很容易解决的,允许一个剪辑播放,或允许一个剪辑中断前一个剪辑,但这只是猜测。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-31 13:28:21

获得undefined的原因之一是,您试图从数组中获得的值之一是undefined

数组问题:

此代码:

代码语言:javascript
代码运行次数:0
复制
var numberOfSongs = 3 
var sound = new Array(numberOfSongs+1)
sound[0]= "key1.mp3"
sound[1]= "key2.mp3" 
sound[2]= "key3.mp3"

正在构建一个如下所示的数组:

"key1.mp3“、"key2.mp3”、"key3.mp3",未定义

随机数问题:

随机数生成器在数组之外生成值对事情没有任何帮助。

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

性能问题:

最后,您将使用每个按键重新声明声音数组和randomNumber函数.这是不必要的,并将抑制性能,特别是当规模上升。

更新代码:

考虑到这一点,你这样的事情可能会奏效:

代码语言:javascript
代码运行次数:0
复制
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/2/

添加更多的.mp3s

如果要将其扩展为具有更多声音文件,则还可以动态生成这些文件,而不必键入被推到数组中的每个文件。例如,如果您想要50个声音,这样的东西可以工作:

代码语言:javascript
代码运行次数:0
复制
var sound = [];
for(var i = 1; i <= 50; i++) {
    sound.push("key"+i+".mp3");
}

这个JS有一个更新的示例来说明它的工作方式:https://jsfiddle.net/egrgnmqp/3/

干杯:-)我希望这能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36319042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档