幾個音頻格式細節備記(混)

來源:互聯網
上載者:User

幾個格式細節備記(混)

WAVEFORMATEX

MEDIATYPE_Audio
FORMAT_WaveFormatEx

CLSID_AudioInputDeviceCategory

CLSID_AudioInputDeviceCategory

typedef struct  _MediaType {
    GUID      majortype; 
    GUID      subtype;
    BOOL      bFixedSizeSamples;
    BOOL      bTemporalCompression;
    ULONG     lSampleSize;
    GUID      formattype;
    IUnknown  *pUnk;                  //not use
    ULONG     cbFormat;
    BYTE *pbFormat;
} AM_MEDIA_TYPE;

主要有
   majortype  媒體類型大致說明
   subtype    更一步的細緻說明
   formattype 
      包括有以下:其對應的不同的資料格式
       FORMAT_None
       FORMAT_DvInfo
       FORMAT_MPEGVideo
       FORMAT_MPEG2Video
       FORMAT_VideoInfo
       FORMAT_VideoInfo2 
       FORMAT_WaveFormatEx  
       GUID_NULL

  cbForamt成員指定了格式塊pbFormat的大小.
  pbFormat指標指向格式子塊。
            pbFormat是一個void*的指標,因為格式塊會因為媒體類型
            的不同而有不同的指向。如音頻填充的是WAVEFORMATEX結構
     資料.

     可以從中取出傳來的資料格式。
    

 

//TWaveFormatEx 結構:
TWaveFormatEx = packed record
  wFormatTag: Word;       {指定格式類型; 預設 WAVE_FORMAT_PCM = 1;}
  nChannels: Word;        {指出波形資料的通道數; 單聲道為 1, 立體聲為 2}
  nSamplesPerSec: DWORD;  {指定樣本速率(每秒的樣本數)}一般為8000
  nAvgBytesPerSec: DWORD; {指定資料轉送的平均速率(每秒的位元組數)} 每秒的位元組數:
  nBlockAlign: Word;      {指定塊對齊(單位位元組), 塊對齊是資料的最小單位}
  wBitsPerSample: Word;   {採樣大小(位元組)}每個樣本的BIT數目,一般為16
  cbSize: Word;           {應該是該結構的大小}
end;

nChannels       :   對於pcm,其nchannels不超過2,對於非pcm格式,則超過2.
nSamplesPerSec  :   通常為8kHz, 11.025 kHz, 22.05 kHz, and 44.1 kHz.
nAvgBytesPerSec :   每秒傳送位元組數 = nSamplesPerSec * nBlockAlign
nBlockAlign     :   對齊位元組  = nChannels * wBitsPerSample / 8
                    就是表示一個樣本的最小位元組.
wBitsPerSample  :   在格式預設情況下,一般為8,16,表示的是樣本的bit 數

對於一個8位,11k傳輸的立體聲則
nChannels  = 2
nSamplesPerSec(每秒的樣本數) = 11025  就是取樣數
nBlockAlign  = 2 * 8 / 8= 2           對齊位元組,最小樣本位元組數
nAvgBytesPerSec = 11025 *  2 = 22050
wBitsPerSample  = 8
 

 下面的圖列清楚從另一個方面表達樣本

   樣本1  樣本2 ...n
8位單聲道 0聲道 0聲道  
8位立體聲 0聲道L         1聲道R  0聲道L  1聲R道  
16位單聲道 0聲道(低位元組)    0聲道(高位元組) 0聲道(低位元組)    0聲道(高位元組)  
16位立體聲

0聲道(低位元組)0聲道(高位元組)1聲道(低) 1聲道(高) 

同左

 

                                                                                                                     
                                        
                                   
---------

waveform-audio 緩衝格式     
  typedef   struct   {    
          LPSTR     lpData;           //記憶體指標,放置音頻pcm樣本資料
          DWORD     dwBufferLength;   //長度    
          DWORD     dwBytesRecorded;  //已錄音的位元組長度  
          DWORD     dwUser;    
          DWORD     dwFlags;    
          DWORD     dwLoops;           //迴圈次數  
          struct   wavehdr_tag* lpNext; //保留    
          DWORD     reserved;           //保留
  }   WAVEHDR; 
 
  其中lpdata 即為pcm格式樣本資料。
 
採樣大小為8位,則採樣的動態範圍為20*log(256)分貝=48db。
樣本大小為16位,則採樣動態範圍為20*log(65536)大約是96分貝

振幅大小:   20*log(A1/A2)分貝,A1,A2為兩個聲音的振幅。
則對於的音頻:
          8位       20 * lg( lpData[0] /256)
   16位      20 * lg( lpData[0]--lpData[1] / 65536)
 考慮到單雙道,還需要相應取出左右聲道的值。
 考慮到lg求值為負48至0之間,則在實際轉換中需要+48or96.

樣本大小  資料格式      最大值  最小值
8位PCM    unsigned int   256     0
16位PCM   int            32767  -32767

 8位音頻是unsigned 存放波形,取振幅要-127.
 而16位因其存放為int 類型,直接套用公式.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.