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

我在README中遵循了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>

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

最佳答案

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

就我而言,此配置存在相同的错误。

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

关于c++ - Android NDK-SoundTouch中的模糊函数fabs(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46058606/

10-10 09:58