有获取WAVE文件的Sample Rate的代码吗?

解决方案 »

  1.   

    Type 
      TPCMWaveHeader = record 
         rID             : array[0..3] of char;   { 'RIFF' Identifier } 
         rLen            : longint; 
         wID             : array[0..3] of char;   { 'WAVE' Identifier } 
         fId             : array[0..3] of char;   { 'fmt ' Identifier } 
         fLen            : longint;               { Fixed, must be 16 } 
         wFormatTag      : word;                  { Fixed, must be 1 } 
         nChannels       : word;                  { Mono=1, Stereo=2 } 
         nSamplesPerSec  : longint;               { SampleRate in Hertz } 
         nAvgBytesPerSec : longint; 
         nBlockAlign     : word; 
         nBitsPerSample  : word;                  { Resolution, e.g. 8 or 16 } 
         dId             : array[0..3]of char;    { 'data' Identifier } 
         dLen            : longint;               { Number of following data bytes } 
      end; 
      
      procedure WritePCMWaveFile(Filename : string; Resolution, Channels, Samplerate, Samples : integer; Data : Pointer); 
      var h : TPCMWaveHeader; 
          f : file; 
          databytes : integer; 
      begin 
        DataBytes:=Samples; 
        DataBytes:=DataBytes*Channels;                  { double if stereo } 
        DataBytes:=DataBytes*(Resolution div 8);       { double if 16 Bit } 
      
      
        FillChar(h,SizeOf(TPCMWaveHeader),#0); 
        with h do 
        begin 
          rID[0]:='R'; 
          rID[1]:='I'; 
          rID[2]:='F'; 
          rID[3]:='F';                                 { 1st identifier } 
          rLen:=DataBytes+36; 
          wID[0]:='W'; 
          wID[1]:='A'; 
          wID[2]:='V'; 
          wID[3]:='E';                                 { 2nd identifier } 
          fId[0]:='f'; 
          fId[1]:='m'; 
          fId[2]:='t'; 
          fID[3]:=Chr($20);                            { 3rdidentifier ends with a space character } 
          fLen:=$10;                                   { Fixed, must be 16 } 
          wFormatTag:=1;                               { Fixed, must be 1 } 
          nChannels:=Channels;                         { Channels } 
          nSamplesPerSec:=SampleRate;                  { Sample rate in Hertz } 
          nAvgBytesPerSec:=SampleRate*Channels*trunc(Resolution div 8); 
          nBlockAlign:=Channels*(Resolution div 8);    { Byte order, see below } 
          nBitsPerSample:=Resolution; 
          dId[0]:='d'; 
          dId[1]:='a'; 
          dId[2]:='t'; 
          dId[3]:='a';                                 { Data identifier } 
          dLen:=DataBytes;                             { number of following data bytes } 
        end; 
        AssignFile(f,filename); 
        ReWrite(f,1); 
        BlockWrite(f,h,SizeOf(h)); 
        BlockWrite(f,pbytearray(data),databytes); 
        CloseFile(f); 
      
      end; WAVE文件的文件头并不复杂!上面是个写入文件头的程序!用FileStream打开,很容易获取SampleRate,Channels,
      

  2.   

    Type 
      TPCMWaveHeader = record 
         rID             : array[0..3] of char;   { 'RIFF' Identifier } 
         rLen            : longint; 
         wID             : array[0..3] of char;   { 'WAVE' Identifier } 
         fId             : array[0..3] of char;   { 'fmt ' Identifier } 
         fLen            : longint;               { Fixed, must be 16 } 
         wFormatTag      : word;                  { Fixed, must be 1 } 
         nChannels       : word;                  { Mono=1, Stereo=2 } 
         nSamplesPerSec  : longint;               { SampleRate in Hertz } 
         nAvgBytesPerSec : longint; 
         nBlockAlign     : word; 
         nBitsPerSample  : word;                  { Resolution, e.g. 8 or 16 } 
         dId             : array[0..3]of char;    { 'data' Identifier } 
         dLen            : longint;               { Number of following data bytes } 
      end; 
      
      procedure WritePCMWaveFile(Filename : string; Resolution, Channels, Samplerate, Samples : integer; Data : Pointer); 
      var h : TPCMWaveHeader; 
          f : file; 
          databytes : integer; 
      begin 
        DataBytes:=Samples; 
        DataBytes:=DataBytes*Channels;                  { double if stereo } 
        DataBytes:=DataBytes*(Resolution div 8);       { double if 16 Bit } 
      
      
        FillChar(h,SizeOf(TPCMWaveHeader),#0); 
        with h do 
        begin 
          rID[0]:='R'; 
          rID[1]:='I'; 
          rID[2]:='F'; 
          rID[3]:='F';                                 { 1st identifier } 
          rLen:=DataBytes+36; 
          wID[0]:='W'; 
          wID[1]:='A'; 
          wID[2]:='V'; 
          wID[3]:='E';                                 { 2nd identifier } 
          fId[0]:='f'; 
          fId[1]:='m'; 
          fId[2]:='t'; 
          fID[3]:=Chr($20);                            { 3rdidentifier ends with a space character } 
          fLen:=$10;                                   { Fixed, must be 16 } 
          wFormatTag:=1;                               { Fixed, must be 1 } 
          nChannels:=Channels;                         { Channels } 
          nSamplesPerSec:=SampleRate;                  { Sample rate in Hertz } 
          nAvgBytesPerSec:=SampleRate*Channels*trunc(Resolution div 8); 
          nBlockAlign:=Channels*(Resolution div 8);    { Byte order, see below } 
          nBitsPerSample:=Resolution; 
          dId[0]:='d'; 
          dId[1]:='a'; 
          dId[2]:='t'; 
          dId[3]:='a';                                 { Data identifier } 
          dLen:=DataBytes;                             { number of following data bytes } 
        end; 
        AssignFile(f,filename); 
        ReWrite(f,1); 
        BlockWrite(f,h,SizeOf(h)); 
        BlockWrite(f,pbytearray(data),databytes); 
        CloseFile(f); 
      
      end; WAVE文件的文件头并不复杂!上面是个写入文件头的程序!用FileStream打开,很容易获取SampleRate,Channels,