我知道Wave文件的结构。但我不知道PCM DATA的确切结构。[C++]我想从wav文件中获取PCM数据
#include
#include
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。上述如何改变?
+3
PCM有** no **结构。原始样本以8,16,24或32位有符号或无符号整数相互跟随(或者不太频繁,作为'float'或'double')。 –