Buduję grę javascript i chcę utworzyć podkład muzyczny oparty na fragmentach plików dźwiękowych. Krótkie pliki mp3, aby odtwarzać je jako jeden ciągły utwór. Próbowałem powiązać "zakończoną" procedurę obsługi zdarzenia w pliku audio, jednak powoduje to opóźnienie między fragmentami audio.Jak usunąć pauzę między ścieżkami audio w JavaScript
Aby rozwiązać ten problem, stworzyłem niełatwe rozwiązanie, które wciąż nie działa, zmieniając dźwięk na 1 sekundę przed zakończeniem.
Ebuc.manageAudio = function(){
var listener = function (event) {
if (this.currentTime > (this.duration - 1) && Ebuc.bgnext) {
Ebuc.manageAudio();
console.log("aduio");
Ebuc.bgnext = false;
}
if(this.currentTime < 2){
Ebuc.bgnext = true;
console.log("reset");
}
console.log(event);
console.log("listener active")
};
var color = Level.current.color;
if(Ebuc.bgsong == null) {
Ebuc.bgsong = new Audio('assets/sound/' + Resources.audioSetList[color].getcurrentsong());
Ebuc.bgsong.addEventListener('timeupdate', listener, true);
}
else{
Ebuc.bgsong = new Audio('assets/sound/' + Resources.audioSetList[color].getcurrentsong());
}
Ebuc.bgsong.play();
Resources.audioSetList[color].next();
};
Ta próbka działa raz, gdy nadejdzie czas przełączenia fragmentu 2 na fragment 3, zatrzymanie pętli. Rejestrowanie konsoli detektora zdarzeń daje 4 razy dziennik przed zatrzymaniem.
Pytanie 1: Dlaczego ten eventlistener nagle znika? Q2: Czy istnieje niezatwierdzone rozwiązanie do łączenia tych fragmentów audio?
Dziękuję z góry.
Dziękuję za odpowiedź, chociaż to nie jest odpowiedź na pytanie. Problem polega na opóźnieniach w detektorach zdarzeń, po prostu zanikają, a pliki biją na cel tej modularnej pętli dźwiękowej. –
To nie jest "po prostu blaknięcie i zejście", nazywa się to przenikaniem i to tak, jak płynnie łączysz dwa fragmenty audio, które nie są częścią ciągłego przebiegu. W twoim przypadku byłaby bardzo, bardzo krótka i płynnie przechodziłaby między plikami audio bez opóźnień, których obecnie doświadczasz. Przez te kilka ms oba pliki były odtwarzane w tym samym czasie.To może nie odpowiedzieć na twoje pierwsze pytanie, ale jest to zdecydowanie nie-hackowy sposób osiągnięcia tego, o co prosisz. 'setTimeout (function() {...}, soundDuration - crossfadeDuration)' co rozwiązuje problem opóźnienia. – pantalohnes
Tak więc podczas gdy plik file1 znika, plik2 zanika. – pantalohnes