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