如何确定<video>标签中的音频通道数? (HTML5)

时间:2016-10-31 17:44:14

标签: html5 audio video html5-video

我想将AnalyserNode附加到视频元素的每个音频通道,以便我可以进行一些音频可视化。

我的代码目前正常工作,只是AudioContext和MediaElementAudioSourceNode报告的通道数为2,无论视频中实际有多少音频通道。

let context = new AudioContext();
let source = context.createMediaElementSource(videoElement);
let srcChannelCount = source.channelCount;  // Always 2!!!

在我正在测试的情况下,我生成了一个带有1个包含8个通道的音频流的webm文件。如果我将srcChannelCount变量硬编码到特定数量的通道(例如let srcChannelCount = 8;),我的可视化会正确显示8个通道中每个通道的数据,但是我希望代码能够根据视频检测通道数量文件。

有谁能告诉我如何确定实际的源音频通道数?

1 个答案:

答案 0 :(得分:0)

您可以使用音频缓冲区的 numberOfChannels 属性。但是,您需要使用 decodeAudioData(audioData, function(buffer) {} 函数和 xhr 请求而不是音频元素。示例如下:

function getData( currSource ) {

  source = audioCtx.createBufferSource();  
  var request = new XMLHttpRequest();
  request.open('GET', currSource , true);  //for example 'sample.ogg'
  request.responseType = 'arraybuffer';

  request.onload = function() {
    var audioData = request.response;

    audioCtx.decodeAudioData(audioData, function(buffer) {
        source.buffer = buffer;
        
        console.log('detected '+buffer.numberOfChannels+' audio channels in the selected file');
        }, //end succes        
      
        function(e){
          console.log('error: '+e); //log error
        }
        
        ).catch(error => {
            console.log('failed');
        });
          
      }//end request loaded
  request.send();
}