2016-10-20 6 views
1

Как вы можете видеть ниже, это похоже на единственный метод, который я могу придумать, чтобы получить количество каналов аудиофайла (включая wav, mp3) с помощью decodeAudioData(). Тем не менее, я хочу получить количество каналов без декодирования всего аудиофайла, который использует много CPU (я думаю, его процессор).Как я могу получить количество каналов аудиофайла без использования decodeAudioData()?

Есть ли какой-либо другой способ достижения этого? Если нет, существует ли способ декодирования только части файла?

Заранее благодарен!

audio_file.onchange = function() { 

    let files = this.files; 
    let file = URL.createObjectURL(files[0]); 
    let xhr = new XMLHttpRequest(); 
    xhr.open('GET', file, true); 
    xhr.responseType = "arraybuffer"; 
    xhr.onload =() => { 
     audioContext.decodeAudioData(xhr.response).then((buffer) => { 
      CHANNEL_COUNT = buffer.numberOfChannels; 
      if (CHANNEL_COUNT === 4){ 
        document.querySelector('.status').innerHTML = 'FOA file detected'; 
       } 
       else { 
        document.querySelector('.status').innerHTML = "Audio file with " + CHANNEL_COUNT + " channels detected"; 
       } 

     }); 
    } 

    xhr.send(null); 

    audioElement.src = file; 
    audioElement.load(); 

}; 

ответ

0

информация канала, как правило, в начале зашифрованного файла, так что вы можете просто скачать первые несколько тысяч байт и использовать decodeAudioData на нем. Однако, я думаю, многие аудиоконтейнеры могут поддерживать изменение количества каналов в середине файла. Вы потеряете эту информацию, но тогда будет decodeAudioData.

Смежные вопросы