1

.wavファイルを読み取って、FFTアルゴリズムへの入力として生データを提供しようとしています。次のコードを使用して.wavファイルを読み取りました。

char ChunkID[4], Format[4], Subchunk1ID[4],Subchunk2ID[4];
int ChunkSize,Subchunk1Size, SampleRate, ByteRate,Subchunk2Size;
short AudioFormat, NumChannels, BlockAlign, BitsPerSample;
short *Data;

// Read the wave file
FILE *fhandle=fopen([var UTF8String],"rb");
fread(ChunkID,1,4,fhandle);
fread(&ChunkSize,4,1,fhandle);
fread(Format,1,4,fhandle);
fread(Subchunk1ID,1,4,fhandle);
fread(&Subchunk1Size,4,1,fhandle);
fread(&AudioFormat,2,1,fhandle);
fread(&NumChannels,2,1,fhandle);
fread(&SampleRate,4,1,fhandle);
fread(&ByteRate,4,1,fhandle);
fread(&BlockAlign,2,1,fhandle);
fread(&BitsPerSample,2,1,fhandle);
fread(&Subchunk2ID,1,4,fhandle);
fread(&Subchunk2Size,4,1,fhandle);
Data=(short*) malloc (sizeof(short)*Subchunk2Size/(BitsPerSample/8));  // Create an element for every sample
fread(Data,BitsPerSample/8,Subchunk2Size/(BitsPerSample/8),fhandle); // Reading raw audio data
fclose(fhandle);

ChunkIDは値「caff」を与え、フォーマットは「desc」を与えます。データに値が表示されません。私は何かを逃したことがありますか?生の音データをFFTへの入力として提供したいと思います。

4

3 に答える 3

1

データに値が表示されません。

具体的にはどういう意味ですか?Data長さがゼロだと言っていますか?

Data=(short*) malloc (sizeof(short)*Subchunk2Size/(BitsPerSample/8));  // Create an element for every sample

の実際の値はsizeof(short)*Subchunk2Size/(BitsPerSample/8)何ですか?

FILE *fhandle=fopen([var UTF8String],"rb");

var正しい値がありますか?NSString.wavサウンドファイルへのパスを表す変数だと思います。そのファイルは存在しますか?適切な長さですか?

char ChunkID[4], Format[4], Subchunk1ID[4],Subchunk2ID[4];
...
fread(ChunkID,1,4,fhandle);
fread(Format,1,4,fhandle);
fread(Subchunk1ID,1,4,fhandle);
fread(&Subchunk2ID,1,4,fhandle);

Subchunk2ID同じ方法で宣言した(そして設定した)他の3つの変数とは異なる方法で読み取っている理由はありますか?これは私にはタイプミスのように見えます。

最後に、Objective-Cの変数に大文字で始まる名前を付けないでください。これは、クラス名に対してのみ行う必要があります。これは、Cocoaでプログラミングするときに従う必要のあるスタイルの考慮事項/規則です。

于 2010-10-26T08:29:39.180 に答える
1

AudioToolbox.framework には、オーディオ ファイルを読み取るためのルーチンがあります。

于 2010-10-26T08:52:50.920 に答える
0

最初のチャンク ID が 'RIFF' ではなく 'caff' を返す場合、WAV ファイルを読み取っていないため、長さやデータを含む他のすべてのパラメータはおそらく偽物です。

于 2010-10-26T20:05:50.573 に答える