2016-02-11 85 views
1

看了看,但無法找到我的具體問題的答案。如何從數組中挑選隨機聲音? (JS)

我想要做什麼:

呼叫從我的HTML或其他JS功能這一功能,發揮在我的JS數組中選擇一個隨機的聲音。

播放使用略有不同的代碼只是一個聲音作品

我可以只玩一個聲音很輕鬆了,我的代碼在這個意義上說,但我在控制檯收到此錯誤嘗試播放多種聲音與時下面的代碼:

audio.js:90 Uncaught TypeError: Cannot read property 'call' of undefined

我的代碼不能正常工作,如何解決呢?

這裏是我到目前爲止的代碼:

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

這是無效的語法:var randomSound = new SoundRandom [「sword.mp3」,「openinvy.mp3」];',應該是'var randomSound = new SoundRandom([「sword.mp3」,「openinvy.mp3 「]);' –

+0

謝謝,我解決了這個問題,但音頻仍然無法播放。我仍然得到「Uncaught TypeError:無法讀取未定義的屬性」調用,但不再是其他錯誤。 – Timble

+0

我知道我的變量定義可能有問題,但正如我所說的,我不知道如何去做。 – Timble

回答

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()。我的代碼的目標是首先獲得隨機整數,然後根據數組中給出的名稱創建一個新的音頻並播放該元素。

+0

這工作!非常感謝:D – Timble

2

這裏有一些錯誤:RandomSound不是一個數組,它是一個音頻對象。我想你想要從任何傳遞給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();