如何减去另一个音频波形?在一般和C#(或如果我们不能做到这一点在C#在C / C ++)

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

我需要做什么? 开源利布斯(非GPL,LGPL,但将是确定) 如何做这样的操作(使用或不使用库)教程 文章对这个话题

PS:这是所有关于AEC ...

有帮助吗?

解决方案

如果样品是归一化到相同的电平,并且被存储在符号格式,使得“零级”是00.0,答案是相当简单:

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

每个样品S_AS_B在A和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;
}

其他提示

https://stackoverflow.com/questions/1723563/acoustic -echo-抵消AEC-在-WPF-与-C 问了一个类似的问题,有一个公认的答案。建议的库确实有某种回声消除我的想法。

不幸的是我没有不使用任何开源的音频库。我已经使用 FMOD 之前处理音频,我不记得有任何被AEC在里面,但你可以访问原始音频,因为它处理它,并在它上面运行自己的代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top