Utilicé la API de AudioContext para obtener la duración del audio respondido a stackoverflow de la siguiente manera:
let durationTime; // Step 1: We need AudioContext instance to decode audio files. let context = new AudioContext(); // Step 2: Download a .mp3 file using AJAX let request = new XMLHttpRequest(); request.addEventListener('load', fileLoaded); request.open('GET', '/sounds/2W.mp3'); request.responseType = 'arraybuffer'; request.send(); // Step 3: File downloaded, need to be decoded now. function fileLoaded() { if (request.status < 400) context.decodeAudioData(request.response, fileDecoded); console.log(`durationTime at fileLoaded : ${durationTime}`) } // Step 4: File decoded, we can get the duration. function fileDecoded(audioBuffer) { // This is the duration you want, in seconds: durationTime = audioBuffer.duration; console.log(`durationTime at fileDecoded : ${durationTime}`) } console.log(`durationTime at global = ${durationTime}`)El resultado de este código de la siguiente manera:
duraciónTiempo en global = 0
duraciónTiempo en el archivo Cargado: 0
duraciónTiempo en archivoDecodificado: 1.1363125
Funciona dentro de la función fileDecoded(audioBuffer) como una variable local, pero la variable de durationTime no funciona globalmente. ¿Por qué y cómo puedo usar esta variable de durationTime de forma global?