【问题标题】:Play a random sound on single button在单个按钮上播放随机声音
【发布时间】:2016-09-21 06:19:34
【问题描述】:

首先,我要说我是你见过的最糟糕的程序员。我正在尝试制作一个 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>

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    您可以使用以下链接中的方法 play()。 W3 Schools

    我认为最好使用 Math.random() 方法。如以下代码所示,您可以定义最大值和最小值。

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

    在您的情况下,最小值为 0,最大值为数组中最后一项的索引。应该这样做。

    如果你直接改变你的数组项,那么你的代码会更短。

    【讨论】:

    • 这仅在您为每个声音提供音频元素时才有效。您必须选择这些元素才能调用play()
    【解决方案2】:

    您需要添加一个音频标签。 这仅在浏览器支持 HTML 5 时才有效

    您可以在此处阅读有关音频标签的更多信息: http://www.w3schools.com/html/html5_audio.asp 以及此处的音频 DOM 参考: http://www.w3schools.com/tags/ref_av_dom.asp

    通过这些链接,您可以轻松实现您想做的事情。

    并检查这些关于如何更改音频源的答案

    change <audio> src with javascript

    【讨论】:

      【解决方案3】:

      您使用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 是因为使用更大范围的值会更好。该模组可确保我们始终获得适合您拥有的声音数量的值。


      如果你不想使用 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();
      }
      

      【讨论】:

      • 将声音链接保留在javascript数组中不是更好吗?根据您的代码,如果有 200 种声音可供选择,页面会变慢。随着元素数量的增加,浏览器的反应将开始变慢。
      • 如果他创建了许多音频元素,它会变慢,因为每个声音都必须在页面加载后立即下载到浏览器,所以是的,那里有一个潜在的瓶颈,但你可以呈现一个加载屏幕给用户并让他们等待所有内容下载。
      • 一旦被告知播放声音,jQuery 就会下载声音,但是还有另一个潜在的瓶颈,即文件的大小和用户的互联网连接。我会选择立即加载所有声音,以便在单击按钮时立即播放它们
      猜你喜欢
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      相关资源
      最近更新 更多