Android NDK - SoundTouch 中的歧义函数 fabs()

Android NDK - ambiguous function fabs() in SoundTouch

本文关键字:函数 fabs 歧义 NDK SoundTouch Android      更新时间:2023-10-16

我正在尝试在Android中构建SoundTouch库。

我遵循了 SoundTouch 本身在自述文件中编写的指南,但在构建它时仍然出现此错误:

ct.cpp:238:32: error: 
call to 'fabs' is ambiguous
xcorr[offs] += (float) fabs(sum);

这行代码BPMDetect.cpp这个函数:

void BPMDetect::updateXCorr(int process_samples)
{
int offs;
SAMPLETYPE *pBuffer;
assert(buffer->numSamples() >= (uint)(process_samples + windowLen));
pBuffer = buffer->ptrBegin();
// calculate decay factor for xcorr filtering
float xcorr_decay = (float)pow(0.5, 1.0 / (xcorr_decay_time_constant * target_srate / process_samples));
#pragma omp parallel for
for (offs = windowStart; offs < windowLen; offs ++) 
{
LONG_SAMPLETYPE sum;
int i;
sum = 0;
for (i = 0; i < process_samples; i ++) 
{
sum += pBuffer[i] * pBuffer[i + offs];    // scaling the sub-result shouldn't be necessary
}
xcorr[offs] *= xcorr_decay;   // decay 'xcorr' here with suitable time constant.
xcorr[offs] += (float) fabs(sum);
}
}

由于我知道fabs()函数包含在math.h库中,至少在 c 中,我检查了文件中导入的库,如下所示:

#include <math.h>
#include <assert.h>
#include <string.h>
#include <stdio.h>

仅供参考:由于长度,我决定不发布所有代码,如果您需要它,请告诉我,我会立即发布。

您是否在STTypes.h中更改为SOUNDTOUCH_INTEGER_SAMPLES(16 位)?

就我而言,我在此配置中遇到了相同的错误。

要解决此问题,您可以尝试将晶圆厂功能更改为实验室,因为LONG_SAMPLETYPE是 16 位的长类型。