我有一小段代码,它不断从.wav文件中读取2字节样本并将它们写入新文件,并且应该能够向后搜索以重复写入文件的各个部分 . 这是它的样子:

while (readRemaining > 0) {
    while (sizeToRead > 0 && readRemaining > 0) {
        fread(&leftSample, 2, 1, fp);
        fread(&rightSample, 2, 1, fp);
        fwrite(&leftSample, 2, 1, fpout);
        fwrite(&rightSample, 2, 1, fpout);
        sizeToRead -= 4;
        readRemaining -= 4;
    }
    repeatCount++;
    sizeToRead = _grainSize;
    if (repeatCount < REPEATMAX) {
        fseek(fp, -sizeToRead, SEEK_CUR);
        readRemaining += sizeToRead;
    }
    else {
        repeatCount == 0;
    }
}

我知道它很慢而且不是最佳的,但这不是我所担心的 . 出于某种原因,fread在第一次迭代后通过外部while循环停止工作;即,在第一个if块中的fseek之后 .

如果REPEATMAX为1,则读取文件并且写入新文件没有问题 . 但如果有任何重复,文件会卡在fseek'd的位置 . 我逐步使用gdb并观察它正确搜索,但每次后续读取都没有改变leftSample或rightSample,文件指针也不会再增加 . 在调试时我尝试在读取失败后发送错误(fp),但它返回0 .

那么,有什么想法吗?先感谢您!

编辑:我应该提一下,这实际上是我之前工作过的重新考虑因素 . 我会读取等于_grainSize的数量,然后写入REPEATMAX次数,然后继续 . 这最终将在嵌入式系统中,所以我正在尝试不同的方法来测试内存和性能之间的权衡......当我切换到这个逐个样本的方法时,它停止工作 .