将浮子数组提供给libmfcc库



我想使用libmfcc库来计算这些系数。但是我有一系列的花车。和功能getCoefficinet想要一系列双打。我试图覆盖此功能的参数,但它仍然不起作用。最好的解决方案是,如果我从此功能中获得了浮动。什么是参数大小,它是输入数组的大小还是不同的?

    int freq = 44100, filter = 48, size = 1024, mfccCount = 26; //const
    float realPartArray = new float[size]; //input spectral array
    double mfccArray = new double[mfccCount]; //output array
    for (int i = 0; i < mfccCount; i++)
        mfccArray[i] = getCoefficient(realPartArray, freq, filter, size, i);

您不能将一种类型的数组传递给期望另一种类型数组的函数。在其他语言中可能是可能的,但是在C/C 中是不可能的。而且请不要试图施放它们,在最坏情况下,您会在最佳情况下获得丑陋的结果。

您需要将一个数组的所有值复制到另一个数组。编译器将负责将浮子施放给双倍,但是循环需要由您编写:)这是一项简单的任务,两行代码以及一些括号。

您的变量size显然是样本的数量。您需要循环。

一个小建议:即使这是有效的代码

for (int i = 0; i < mfccCount; i++)
    mfccArray[i] = getCoefficient(realPartArray, freq, filter, size, i);

请考虑每次使用ifforwhile语句使用括号。下次您想扩展该语句时,您将知道为什么

for (int i = 0; i < mfccCount; i++)
    std::cout << i << std::endl;
    mfccArray[i] = getCoefficient(realPartArray, freq, filter, size, i);

ouch!

快速答案是libmfcc等待输入上的fft数组,就序列而言:

1: wave signal ---> get window 1 ---> do FFT on window 1 ---> getCoefs
2: wave signal ---> get window 1 ---> do FFT on window 2 ---> getCoefs
...
N: wave signal ---> get window N ---> do FFT on window N ---> getCoefs

第一,第二:

在文档中,他们指出,他们正在等待获得的数组可能会使用FFTW3库准备。因此,伪代码就像:

#include <fftw3.h>
#include <libmfcc.h>
...
double **func(double *in) {
  double *out = NULL;
  double **mfccArray = NULL;
  // allocate memory, set variables...
  // Do fft on "in", in real life you'll be using Windows like (Hann, etc.) and
  //    you will split input into parts with overlapping like this:
  // in:[1,2,3,2,1,2,3,4,3,7,4,2,3,4]
  // window_size = 4; window_step = 2;
  // wnd[1]:[1,2,3,2]
  // wnd[2]:[3,2,1,2]
  // ...
  plan_forward = fftw_plan_dft_r2c_1d(N, in, out, FFTW_ESTIMATE);
  // Do MFCC loops here:
  mfccArray[i] = getCoefficient(out, freq, filter, size, i);

  return mfccArray;
}

我希望这会有所帮助。对不起,回答较晚。

相关内容

  • 没有找到相关文章

最新更新