我正在尝试检测非常小的(1-3 秒长)音效,目前我正在使用 FMod 使用环回技术来捕捉声音(在另一个程序上播放)。
这几天我一直在研究,如何将捕获的声音效果与我存储的大约 50 个数据库进行比较,我知道比较每个二进制字节不会起作用,因为轻微的干扰会改变它。声音是每次捕获的确切音频文件。所以每次都应该几乎没有特征。
我不能使用任何已经存在的指纹库,因为它们需要记录至少 10-90 秒的音频。
由于声音很小,而且数量很少,我想你们当中的一位大师知道一个简单的解决方案,我想尝试使用 FFT 并比较一些频率等,但无法让 Kiss FFT 库在那里工作绝对没有 DOCS。
我也刚刚创建了一个分割频道的功能。这里
int SeperateChannels(FMOD::Sound *sound)
{
byte *ptr1, *ptr2;
unsigned int lenbytes, len1, len2;
sound->getLength(&lenbytes, FMOD_TIMEUNIT_PCMBYTES);
sound->lock(0, lenbytes, (void**)&ptr1, (void**)&ptr2, &len1, &len2);
byte *bufferLeft = new byte[(lenbytes/2)];
byte *bufferRight = new byte[(lenbytes/2)];
for(int i = 0; i < lenbytes; i += 4)
{
bufferLeft[i] = ptr1[i];
bufferLeft[i+1] = ptr1[i+1];
bufferRight[i] = ptr1[i+2];
bufferRight[i+1] = ptr1[i+3];
}
// Kiss FFT????
return 1;
}
非常感谢任何帮助。-阙