【问题标题】:What is the "proper" way to sum multi channel audio buffers to mono将多通道音频缓冲区与单声道相加的“正确”方法是什么
【发布时间】:2016-02-16 09:48:08
【问题描述】:

我正在使用通道拆分器和合并器尝试将立体声文件拆分为两个离散的通道,然后将它们作为“单声道”输入源汇集到节点图中,并在左右显示器上播放。我想出了一种方法,但它使用了设置为 0.5 的 stereoPanner 节点,感觉有点“hacky”。如果不使用 stereoPanner 节点,我将如何做到这一点?

//____________________________________________BEGIN Setup

var merger = audioContext.createChannelMerger();
var stereoPanner = audioContext.createStereoPanner();
var stereoInputSource = audioContext.createBufferSource();
stereoInputSource.buffer = soundObj.soundToPlay;

//____________________________________________END Setup


stereoInputSource.connect(merger, 0, 0);
merger.connect(stereoPanner);

stereoPanner.pan.value = 0.5;

stereoPanner.connect(audioContext.destination);

【问题讨论】:

    标签: web-audio-api


    【解决方案1】:

    创建一个只有一个通道的 ChannelMerger 并使用 to 强制缩混?

    【讨论】:

    • 我回答了我自己的问题,但我同意我会考虑为此使用合并。我只需要一个通道分配器。我很好奇您对我发布的答案有何看法。
    【解决方案2】:

    只取左右样本的平均值(平均值)。

    【讨论】:

    • 我不知道该怎么做,想显示一些代码吗?
    【解决方案3】:

    我想我是在想这个。以下似乎有效。我猜节点的名称有点令人困惑。虽然我需要一个合并节点来处理这个

    stereoInputSource.connect(splitter);
    
    splitter.connect(monoGain, 0); // left output
    splitter.connect(monoGain, 1); // right output
    
    monoGain.connect(audioContext.destination);
    

    编辑

    克里斯提到的“正确”方式。在合并节点调用上显式设置输出通道让我感到困惑。

    var stereoInputSource = audioContext.createBufferSource();
    var merger = audioContext.createChannelMerger(1); // Set number of channels
    
    stereoInputSource.buffer = soundObj.soundToPlay;
    stereoInputSource.connect(merger);
    merger.connect(audioContext.destination)
    

    【讨论】:

    • 唯一的问题是您应该将单增益设置为 0.5,因此求和不会剪辑。 (顺便说一句,这与上面的“取平均值”答案相同。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2018-04-15
    • 2019-01-02
    • 2015-01-14
    • 2020-05-29
    • 1970-01-01
    相关资源
    最近更新 更多