【问题标题】:HTML5 audio multiple playHTML5 音频多重播放
【发布时间】:2018-06-13 05:58:07
【问题描述】:

我正在编写一个 Javascript 游戏,我想多次使用一个声音。我可以通过将一个声音多次加载到数组来做到这一点。但我想加载一个声音一次并将其“复制”到数组中,这样我就可以多次播放。这是我现在拥有的方法:

this.list = [
        "LaserShot", //http://www.freesound.org/samplesViewSingle.php?id=39459
        "Ding", //http://www.freesound.org/samplesViewSingle.php?id=5212
        "Rocket" //http://www.freesound.org/samplesViewSingle.php?id=47252 -> http://creativecommons.org/licenses/sampling+/1.0/
    ];

...

for (i in this.list) {
        this.sounds[this.list[i]] = new Array();

        for (var j = 0; j < this.channels; j++) {
            this.sounds[this.list[i]][j] = new Audio("./sounds/"+ this.list[i] + type);
        }
    }

我只想这样做:

for (i in this.list) {
        this.sounds[this.list[i]] = new Array();

var tempAudio = new Audio("./sounds/"+ this.list[i] + type);

        for (var j = 0; j < this.channels; j++) {
            this.sounds[this.list[i]][j] = realCopyOfTempAudio;
        }
    }

非常感谢。

【问题讨论】:

    标签: html audio copy


    【解决方案1】:

    我的经验:

    最好用相同的源创建更多的音频 html 标签。我是 js 的粉丝,但这次最好有 html 格式的 html 音频标签。

    我制作了一个重复的音频标签,并装饰了我的需求。如果您想在一秒钟内多次播放相同的声音,请添加更多克隆。

    您还可以修复自动播放错误 (代替 EXE_JUST_ONE_TIME 您可以使用覆盖点击事件,现在不重要):

        <audio controls id="LaserShot" >
         <source src="LaserShot.mp3" type="audio/mpeg">
         <source src="LaserShot.ogg" type="audio/ogg">
        </audio>
         <audio controls id="LaserShot_CLONE" >
         <source src="LaserShot.mp3" type="audio/mpeg">
         <source src="LaserShot.ogg" type="audio/ogg">
        </audio>
    
    <script>
    
      var EXE_JUST_ONE_TIME = false;
    
      document.addEventListener("click" , function(e) {
    
        if (EXE_JUST_ONE_TIME == false){
    
          EXE_JUST_ONE_TIME = true;
    
          document.getElementById("LaserShot").play();
          document.getElementById("LaserShot").pause();
    
          document.getElementById("LaserShot_CLONE").play();
          document.getElementById("LaserShot_CLONE").pause();
    
          // Buffering in progress 
          // now you can play programmability from code
          // One click or touch can prepare max 6 audios 
    
        }
     }
    
    
    Last part (need to be handled) this handler works only for one clone:
    
    
        var play_shoot = function(){
    
         if (document.getElementById('LaserShot').duration > 0 &&
           !document.getElementById('LaserShot').paused) {
    
          document.getElementById('LaserShot_CLONE').play();
    
         } else {
    
          document.getElementById('LaserShot').play();
    
         }
    
        }
    

    【讨论】:

    • 感谢您回答我五年前的问题。我会在有时间的时候尝试一下,如果可行的话,将您的问题标记为已接受。
    • 即使在今天这个答案在移动浏览器(没有自动播放功能的浏览器)上仍然是真实的!
    猜你喜欢
    • 2012-07-27
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多