为什么不使用sf_read_double读取此音频文件?

时间:2013-06-24 03:38:08

标签: c audio wav libsndfile

我正在尝试将鼓序列的每个细分分成2d数组内的单独数组(细分的行,每个细分中的数据列)。 我根据用户对速度和所需细分的规范,确定代码中每个细分的样本数量。我觉得我有一个合理的方法来确定样本中输入文件的大小(显示的第一部分)。 我的问题是:因为,sf_read_double while循环不会运行。只有当我乘以" buflen"循环运行的2(可能是通道数)。当它运行时  循环超过计算的样本总数并导致sug错误。我在这段代码中做错了什么?

double framesArray[sfinfo.frames];
int numframes = (sizeof(framesArray)/sizeof(double));
int totalSamps = numframes * sfinfo.channels;
int totalSubdivisions = totalSamps / sampsPerSubdivision;
int buflen = sampsPerSubdivision;


int i;
double** choppeddata = (double**) malloc(totalSubdivisions * sizeof(double**));
for (i = 0; i < totalSubdivisions; i++)
    choppeddata[i] = (double*) malloc(buflen * sizeof(double*));
double* buffereddata = (double*) malloc(buflen * sizeof(double*));
double* outdata = (double*) malloc(totalSamps * sizeof(double*));

int j = 0, k = 0, sampnum = 0;
while ((readcount = sf_read_double (infile, buffereddata, buflen)))
{
    for (k = 0; k < buflen; k++)
    {
        choppeddata[j][k] = buffereddata[k];
        sampnum++;
    }

    j++;                                                                                
}

1 个答案:

答案 0 :(得分:1)

不应该sampsPerSubdivision施放?我想它已被宣布为int。在这种情况下,您需要以下内容:

int totalSubdivisions = (int)(totalSamps / (double)sampsPerSubdivision);

所以totalSubdivisions可能是错的......无论如何,这并不能解释为什么你的buflen不适合要阅读的数据。我的猜测是sampsPerSubdivision首先是不正确的。

我不能多说。希望这可以帮助...