Ну, как указывало Get Off My Lawn , я по ошибке добавил несколько аудиоэлементов.
Решением было использование кода загрузки песни вне функции playButtonFunction и только сделать:
let playButtonFunction = function () {
if (playstatus === 'pause') {
musicPlay();
} else if (playstatus === 'playing') {
musicPause();
}
};
Но у меня все еще была одна проблема с функциями next / previous .В этих случаях мне нужно вызвать функцию loadAudioElement
, потому что песня меняется (когда вы нажимаете кнопку воспроизведения / паузы нет, это та же самая песня), но с этим у меня снова та же проблема.
Что ж, послеНемного покопавшись, я обнаружил, что если вы хотите постоянно воспроизводить плейлист и визуализировать музыку, ВЫ ДОЛЖНЫ ВЫПУСТИТЬ СТАРЫЙ КОНТЕКСТ ПЕРЕД ЗАГРУЗКОЙ НОВОЙ ПЕСНИ .Не только во избежание увеличения громкости песни, процессор и память также будут увеличиваться после 3-4 песен, и браузер начнет медленно работать в зависимости от машины.Итак:
1 - я создал глобальную переменную с именем clearContextAudio = false;
2 - к моим следующим / предыдущим функциям я добавил этот код:
if (closeAudioContext) { //MANDATORY RELEASE THE PREVIOUS RESOURCES TO AVOID OBJECT OVERLAPPING AND CPU-MEMORY USE
context.close();
context = new AudioContext();
}
loadAudioElement(audio.src).then(
visualizer(audio)
);
3 - В моей функции visualizer(audio)
я изменил:
let context = new AudioContext();
на
closeAudioContext = true; //MANDATORY RELEASE THE PREVIOUS RESOURCES TO AVOID OBJECT OVERLAPPING AND CPU-MEMORY USE
Значение, которое инициализируется как false, поскольку в первый раз не воспроизводится песня, ипосле воспроизведения песни вам всегда нужно будет освободить старые ресурсы, поэтому для переменной всегда будет установлено значение true.Теперь вы можете пропустить все моменты, когда вам нужна песня, и не беспокоиться о памяти и проблемах с перекрытием.
Надеюсь, что это поможет кому-то другому пытаться достичь того же самого!Привет!