struct WAV_Chunk_RIFF
{
char ChunkID[4]; //理论上内容应该是:'RIFF' (0x52494646)
uint32_t ChunkSize; // 36 + Subchunk2Size Size是整个文件的长度减去ID和Size的长度
char Format[4]; //理论上内容应该是:'WAVE'(0x57415645)
WAV_Chunk_RIFF()//结构体也可以有构造函数,在里面可以对成员变量 赋值
{
strcpy(ChunkID, "RIFF");
ChunkSize = 0;
strcpy(Format, "WAVE");
}
} ;
struct WAV_Chunk_FMT
{
char ChunkID[4]; //理论上内容应该是:'fmt ' (0x666D7420)
uint32_t ChunkSize; /* Size表示该区块数据的长度(不包含ID和Size的长度) 16表示没有附加信息块*/
uint16_t AudioFormat; /* PCM = 1 音频格式*/
uint16_t NumChannels; /* Mono = 1, Stereo = 2, etc. */
uint32_t SampleRate; /* 8000, 44100, etc. */
uint32_t ByteRate; /* = SampleRate * NumChannels * BitsPerSample/8 每秒数据字节数 */
uint16_t BlockAlign; /* = NumChannels * BitsPerSample/8 数据块对齐 */
uint16_t BitsPerSample; /* 8bits, 16bits, etc. 采样位数 */
WAV_Chunk_FMT()
{
strcpy(ChunkID, "fmt");
ChunkSize = 16;
AudioFormat = 1;
NumChannels = 2;
SampleRate = 44100;
ByteRate = 0;
BlockAlign = 0;
BitsPerSample = 0;
}
} ;
struct WAV_Chunk_data
{
char ChunkID[4]; /* "data" */
uint32_t ChunkSize; /* data size */
char* Chunkdata;
WAV_Chunk_data()
{
strcpy(ChunkID, "data");
ChunkSize = 0;
Chunkdata = (char*)"1234";
}
} ;
struct WAV_fotmat
{
WAV_Chunk_RIFF riff;
WAV_Chunk_FMT fmt;
WAV_Chunk_data data;
} ;
使用方式
int main()
{
WAV_fotmat gsz_WAV_fotmat;
gsz_WAV_fotmat.data.Chunkdata = new char[1000];
strcpy(gsz_WAV_fotmat.data.Chunkdata, "dat111111111111111111111111111111111111111a");
std::cout << "Hello World!\n";
}
需要说明的是:
1)此处仅仅考虑了三个数据块:RIFF ,FMT,data
2)FMT 里面是16个字节,不是18字节, 所以就是不考虑附加信息块