gpt4 book ai didi

c# - 如何从一个音频波中减去另一个音频波?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:49:25 24 4
gpt4 key购买 nike

如何从一个音频波中减去另一个音频波?通常和在 C# 中(或者如果我们不能在 C/C++ 中用 C# 做到这一点)

我有声波 A 和声波 B(顺便说一句:它们在 PCM 中)我想从 A 中减去 B

我需要什么?开源库(不是 GPL,但 LGPL 可以)关于如何进行此类操作的教程(使用或不使用库)关于这个主题的文章

PS:这都是关于 AEC 的……

最佳答案

如果样本被归一化到相同的水平,并以带符号的格式存储,使得“零水平”为00.0,则答案相当简单:

S_C = (S_A / 2) - (S_B / 2);

对于A和B中的每个样本S_AS_B

如果您对样本使用无符号值,那么您需要做更多的工作:首先,您需要将它们转换为中心为零的有符号值(例如,如果您有 16 位无符号样本,请从中减去 32768每个),然后应用公式,然后将它们转换回无符号格式。小心溢出 - 下面是如何对上述 16 位样本进行转换的示例:

#define PCM_16U_ZERO 32768

short pcm_16u_to_16s(unsigned short u)
{
/* Ensure that we never overflow a signed integer value */
return (u < PCM_16U_ZERO) ? (short)u - PCM_16U_ZERO : (short)(u - PCM_16U_ZERO);
}

unsigned short pcm_16s_to_16u(short s)
{
/* As long as we convert to unsigned before the addition, unsigned arithmetic
does the right thing */
return (unsigned short)s + PCM_16U_ZERO;
}

关于c# - 如何从一个音频波中减去另一个音频波?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1751441/

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