#include <stdio.h>
#include <string.h>
int main() {
FILE *fin,*fout;
char buffer[1028];
int readcount=0;
short NumChannels = 1;
short BitsPerSample = 16;
int SamplingRate =8000;
short numOfSamples = 160;
int ByteRate = NumChannels*BitsPerSample*SamplingRate/8;
short BlockAlign = NumChannels*BitsPerSample/8;
int DataSize = NumChannels*numOfSamples * BitsPerSample/8;
int chunkSize = 16;
int totalSize = 36 + DataSize;
short audioFormat = 1;
if((fout = fopen("sample.wav", "w")) == NULL)
{
printf("Error opening out file ");
}
//totOutSample = 0;
fwrite("RIFF", sizeof(char), 4,fout);
fwrite(&totalSize, sizeof(int), 1, fout);
fwrite("WAVE", sizeof(char), 4, fout);
fwrite("fmt ", sizeof(char), 4, fout);
fwrite(&chunkSize, sizeof(int),1,fout);
fwrite(&audioFormat, sizeof(short), 1, fout);
fwrite(&NumChannels, sizeof(short),1,fout);
fwrite(&SamplingRate, sizeof(int), 1, fout);
fwrite(&ByteRate, sizeof(int), 1, fout);
fwrite(&BlockAlign, sizeof(short), 1, fout);
fwrite(&BitsPerSample, sizeof(short), 1, fout);
fwrite("data", sizeof(char), 4, fout);
fwrite(&DataSize, sizeof(int), 1, fout);
fclose(fout);
fin=fopen("sample.raw","r");
fout=fopen("sample.wav","a");
while(!feof(fin))
{
fgets(buffer,sizeof(buffer),fin);
fputs(buffer,fout);
}
fclose(fin);
fclose(fout);
}
誰でもこのコードの問題を解決するのを手伝ってくれますか? ヘッダーは適切で、ファイルにも適切に書き込まれています。しかし、.wav ファイルを開くと、1 つの余分なフィールドが表示されます。また、ファイルが再生されていません。メディア情報を使用してファイルを開こうとすると、デュレーション以外のプロパティが期待どおりに表示されます
フォーマット : Wave ファイルサイズ
: 8.29 KiB 持続時間 : 20ms 全体ビットレートモード : 固定 全体ビットレート
: 3 394 Kbpsオーディオ フォーマット : PCM フォーマット設定、エンディアンネス : リトル フォーマット設定、符号
: 符号付きコーデック ID : 1 持続時間
: 20ms ビット レート モード : 一定 ビット レート
: 128 Kbps チャネル : 1 チャネル サンプリング レート : 8 000 Hz ビット深度
: 16ビット ストリーム サイズ : 320 バイト (4%)