2012-03-21 23 views
0

私が作成しているwavファイルにPCMデータを(別のファイルで)書き込もうとしています。私はすでにヘッダーを書いていますが、それが正常に動作していることを確認しましたが、何らかの理由で未処理のデータを書き込もうとしましたが、そうではありません。私は正常に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++} 1 – 111111

+2

はsizeof(バッファ)を選択==はsizeof(チャー*) – wildplasser

+0

'のはsizeof(文字)== 1 'によって定義。 – glglgl

答えて

1

これをウィンドウで実行している場合、テキストモード出力ファイルのために失敗する可能性があります。

handle = fopen(filename, "wb");を使用してください。ファイルを開く際にエラーが発生していませんか?ファイルサイズを取得する方法も最適ではないので、statファミリ機能を使用する方が良いでしょう。 mallocが失敗すると、 "Segmentation fault"が発生します。

fwriteは、書き込まれた項目の数を返します。エラーの場合は-1を返します。 errnoを設定し、perrorまたはstrerrorを使用できます。

編集:wildplasserの答えが正しい解決策です。この間違いに気付かなかった。

2

変更に

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

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

恐ろしい!ヘッドアップをありがとう。 – user1251380

関連する問題