我有一小段代码,它不断从.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次数,然后继续。这最终将在嵌入式系统中进行,所以我正在尝试不同的方法来测试内存和性能之间的权衡......当我切换到这个逐个样本的方法时,它就停止了工作。