audio.duration возвращает infinity, почему?

При этом currentTime работает корректно. А вот duration работать не хочет, что не так? При этом если песня на сервере полностью проигралась - duration определяется правильно.введите сюда описание изображения

<audio src="../assets/tracks/104_Skriptonit_Miyagi_-_NE_ZHAL_68476686.mp3" data-musicid="0" class="track_audio"></audio>

 $('.track_audio').trigger('load');
    var audio = document.querySelector('.track_audio');
    
    const updateProgress = function (e) {
        console.log(e.target.currentTime);
        console.log(e.target.duration);
    }
    
    
    audio.addEventListener('timeupdate', updateProgress)
    
    console.log(audio.duration)

Ответы (1 шт):

Автор решения: Опан

Сразу после объявления audio (т. е., по ходу загрузки страницы) до выполнения остального кода не успевают загрузиться метаданные из аудиофайла, (audio.duration) поэтому вывод этого свойства следует обернуть функцией

    audio.onloadedmetadata = function(){console.log(this.duration)};
     // или
audio.onloadeddata = function(){console.log(this.duration)};

другие альтернативные случаи, когда выводится duration:

  1. временная задержка после объявления audio с помощью setTimeout().
  2. вывод duration по нажатию на кнопку или другому событию: (можно автоматическому)

button.onclick = "console.log(audio.duration)";

  1. Когда слишком много строк кода между объявлением audio и выводом duration.

В Вашем случае выводится уже после того, как начинает играть.

→ Ссылка