So entfernen Sie die Pause zwischen Audiospuren in Javascript

8

Ich baue ein Javascript-Spiel, und ich möchte eine Hintergrundmusik basierend auf Sound-Datei-Schnipsel erstellen. Kurze mp3-Dateien, um sie als einen kontinuierlichen Titel zu spielen. Ich habe versucht, einen "beendeten" Event-Handler an die Audiodatei zu binden, obwohl dies eine Verzögerung zwischen Audiofragmenten verursacht.

Um das zu lösen, habe ich eine hacky Lösung gemacht, die immer noch nicht funktioniert, indem ich das Audio 1 Sekunde vor dem Ende ändere.

%Vor%

Dieses Beispiel funktioniert einmal, wenn es Zeit ist, das Fragment 2 in das Fragment 3 zu schalten, stoppt die Schleife. Die Konsolenprotokollierung des Ereignis-Listeners gibt vor dem Stoppen 4 Mal ein Protokoll aus.

Q1: Warum verschwindet dieser Eventlistener plötzlich? F2: Gibt es eine Nicht-Hack-Lösung zum Verketten dieser Audiofragmente?

Ich danke Ihnen im Voraus.

    
Martijn de Langh 22.03.2016, 12:09
quelle

3 Antworten

7

Sie haben mehr als nur Probleme beim Versuch, schnell zwischen zwei kurzen Audioclips umzuschalten. Sie werden wahrscheinlich auch schnell zwischen den beiden Audiospuren überblenden wollen, um Popping, Artefakte usw. zu vermeiden.

Hier sehen Sie ein Beispiel für das Überblenden mit Howler aus Howlith-GitHub-Problemen. Sie könnten dieses Beispiel wahrscheinlich verwenden, und halten Sie eine Warteschlange geladener Instanzen für den Übergang bereit. Ich hoffe, das hilft.

%Vor%     
pantalohnes 24.03.2016 12:50
quelle
3

Mit der Idee, einen timeOut in der Antwort von pantalohnes zu setzen, habe ich den folgenden Code erstellt, um die Lücke zu schließen:

%Vor%

Das Timeout von 50 Millisekunden überbrückt genau die Lücke zwischen den sequenzierten Dateien.

    
Martijn de Langh 25.03.2016 10:38
quelle
1

Beantworten Sie Ihre Frage (obwohl ich sehe, dass Sie eine andere Lösung gefunden haben), ich glaube, ich habe Ihren Fehler gefunden:

Beim zweiten Aufruf von Ebuc.manageAudio () ist Ebuc.bgsong bereits festgelegt und Sie erstellen einfach ein neues Audio Ebuc.bgsong = new Audio(...) , ohne den Listener anzuhängen, sodass Sie für keine 'timeupdate'-Ereignisse benachrichtigt werden beim Abspielen der zweiten Audiodatei ausgegeben.

Sie sollten den Listener auch vom vorherigen wiedergebenden Audio entfernen.

Also, wenn alles andere in Ordnung ist, denke ich, das sollte es beheben:

%Vor%

Mehr als das, ich denke, dass, wenn Sie den Zuhörer von der vorherigen Wiedergabe-Audio richtig entfernen, Sie diesen bgnext Hack überhaupt nicht brauchen werden:

%Vor%

Lass es mich wissen, wenn das funktioniert hat :)

    
Yoav Aharoni 30.03.2016 23:59
quelle

Tags und Links