如何从数组中选择随机声音? (JS)

时间:2016-02-11 19:01:32

标签: javascript arrays audio

看了但找不到我具体问题的答案。

我想做什么:

从我的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中,正如我之前所说的那样,单个声音剪辑可以工作但不是像我尝试的随机声音要做。

2 个答案:

答案 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()中放入一个数组。我的代码的目标是先获取随机整数,然后根据数组中给出的名称创建一个新音频并播放该元素。