2016-06-28 34 views
1

Ich habe Urls von mehreren Audio-Dateien wie folgen aus:Web: Wie spielt man Audiodateien nacheinander ohne Verzögerung?

example.net/{num}.mp3

Und ich möchte sie ein nach dem anderen ohne Verzögerung zwischen ihnen spielen.

Ich habe versucht, zwei Audioelemente mit preload=true und zwischen ihnen zu wechseln, aber ich habe immer noch eine Verzögerung.

Irgendwelche Ideen?

+0

Ich bin mir sicher, dass du schon darüber nachgedacht hast, aber hast du bestätigt, dass in den Audiospuren keine Stille eingebaut ist? –

Antwort

0

Sie ended Ereignis verwenden können, Array.prototype.shift() innerhalb des Arrays zum nächsten Punkt src von Element zu setzen, wenn Array .length größer als 0, rufen .load(), .play()

var url = "example.net/" 
var type = ".mp3"; 
var n = [0,1,2,3,4,5]; 
var audio = document.querySelector("audio"); 
audio.onended = function() { 
if (n.length) { 
    this.src = url + n.shift() + type; 
    this.load(); 
    this.play(); 
} 
} 
audio.src = url + n[0] + type; 
audio.load(); 
audio.play(); 
0
<html> 
<head> 
    <title>Subway Maps</title> 

    <link rel="stylesheet" type="text/css" href="main.css" /> 
</head> 
<body onload="onload();"> 
    <video id="idle_video" width="1280" height="720" onended="onVideoEnded();"></video> 
    <script> 
     var video_list  = ["Skydiving Video - Hotel Room Reservation while in FreeFall - Hotels.com.mp4", 
           "Experience Conrad Hotels & Resorts.mp4", 
           "Mount Airy Casino Resort- Summer TV Ad 2.mp4" 
          ]; 
     var video_index  = 0; 
     var video_player = null; 

     function onload(){ 
      console.log("body loaded"); 
      video_player  = document.getElementById("idle_video"); 
      video_player.setAttribute("src", video_list[video_index]); 
      video_player.play(); 
     } 

     function onVideoEnded(){ 
      console.log("video ended"); 
      if(video_index < video_list.length - 1){ 
       video_index++; 
      } 
      else{ 
       video_index = 0; 
      } 
      video_player.setAttribute("src", video_list[video_index]); 
      video_player.play(); 
     } 
    </script> 
</body> 

für refrence how to display multiple videos one by one dynamically in loop using HTML5 and javascript

1

Ich würde gerne den tatsächlichen Code von dem, was Sie bisher haben, sehen, weil ich nicht 100% sicher bin, was "zwischen ihnen wechseln" m eans, aber ich schrieb das folgende Beispiel, das die nächste Datei startet, bevor die erste beendet wird. Sie geben eine bestimmte Menge an „überlappen“, und es beginnt die nächste Datei JSFiddle spielen: http://jsfiddle.net/76xqhupw/4/

const OVERLAP_TIME = 1.0; //seconds 

const song1 = document.getElementById('audio1'); 
const song2 = document.getElementById('audio2'); 

song1.addEventListener("timeupdate", function() { 
    if (song1.duration - song1.currentTime <= OVERLAP_TIME) { 
    song2.play(); 
    } 
}); 

song1.play(); 

Dies ist nur relevant das nächste Audio-Element sofort zu spielen, da Sie gesagt haben Sie bereits zwei Audio-Elemente haben, aber wenn mir etwas fehlt, lass es mich wissen.