2016-10-20 5 views
1

아래에서 볼 수 있듯이 decodeAudioData()를 사용하여 오디오 파일 (wav, mp3 포함)의 채널 수를 얻는 방법을 생각할 수 있습니다. 그러나, 나는 많은 수의 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도 마찬가지입니다.