把PCM写到wav格式的程序例子.
typedef struct _tagWAVEHEAD
{
char ChunkID[4] ;
int ChunkSize ;
char Format[4] ;
char SubChunk1Id[4] ;
int SubChunk1Size ;
short AudioFormat ;
short NumChannels ;
int SampleRate ;
int ByteRate ;
short BlockAlign ;
short BitsPerSample ;
//short reserved ;
char SubChunk2Id[4] ;
int SubChunk2Size ;
int SubChunk2Data ;
char SubChunkDataId[4] ;
int SubChunkDataSize ;
}WAVHead ;
{
static WAVHead wavHead =
{
{'R','I','F','F'}, // char ChunkID[4] ;
0, // int ChunkSize ;
{'W','A','V','E'} , // char Format[4] ;
{'f','m','t',' '} , //char SubChunk1Id[4] ;
0x10, // int SubChunk1Size ;
1, // short AudioFormat ;
1, // short NumChannels ;
16000 , // int SampleRate ;
32000, // int ByteRate ;
2, // short BlockAlign ;
16, // short BitsPerSample ;
{'f','a','c','t'} , // char SubChunk2Id[4] ;
4, // int SubChunk2Size ;
0, // int SubChunk2Data ;
{'d','a','t','a'} , // char SubChunkDataId[4] ;
0, // int SubChunkDataSize ;
};
wavHead.SubChunkDataSize = nLength*sizeof(uint16) ;
wavHead.ChunkSize = nLength*sizeof(uint16)+sizeof(wavHead)-8;
if (PCMTYPE_8K== pcmType )
{
wavHead.SampleRate = 8000;
}
else
wavHead.SampleRate = 16000;
wavHead.ByteRate = 2*wavHead.SampleRate;
fwrite(&wavHead,sizeof(wavHead),1, fWrite) ;
浙公网安备 33010602011771号