2012-03-21 75 views
0

我正在嘗試將PCM數據(在單獨的文件中)寫入到我創建的wav文件中。我已經寫了頭文件,並確認它已經起作用,但由於某種原因,當我嘗試將原始數據寫入它時,事實並非如此。我已經成功讀取了pcm文件到緩衝區並獲得了文件的大小。在編譯過程中,fwrite()過程沒有給我一個錯誤,但是結果文件仍然是空的。任何幫助深表感謝!謝謝!無法將PCM數據寫入wav文件

register FILE *handle; 
register FILE *lever; 
char filename[] = "test.wav"; 
handle = fopen(filename, "w"); 

lever = fopen("test.pcm","rb"); 
fseek(lever, 0, SEEK_END); 
long int lSize = ftell(lever); 
printf("%i \n",lSize); 
rewind(lever); 
char *buffer = (char*) malloc(sizeof(char)*lSize); 
if (NULL == buffer) {printf("Error creating buffer \n");} 
if (lSize != fread(buffer, 1, lSize, lever)) { 
    printf("Reading error \n"); 
} 

fwrite(buffer, sizeof(buffer), 1, handle); 
free(buffer); 

fclose(lever); 
fclose(handle); 
+1

{C | C++}選擇一個 – 111111 2012-03-21 19:06:37

+2

的sizeof(緩衝器)==的sizeof(字符*) – wildplasser 2012-03-21 19:13:43

+0

'的sizeof(char)的== 1'由定義。 – glglgl 2012-03-21 19:16:04

回答

1

如果你在windows下運行它,它可能會因文本模式輸出文件而失敗。使用handle = fopen(filename, "wb");。你確定在打開文件時沒有錯誤嗎?此外,您獲取文件大小的方式並非最佳,最好使用stat-家庭功能。如果malloc會失敗,你會得到一個「分段錯誤」。

fwrite返回寫入的項目數量,或者錯誤-1。它設置了errno,因此您可以使用perrorstrerror

編輯:wildplasser的答案是正確的解決方案。沒有注意到這個錯誤。

2

變化

fwrite(buffer, sizeof(buffer), 1, handle); 

成:

fwrite(buffer, lSize, 1, handle); 
+0

太棒了!感謝您的高舉。 – user1251380 2012-03-21 19:54:43