我知道Wave文件的結構。但我不知道PCM DATA的確切結構。[C++]我想從wav文件中獲取PCM數據
#include<iostream>
#include<fstream>
using namespace std;
struct WAVE_HEADER{
char Chunk[4];
int ChunkSize;
char format[4];
char Sub_chunk1ID[4];
int Sub_chunk1Size;
short int AudioFormat;
short int NumChannels;
int SampleRate;
int ByteRate;
short int BlockAlign;
short int BitsPerSample;
char Sub_chunk2ID[4];
int Sub_chunk2Size;
};
struct WAVE_HEADER waveheader;
int main(){
FILE *sound;
sound = fopen("music.wav","rb");
short D;
fread(&waveheader,sizeof(waveheader),1,sound);
cout << "BitsPerSample : " << waveheader.BitsPerSample << endl;
while(!feof(sound)){
fread(&D,sizeof(waveheader.BitsPerSample),1,sound);
cout << int(D) << endl;
}
}
上面的代碼是我到目前爲止所做的。此外,此代碼可以精確地讀取標題。但我不知道這是否可以精確讀取PCM數據部分。有沒有PCM數據結構的參考?我找不到它。 「music.wav」每樣本16位,16字節速率,立體聲通道和兩個blockAlign。上述如何改變?
PCM有** no **結構。原始樣本以8,16,24或32位有符號或無符號整數相互跟隨(或者不太頻繁,作爲'float'或'double')。 –