Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定a<;中的音频通道数;视频>;标签?(HTML5)_Html_Audio_Video_Html5 Video - Fatal编程技术网

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

如何确定a<;中的音频通道数;视频>;标签?(HTML5),html,audio,video,html5-video,Html,Audio,Video,Html5 Video,我想在视频元素的每个音频通道上附加一个AnalyzerNode,以便进行音频可视化 我的代码目前运行正常,除了AudioContext和MediaElementAudioSourceNode都报告通道计数为2,而不管视频中实际有多少个音频通道 let context = new AudioContext(); let source = context.createMediaElementSource(videoElement); let srcChannelCount = source.chan

我想在视频元素的每个音频通道上附加一个AnalyzerNode,以便进行音频可视化

我的代码目前运行正常,除了AudioContext和MediaElementAudioSourceNode都报告通道计数为2,而不管视频中实际有多少个音频通道

let context = new AudioContext();
let source = context.createMediaElementSource(videoElement);
let srcChannelCount = source.channelCount;  // Always 2!!!
在我正在测试的情况下,我生成了一个webm文件,其中包含一个包含8个通道的音频流。如果我将srcChannelCount变量硬编码为特定数量的通道(例如,
让srcChannelCount=8;
),我的可视化将正确显示8个通道中每个通道的数据,但是我希望代码根据视频文件检测通道数


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

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

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

这行得通吗:另外请注意,并非所有浏览器都支持所有功能…这里还有一个链接,非网站链接: