把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) ;

posted @ 2011-03-18 09:32  shinedream  阅读(239)  评论(1)    收藏  举报