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

标签 c audio wav libsndfile

我试图将鼓序列的每个 segmentation 分成二维数组内的单独数组( segmentation 的行,每个 segmentation 中数据的列)。 我在代码的前面确定了每个 segmentation 有多少样本,用户指定了速度和所需的 segmentation 。我觉得我有一个比较合理的方法来计算示例中输入文件的大小(显示的第一部分)。 我的问题是:按原样,sf_read_double while 循环不会运行。只有当我将“buflen”乘以 2(可能是 channel 数)时,循环才会运行。当它运行时 循环超过了计算的样本总数并导致 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++;                                                                                
}

最佳答案

不应该转换 sampsPerSubdivision 吗?我想它已被声明为 int。在这种情况下,你需要这样的东西:

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

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

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

关于c - 为什么不使用 sf_read_double 读取此音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17267697/

相关文章:

audio - 如何从Tokbox提取音频-什么格式?

c - 函数指针在未被调用的情况下转换为 void

c - 灵活阵列成员的真正好处是什么?

php - 存储音频路径并在网页上播放

c# - 将变量转换为时间(mm ss)

python - 使用 pydub 进行多次淡入淡出效果后质量很差

C语言: Change the contents of a string array

c - 当我将一个字符串 strcpy 到另一个字符串时,有一个空格

javascript - 控制浏览器声音

c++ - 所有规范均为 "0"时的默认 WAV 描述