0

すべての wav ファイルのメタデータを読み取るプログラムがあります。次の解析済み構造体と fread 関数を使用しました。

このコードで発生する問題は、一部の .wav RIFF ヘッダー fmt ファイルで、以下に示すように構造体をペアリングした後でもメタ データの読み取りが正しくないことです。

#include <iostream>
#include <string>
#include <fstream>

using namespace std;
using std::string;



typedef struct RIFF_CHUNCK_DISCRIPTOR {
    char                RIFF[4];        // RIFF Header      Magic header
    unsigned long       ChunkSize;      // RIFF Chunk Size  
    char                WAVE[4];        // WAVE Header      

};
typedef struct FMT_CHUNCK_DISCRIPTOR {
    char                fmt[4];         // FMT header       
    unsigned long       Subchunk1Size;  // Size of the fmt chunk                                
    unsigned short      AudioFormat;    // Audio format 
    unsigned short      NumOfChan;      // Number of channels 
    unsigned long       SamplesPerSec;  // Sampling Frequency in Hz                             
    unsigned long       bytesPerSec;    // bytes per second 
    unsigned short      blockAlign;     // 2=16-bit mono, 4=16-bit stereo 
    unsigned short      bitsPerSample;  // Number of bits per sample      
    
};
typedef struct  DATA_SUB_CHUNCK {
    char                Subchunk2ID[4]; // "data"  string   
    unsigned long       Subchunk2Size;  // Sampled data length    

};

int main(int argc, char* argv[]) {
    const char* fileName;
    cout << "enter f name " << fileName;
    RIFF_CHUNCK_DISCRIPTOR RCD;
    FMT_CHUNCK_DISCRIPTOR FCD;
    DATA_SUB_CHUNCK    DSC;

    FILE* InFile = fopen(fileName, "r");
    fread(&RCD, 1, sizeof(RIFF_CHUNCK_DISCRIPTOR), InFile);
    fread(&FCD, 1, sizeof(FMT_CHUNCK_DISCRIPTOR), InFile);
    fread(&DSC, 1, sizeof(DATA_SUB_CHUNCK), InFile);
    
 }

複数の構造体を使用した理由は、ヘッダー ファイルのすべてのデータが正しく読み取られるようにするためです。ほとんどの wav ファイル ヘッダー データは正しい順序であるにもかかわらず、正しくない場合があるためです。

4

1 に答える 1