我想将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个通道中每个通道的数据,但是我希望代码能够根据视频检测通道数量文件。
有谁能告诉我如何确定实际的源音频通道数?
答案 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();
}