2
#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%)

4

1 に答える 1