题
如何减去另一个音频波形?在一般和C#(或如果我们不能做到这一点在C#在C / C ++)
我有声波A和声波B(顺便说一句:它们在PCM) 我想减去A B
我需要做什么? 开源利布斯(非GPL,LGPL,但将是确定) 如何做这样的操作(使用或不使用库)教程 文章对这个话题
PS:这是所有关于AEC ...
解决方案
如果样品是归一化到相同的电平,并且被存储在符号格式,使得“零级”是0
或0.0
,答案是相当简单:
S_C = (S_A / 2) - (S_B / 2);
每个样品S_A
和S_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在里面,但你可以访问原始音频,因为它处理它,并在它上面运行自己的代码。
不隶属于 StackOverflow