gpt4 book ai didi

javascript - Web Audio API channel 未缩混

转载 作者:行者123 更新时间:2023-11-29 10:44:00 24 4
gpt4 key购买 nike

我有一个包含 6 个声道的 AAC 文件。如果我直接在浏览器中打开它,我会听到所有 6 个 channel 都被缩混以在我的立体声扬声器上播放。如果我通过 Web Audio API 播放它,我只能听到左右声道。

我正在加载缓冲区,创建一个 AudioBufferSourceNode,将缓冲区分配给它,然后连接到 AudioContext 的目的地。

从我的控制台:

> buffer.numberOfChannels
6
> source.channelCount
2
> source.channelCountMode
"max"
> source.channelInterpretation
"speakers"
> context.destination
AudioDestinationNode {maxChannelCount: 2, channelInterpretation: "speakers", channelCountMode: "explicit", channelCount: 2, numberOfOutputs: 0…}

这是否是我听不到其他 channel 的原因,因为 destination.channelCountModeexplicit

有什么方法可以改变这个或让 AudioContext 使用它的 down-mixing logic

我创建了一个 simple jsFiddle example显示设置。如果您直接下载该文件,您将听到 6 个声道缩混为 2 个声道,但如果您通过 Web Audio Context 运行它则不会。

最佳答案

您是否注意到您的 JSFiddle 在 Firefox 中工作正常?另一方面,Chrome 无法按“预期”工作。我说的是预料之中,因为 Web Audio 仍然是一个草案,并非所有支持它的浏览器都可以实现所有功能(仅供引用,请参阅浏览器支持 here)。

我已经放了一个例子,应该可以按你的要求工作here .正如您所怀疑的那样,您需要按照您提到的 W3C 规范实现下混逻辑。这是通过 createScriptProcessor 完成的方法结合 audioprocess 事件。

代码如下(它还没有准备好生产,但你可以从这里获取它:)):

<script src="http://www.html5rocks.com/en/tutorials/webaudio/intro/js/buffer-loader.js"></script>
<script type="text/javascript">
window.onload = init;
var context;
var bufferLoader;

function init() {
window.AudioContext = window.AudioContext || window.webkitAudioContext;
context = new AudioContext();
bufferLoader = new BufferLoader(
context,
[
'http://labs.bubblefoundry.com/internet-of-cars/corsproxy.php?url=http://labs.bubblefoundry.com/internet-of-cars/sounds/5_1IDENT.m4a'
],
finishedLoading
);
bufferLoader.load();


function finishedLoading(bufferList) {
var javascriptNode = null;
var source1 = context.createBufferSource();

source1.buffer = bufferList[0];
javascriptNode = context.createScriptProcessor(2048, 6, 2); // audioContext.createScriptProcessor([bufferSize][, numberOfInputChannels][, numberOfOutputChannels]);
source1.connect(javascriptNode);
javascriptNode.connect(context.destination);

console.log(javascriptNode);

function onProcess(e) {
var in1 = e.inputBuffer.getChannelData(0); // Left input
var in2 = e.inputBuffer.getChannelData(1); // Right input
var in3 = e.inputBuffer.getChannelData(2); // Center input
var in4 = e.inputBuffer.getChannelData(3); // (??)
var in5 = e.inputBuffer.getChannelData(4); // Left Surround input
var in6 = e.inputBuffer.getChannelData(5); // Right Surround input

var leftOut = e.outputBuffer.getChannelData(0); // Left output
var rightOut = e.outputBuffer.getChannelData(1); // Right output

for (var i = 0; i < in1.length; i++) {
leftOut[i] = in1[i] + 0.7071 *(in3[i] + in5[i]); // W3C formula for Down Mixing
rightOut[i] = in2[i] + 0.7071 *(in3[i] + in6[i]); // W3C formula for Down Mixing
}
}
source1.start(0);
javascriptNode.onaudioprocess = onProcess;
}
}
</script>

我注意到您的 channel 4(在我的评论中标有 ??)似乎没有声音。但在这里,我对环绕声的了解可能不足。

关于javascript - Web Audio API channel 未缩混,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com