看了但找不到我具体问题的答案。
我想做什么:
从我的HTML或其他JS函数中调用此函数,并播放从我的JS中的数组中选择的随机声音。
使用略有不同的代码播放一个声音
我可以轻松播放一首声音,我的代码在这个意义上有效,但是当我尝试使用以下代码播放多个声音时,我在控制台中出现此错误:
audio.js:90 Uncaught TypeError:无法读取属性' call' 未定义的
我的代码不起作用,如何解决?
到目前为止,这是我的代码:
var SoundRandom = function (soundNameRandom) {
this.soundNameRandom = soundNameRandom;
}
SoundRandom.prototype.playRandomSound = function() {
RandomSound = new Audio(this.soundNameRandom);
var randomSound = Math.random() * 10;
if (randomSound > 5 && isMuted == false) {
RandomSound[0].play();
}
else if (randomSound < 6 && isMuted == false) {
RandomSound[1].play();
}
}
var randomSound = new SoundRandom(["sword.mp3", "openinvy.mp3"]);
我用
打电话randomSound.playRandomSound();
我的问题
我的代码出了什么问题?我做错了什么或者我应该改变什么?我只想用Javascript做什么?我宁愿不使用Jquery。我对Javascript的音频方面比较新,所以可能会有一些我不知道的事情。
另外,我不想使用HTML音频标签,我想把所有内容保存在JS中,正如我之前所说的那样,单个声音剪辑可以工作但不是像我尝试的随机声音要做。
答案 0 :(得分:2)
这里有一些错误:RandomSound
不是数组,它是一个Audio对象。我想你想从传递给SoundRandom
的任何内容中选择一首随机歌曲。为此,您需要生成介于0和传递给SoundRandom
构造函数的数组长度之间的随机数,并使用随机索引处的文件创建Audio
对象。这看起来更像是这样(尚未测试过):
var SoundRandom = function (sounds) {
this.sounds = sounds;
}
SoundRandom.prototype.playRandomSound = function() {
var randomIndex = Math.floor(Math.random() * this.sounds.length);
var randomSound = new Audio(this.sounds[randomIndex]);
// play random sound
if (isMuted === false) {
randomSound.play();
}
}
var soundRandom = new SoundRandom(["sword.mp3", "openinvy.mp3"]);
soundRandom.playRandomSound();
答案 1 :(得分:2)
试试这个:
SoundRandom.prototype.playRandomSound = function() {
var randomSound = Math.random() * 10;
if (randomSound > 5 && isMuted == false) {
RandomSound = new Audio(this.soundNameRandom[0]);
RandomSound.play();
}
else if (randomSound < 6 && isMuted == false) {
RandomSound = new Audio(this.soundNameRandom[1]);
RandomSound.play();
}
}
我不知道这是否有效。但是,Audio
元素必须是字符串,而是在new Audio()
中放入一个数组。我的代码的目标是先获取随机整数,然后根据数组中给出的名称创建一个新音频并播放该元素。