2016-09-20 110 views
0

首先,我將首先說我是你遇到過的最差的編碼器。我正在嘗試製作一個Javascript,允許我按下一個按鈕並隨機播放聲音。我的想法是隨機做一個數學計算,然後讓一個數字與一個聲音相對應,然後這個聲音會做一個if語句。我真的不知道該從哪裏出發。我實際上不知道我是否做得對。在單個按鈕上播放隨機聲音

我的JavaScript

function myFunction() { 
var x = Math.floor((Math.random() * 10) + 1); 
var sounds = ["sound1", "sound2", "sound3", "sound4", "sound5", "sound6", "sound7", "sound8", "sound9", "sound10"]; 
sound1 = 1; 
sound2 = 2; 
sound3 = 3; 
sound4 = 4; 
sound5 = 5; 
sound6 = 6; 
sound7 = 7; 
sound8 = 8; 
sound9 = 9; 
sound10 = 10; 
sound1.src = "sound1.mp3"; 
//And so on of the sound files 

} 

我的HTML

<button onclick="mySounds()">Click for a sound</button> 
<p id="Sounds"></p> 

回答

1

您可以使用方法發揮()如下面的鏈接,這些答案。 W3 Schools

而且我認爲如果使用Math.random()方法會更好。如在後續代碼中,您可以定義最大值和最小值。

function getRandomArbitrary(min, max) { 
    return Math.random() * (max - min) + min; 
} 

你的情況分鐘數是0,最大值是最後一個項目的數組中的索引。這應該做到這一點。

如果你直接改變你的數組項目的鏈接聲音你的代碼甚至會更短。

+0

這將只適用於如果你的每個聲音的音頻元素。你必須選擇這些元素才能調用'play()' – Literphor

0

您正確使用Math.random以隨機選擇您想播放的聲音。你所要做的就是將生成的數字映射到你的聲音數組中。

然後,您可以使用jQuery發出你想聽到的聲音:https://github.com/admsev/jquery-play-sound

mySounds = [ 'sound1', 'sound2', 'sound3', 'sound4', 'sound5' ] 
function randomSound() { 
    var index = Math.floor(Math.random() * 1000) % mySounds.length; 
    $.playSound('http://yourdomain.com/sounds/' + mySounds[index]); 
} 

我再乘以1000,因爲它是更好地使用更大範圍的值。 MOD確保我們總能得到一個適合你擁有的聲音數量的值。


如果你不想使用jQuery你必須爲每個你想要的聲音的創建音頻標籤,並呼籲他們明確

HTML

<audio id="sound1" src="sounds/sound1" type="audio/wav"> 
<audio id="sound2" src="sounds/sound2" type="audio/wav"> 
<audio id="sound3" src="sounds/sound3" type="audio/wav"> 
<audio id="sound4" src="sounds/sound4" type="audio/wav"> 
<audio id="sound5" src="sounds/sound5" type="audio/wav"> 

然後選擇元素和播放聲音

Javascript

mySounds = [ 'sound1', 'sound2', 'sound3', 'sound4', 'sound5' ] 
function randomSound() { 
    var index = Math.floor(Math.random() * 1000) % mySounds.length; 
    var id = mySounds[index]; 
    var audioElement = document.getElementById(id); 
    audioElement.play(); 
} 
+0

保持javascript數組中的聲音鏈接不是更好嗎?根據您的代碼,如果有200種聲音可供選擇,頁面會變慢。隨着元素數量的增加,瀏覽器將開始反應更慢。 –

+0

如果他創建了許多音頻元素,它會變慢,因爲在加載頁面之後每個聲音都必須立即下載到瀏覽器,所以是的,這裏有一個潛在的瓶頸,但是您可以向用戶展示加載屏幕並讓他們等待爲一切下載。 – Literphor

+0

jQuery一旦被告知播放它就會下載聲音,但是另一個潛在的瓶頸在於文件大小和用戶的Internet連接。我會選擇立即加載所有的聲音,以便他們可以在點擊按鈕時立即播放 – Literphor