我正在讀取一個二進制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)代替它,但仍然是相同的(因爲我的緩衝區指向字符) –