我正在读取一个二进制wav文件,将其放入一个缓冲区,并且我想再次写入完全相同的wav文件。C - 将缓冲区写入二进制文件(wav)
这是到目前为止我的代码:
file = fopen("tone1.wav", "rb");
file3 = fopen("outout.wav","wb");
fseek(file, 0, SEEK_END);
fileLen=ftell(file);
fseek(file, 0, SEEK_SET);
buffer=(char *)malloc(fileLen+1);
buffer3=(char *)malloc(fileLen+1);
fread(buffer, fileLen, 1, file);
for (int i=0;i<fileLen+1;++i){
buffer3[i]=buffer[i];
fwrite(buffer3,sizeof(buffer3),1,file3);
}
fclose(file);
fclose(file3);
free(buffer);
free(buffer3);
的问题是,outout wav文件来空,无法播放。 我不知道我在做什么错。如果我用fwrite(buffer3,sizeof(buffer3),1048,file3);
替代fwrite(buffer3,sizeof(buffer3),1,file3);
(比如说1048),我可以得到一些可播放的东西,但不是带有循环的整个wav。
谁能告诉我有什么问题吗?也许这是for循环的长度是错误的,也许我不应该把fileLen作为一个限制吗?我应该用什么来取代1?
在此先感谢
'sizeof(buffer3)' - 没有做你认为的事情;这是*指针*的大小。无论如何,我不确定你想在循环中使用'fwrite'。 – WhozCraig
你是对的我用sizeof(char)代替它,但仍然是相同的(因为我的缓冲区指向字符) –