看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) vc2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) non 問題(Question): 標頭擷取都無誤,但是data擷取會錯誤,我用fopen打開音訊檔,用fread讀取後再用 fwrite寫入另一個檔案,但是輸出的音訊檔聲音完全跑掉,我規格是參考以下網頁 https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ 餵入的資料(Input): 取名為04.wav的錄音檔 預期的正確結果(Expected Output): 輸出一模一樣的音訊檔out.wav 錯誤結果(Wrong Output): 輸出入的音訊檔完全不一樣,只有大小一樣... 程式碼(Code):(請善用置底文網頁, 記得排版) #include <math.h> #include <stdlib.h> #include <iostream> #include "fun.h" int main(void) { int i; int cnt=0; char right,left; char ddd[100]; unsigned char ttt[100]; FILE *fp1,*fp2,*fp3; wave_t input; fp1=fopen("04.wav","r"); fp2=fopen("tmp.txt","w+"); fp3=fopen("out.wav","w"); fprintf(fp2,"left\tright\n"); printf("read header\n"); ///////read header/////////// fread(&input.ChunkID,4,1,fp1); fread(&input.ChunkSize,4,1,fp1); fread(&input.Format,4,1,fp1); fread(&input.Subchunk1ID,4,1,fp1); fread(&input.Subchunk1Size,4,1,fp1); fread(&input.AudioFormat,2,1,fp1); fread(&input.NumChannels,2,1,fp1); fread(&input.SampleRate,4,1,fp1); fread(&input.ByteRate,4,1,fp1); fread(&input.BlockAlign,2,1,fp1); fread(&input.BitsPerSample,2,1,fp1); fread(&input.Subchunk2ID,4,1,fp1); fread(&input.Subchunk2Size,4,1,fp1); printf("size is %d bytes \n",input.Subchunk2Size); printf(" %d Channels \n",input.NumChannels); printf("read data\n"); ////////write header///////////// fwrite(&input.ChunkID,4,1,fp3); fwrite(&input.ChunkSize,4,1,fp3); fwrite(&input.Format,4,1,fp3); fwrite(&input.Subchunk1ID,4,1,fp3); fwrite(&input.Subchunk1Size,4,1,fp3); fwrite(&input.AudioFormat,2,1,fp3); fwrite(&input.NumChannels,2,1,fp3); fwrite(&input.SampleRate,4,1,fp3); fwrite(&input.ByteRate,4,1,fp3); fwrite(&input.BlockAlign,2,1,fp3); fwrite(&input.BitsPerSample,2,1,fp3); fwrite(&input.Subchunk2ID,4,1,fp3); fwrite(&input.Subchunk2Size,4,1,fp3); ////////copy audio raw data///////////// for(i=0;i<input.Subchunk2Size;i++){ fread(&left,1,1,fp1); fwrite(&left,1,1,fp3); } printf("%d\n",cnt); printf("end\n"); fclose(fp1); fclose(fp2); fclose(fp3); return 0; } 補充說明(Supplement): 懇請各位大大指點我錯在哪,我標頭讀寫都無誤,但data讀寫都會錯 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.13.132.117
LPH66:fp1 fp3 的 mode 加個 b (變成 "rb"/"wb") 10/02 16:47
hardman1110:原來是這樣...非常謝謝你,我還在想怎麼只某些地方對 10/02 17:25