如何在不使用decodeAudioData()的情况下获得音频文件的通道数?

时间:2016-10-20 08:22:21

标签: javascript xmlhttprequest html5-audio web-audio

正如您在下面看到的,看起来我能想到的唯一方法是通过使用decodeAudioData()来获取音频文件(包括wav,mp3)的通道数。但是,我希望能够在不解码使用大量CPU(我认为它的CPU)的整个音频文件的情况下获得通道数。

还有其他方法可以实现吗?如果没有,有没有办法只解码文件的一部分?

提前致谢!

  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();

};

1 个答案:

答案 0 :(得分:0)

通道信息通常位于编码文件的开头,因此您只需下载前几千个字节并在其上使用decodeAudioData。但是,我认为许多音频容器可以支持更改文件中间的通道数。你会失去那些信息,但是解码音频数据也是如此。