中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
MPEG音頻幀頭

MPEG音頻幀頭

MPEG Audio Frame Header

更新日期:2008年09月30日
Konrad Windszus
開發(fā)工具:VC7.1, C++, Windows, MFC, VS, VS.NET2003, Dev
摘要:這個文章介紹MPEG音頻幀頭的格式。
所含源碼列表:
Download demo project (binary and source, V2.2) - 225.4 KB
Download source (V2.2) - 21.9 KB

內(nèi)容

  1. Introduction
  2. MPEG Audio Frame
    1. MPEG Audio Frame Header
    2. CRC Checksum
    3. VBR Headers
      1. XING Header
      2. VBRI Header
  3. Additional Tags
  4. Using The Code
  5. Links And Miscellaneous
  6. History

 

1 。簡介

這個文章是關于結構的MPEG音頻幀頭包括XING和VBRI頭。其目的是估計的期限MPEG音頻文章件的準確和盡快。本文章不包括任何提示就如何解碼/編碼實際的音頻數(shù)據(jù)。 MPEG音頻文章件存在于不同層次。最常見的是MPEG 1層III (也稱為MP3 ) ,因為它最復雜的壓縮技術。

我知道有其他文章的MPEG音頻幀頭(甚至CodeProject ) ,但我將進入一個更深一點。

2 。 MPEG音頻幀

一個MPEG音頻文件組成的框架。每個幀包含一個頭開始在其遵循的音頻數(shù)據(jù)。這音頻數(shù)據(jù)總是包含一個fixed number of samples 。當前存在三個層次的MPEG音頻,其中的方式有所不同的音頻數(shù)據(jù)進行編碼的框架內(nèi),但他們都有同樣的頭格式。該框架本身由插槽。在層一,一個插槽始終是第4字節(jié)長,在所有其他層次的插槽是1字節(jié)長。

附加層也有三個版本的MPEG音頻,不同的采樣率,他們可以處理(見table 2.1.2 ) 。 MPEG 1 ( ISO/IEC 13818-3 )和MPEG 2 ( ISO/IEC 11172-3 )是ISO標準。 MPEG 2.5是一個非官方擴展MPEG 2支持甚至更低的采樣率。 MPEG 2/2.5也被稱為下LSF的縮寫,它的采樣頻率下。每個版本可以處理三個層次。如果你想知道更多有關技術細節(jié)的MPEG音頻文件,請看看規(guī)格。你可以找到他們和其他許多有用信息MPEG在www.MP3-Tech.org 。

文件可與編碼要么常數(shù)碼率( CBR )或可變量比特率( VBR ) ,這意味著每幀可以有不同的比特率。因此,質(zhì)量是這些文件往往高于文件編碼常數(shù)a碼率模式,因為他們可以使用較高的比特率的音樂需要它。

2.1 。 MPEG音頻幀頭

頭開始時每幀32位是長期和具有以下格式。 0位頭中是最重要的位( MSB )完整的頭。請注意,位置是零基;位置,長度和實例都在位格式。

2.1.1 MPEG Audio Frame Header
Position Length Meaning Example
0 11 Frame sync to find the header (all bits are always set) 1111 1111 111
11 2 Audio version ID (see table 3.2 also)

00 - MPEG Version 2.5 (unofficial extension of MPEG 2)
01 - reserved
10 - MPEG Version 2 (ISO/IEC 13818-3)
11 - MPEG Version 1 (ISO/IEC 11172-3)

11
13 2 Layer index

00 - reserved
01 - Layer III
10 - Layer II
11 - Layer I

01
15 1 Protection bit

0 - protected by 16 bit CRC following header
1 - no CRC

1
16 4 Bitrate index (see table 2.1.3) 1001
20 2 Sampling rate index (see table 2.1.2) 11
22 1 Padding bit

If it is set, data is padded with with one slot (important for frame size calculation)

0
23 1 Private bit (only informative) 1
24 2 Channel mode

00 - Stereo
01 - Joint Stereo (Stereo)
10 - Dual channel (Two mono channels)
11 - Single channel (Mono)

Note: Dual channel files are made of two independent mono channels. Each one uses exactly half the bitrate of the file. Most decoders output them as stereo, but it might not always be the case.

01
26 2

Mode extension (Only used in Joint Stereo)

(see table 2.1.6)

00
28 1 Copyright bit (only informative) 1
29 1 Original bit (only informative) 1
30 2 Emphasis

00 - none
01 - 50/15 ms
10 - reserved
11 - CCIT J.17

The emphasis indication is here to tell the decoder that the file must be de-emphasized, that means the decoder must 're-equalize' the sound after a Dolby-like noise suppression. It is rarely used.

00

在指定的采樣率有多少樣品每秒記錄。每個MPEG版本可以處理不同的采樣率。

2.1.2 MPEG Versions and Sampling Rates
Sampling Rate Index MPEG 1 MPEG 2 (LSF) MPEG 2.5 (LSF)
00 44100 Hz 22050 Hz 11025 Hz
01 48000 Hz 24000 Hz 12000 Hz
10 32000 Hz 16000 Hz 8000 Hz
11 reserved

該比特率總是顯示在每秒。請注意,前綴kilo(簡稱小'k')并不意味著1024個,但千比特每秒!該比特率索引1111則保留,并應永遠不再使用。在MPEG音頻標準有一個免費的格式描述。這個免費的格式是指該文件編碼恒定比特率,這不是一個預先確定的比特率。只有極少數(shù)的解碼器能夠處理這些文件。

2.1.3 Bitrates (in kilobits per second)
Bitrate Index MPEG 1 MPEG 2, 2.5 (LSF)
Layer I Layer II Layer III Layer I Layer II & III
0000 free
0001 32 32 32 32 8
0010 64 48 40 48 16
0011 96 56 48 56 24
0100 128 64 56 64 32
0101 160 80 64 80 40
0110 192 96 80 96 48
0111 224 112 96 112 56
1000 256 128 112 128 64
1001 288 160 128 144 80
1010 320 192 160 160 96
1011 352 224 192 176 112
1100 384 256 224 192 128
1101 416 320 256 224 144
1110 448 384 320 256 160
1111 reserved

在MPEG 1層II ,只有一些組合的比特率和模式允許的。在MPEG 2/2.5 ,就沒有這種限制。

2.1.4 Allowed bitrate and mode combinations
Bitrate Allowed modes
free all
32 single channel
48 single channel
56 single channel
64 all
80 single channel
96 all
112 all
128 all
160 all
192 all
224 stereo, intensity stereo, dual channel
256 stereo, intensity stereo, dual channel
320 stereo, intensity stereo, dual channel
384 stereo, intensity stereo, dual channel

計算幀大小,您需要的樣本數(shù)量每MPEG音頻幀。因此,您可以使用如下表:

2.1.5 Samples Per Frame
MPEG 1 MPEG 2 (LSF) MPEG 2.5 (LSF)
Layer I 384 384 384
Layer II 1152 1152 1152
Layer III 1152 576 576

然后,你就可以計算出幀大小這樣的:

 

Frame Size = ( (Samples Per Frame / 8 * Bitrate) / Sampling Rate) + Padding Size

 

由于四舍五入的錯誤,官方計算公式幀大小是一個有點不同。據(jù)ISO標準,你必須計算在幀大小插槽(見2. MPEG Audio Format ) ,然后截斷這一數(shù)字為整數(shù),之后乘它與插槽的大小。你可以找到正確的方式計算幀大小的類CMPAHeader在我的代碼。

你的時間的文件在幾秒鐘內(nèi)采用的公式如下:

 

Duration = File Size / Bitrate * 8

 

該方法獲得的第一個個幀頭中的文件,然后計算期限由上述公式正常工作只為CBR文件。

延伸的模式是用來加入信息,是沒有用的立體聲效果,從而減少了所需的位。這些位是動態(tài)確定的編碼在聯(lián)合立體聲模式,聯(lián)合立體聲可以改變從一幀到另一國,或什至開啟或關閉。對于所有其他渠道模式,推廣模式領域是無效的。

完整的頻率范圍MPEG音頻文件分為子帶。有32子帶。對于層I和II ,這兩個位在頭中確定的頻率范圍(頻帶)的強度立體聲應用。在這個頻率范圍內(nèi),只有一個通道存儲。所有其他帶包含的信息在兩個不同的渠道。對于層III ,這兩個位確定哪些類型的聯(lián)合立體聲是用來(強度立體聲和/或米/秒的立體聲) 。

2.1.6 Mode Extension
Value Layer I & II Layer III
M/S stereo Intensity stereo
00 bands 4 to 31 off off
01 bands 8 to 31 off on
10 bands 12 to 31 on off
11 bands 16 to 31 on on

2.2 。驗證CRC

如果保護位在頭中沒有設置,框架包含了16位CRC (循環(huán)冗余校驗) 。這直接如下校驗幀頭和是一個很大的尾端WORD 。要驗證這一點校驗你必須計算的框架和比較CRC計算與存儲CRC 。如果他們不等于轉讓可能出現(xiàn)的錯誤。這也是有益的CRC檢查,以確認你真的發(fā)現(xiàn)的開始幀,因為這樣做同步位在相同的情況下也發(fā)生在數(shù)據(jù)節(jié)的一幀。

該CRC計算方法是,通過運用CRC - 16算法(與生成器polynom 0x8005 )的部分范圍。以下數(shù)據(jù)被認為是為CRC :最后兩個字節(jié)的頭和若干位的音頻數(shù)據(jù)如下校驗后的頭。校驗本身必須跳過CRC計算。不幸的是有沒有簡便的方法來計算的數(shù)目幀所必需的校驗計算層II 。因此,我離開了代碼。您需要其他信息除了頭計算必要位。然而,它是有可能的數(shù)量計算的保護層位在我和層III只有在信息的頭。

對于層III ,您認為完整的一側信息CRC計算。在如下方面信息的頭或CRC層III文件。它包含的信息一般解碼框架,但并不包含實際的編碼錄音樣品。下表顯示的大小方面信息的所有層III文件。

2.2.1 Layer III side information size (in bytes)
MPEG 1 MPEG 2/2.5 (LSF)
Stereo, Joint Stereo, Dual Channel 32 17
Mono 17 9

對于層我的文件,您必須考慮的模式擴展(見表2.1.6 )的頭。然后,你就可以計算number of bits所必需的CRC計算采用的公式如下:

 

4 * (number of channels * bound of intensity stereo +(32 - bound of intensity stereo));

 

這可以被理解為2次的數(shù)量加上立體聲子帶的數(shù)目和單子帶的結果乘以4 。對于簡單單框架,這等于128 ,因為一些渠道之一和約束的強度立體聲是32 ,也就是說,沒有強度立體聲。立體框架,這是256 。欲了解更多信息看一下CRC代碼類CMPAFrame 。

2.3 。 VBR標題

有些文件編碼與可變量比特率模式( VBR ) 。要估計的時間這些文件,你必須知道average bitrate整個文件。它常常很多不同的比特率的第一個個幀,因為最低的比特率可用于沉默的音樂書籍(尤其是在開頭) 。要獲得此平均碼率,你必須通過所有幀中的文件和計算,通過總結比特率每幀的劃分是通過一些幀。因為這不是一個很好的做法(非常緩慢) ,存在著更多的VBR頭內(nèi)的數(shù)據(jù)節(jié)的第一個個幀(幀后頭) 。它們包含的總數(shù)范圍內(nèi)的文件,從中可以計算時間以秒計算公式為:

 

Duration = Number of Frames * Samples Per Frame / Sampling Rate

 

附加的是, VBR頭往往載有一份表格,這是必須尋求職位文件。

2.3.1 XING頭

這往往是頭(但不幸的是,并非總是)添加到文件的編碼與可變量比特率模式。這頭站第一個個后,音頻頭MPEG在某一特定的位置。整個第一個個幀其中包含XING頭是一個有效的,但空的音頻幀,所以即使解碼器,它不認為這頭可以解碼文件。 XING頭的看臺一側后,信息層III文件。所以,你可以計算的開始XING頭相對的開始幀增加4字節(jié)(為MPEG音頻頭)的值從table 2.2.1 。抵銷計算不考慮16位CRC以下的頭,等于為所有層,雖然只有層III有一個方面的信息。

宣讀了這一頭,你就必須找到第一個個MPEG音頻頭,然后進入這一特定位置的框架內(nèi)。該XING頭這個身具有以下格式。 (請注意,位置是零基;位置,長度和例子是每個字節(jié)的格式。 )

2.3.1.1 XING Header
Position Length Meaning Example

0

4 VBR header ID in 4 ASCII chars, either 'Xing' or 'Info', not NULL-terminated 'Xing'

4

4

Flags which indicate what fields are present, flags are combined with a logical OR. Field is mandatory.

0x0001 - Frames field is present
0x0002 - Bytes field is present
0x0004 - TOC field is present
0x0008 - Quality indicator field is present

0x0007
(means Frames, Bytes & TOC valid)
8 4 Number of Frames as Big-Endian DWORD (optional) 7344
8 or 12 4 Number of Bytes in file as Big-Endian DWORD (optional) 45000
8, 12 or 16 100 100 TOC entries for seeking as integral BYTE (optional)
8, 12, 16, 108, 112 or 116 4 Quality indicator as Big-Endian DWORD
from 0 - best quality to 100 - worst quality (optional)
0

根據(jù)這一格式,頭必須XING只包含ID和旗幟。所有其他字段是可選的,取決于它的旗幟設置。有時,這種頭也增加CBR文件。然后它往往具有ID 'Info' 而不是'Xing' 。

存在的LAME extension這個頭,這是用普通LAME編碼,但我并沒有考慮到這一點,因為這是沒有必要的時間估計。盡管如此,這里是連結documentation of the MP3 Info Tag 。

2.3.2 VBRI頭

這頭只用MPEG音頻文件編碼與編碼弗勞恩霍夫據(jù)我所知。這是不同于XING頭。你會發(fā)現(xiàn)它完全32 bytes結束后的第一個個頭MPEG音頻文件中的。 (請注意,位置是零基;位置,長度和例子是每個字節(jié)的格式。 )

2.3.2.1 VBRI Header
Position Length Meaning Example

0

4 VBR header ID in 4 ASCII chars, always 'VBRI', not NULL-terminated 'VBRI'

4

2 Version ID as Big-Endian WORD 1
6 2 Delay as Big-Endian float 7344
8 2 Quality indicator 75
10 4 Number of Bytes as Big-Endian DWORD 45000
14 4 Number of Frames as Big-Endian DWORD 7344
18 2 Number of entries within TOC table as Big-Endian WORD 100
20 2 Scale factor of TOC table entries as Big-Endian DWORD 1
22 2 Size per table entry in bytes (max 4) as Big-Endian WORD 2
24 2 Frames per table entry as Big-Endian WORD 845
26 TOC entries for seeking as Big-Endian integral. From size per table entry and number of entries, you can calculate the length of this field.

3 。附加標簽

請考慮,在結尾或開頭的文件,可能有更多的數(shù)據(jù)是不屬于MPEG音頻幀。這種數(shù)據(jù)被調(diào)用標記,因為它包含的數(shù)據(jù)文件,如標題,藝術家,田徑,年等您必須考慮這些標記,因為只有MPEG音頻數(shù)據(jù)計數(shù)的時間估計..在結束一個文件有可能是一個ID3V1標記,一個標記Lyrics3或Musicmatch的標記。在開始或結束時,該文件可能有ID3V2標簽和/或APE標記。您找到有關ID3和Lyrics3標簽www.id3.org 。 APE最初是為無損壓縮音頻文件的APE ( )格式。但是,現(xiàn)在這個標記也可用于MPEG音頻文件。在Musicmatch的標記是用舊版這個的Musicmatch的編碼。不幸的是很少有網(wǎng)頁上的信息有關此標記,因為它是一個專有格式Musicmatch的。

4 。使用代碼

我寫的一些c++類處理MPEG音頻幀頭和VBR頭。類CMPAFile代表整個文件,并提供方法訪問一個特定范圍內(nèi)( CMPAFrame類) 。這個類實例一類CMPAHeader代表MPEG音頻幀頭框架這個身。繼承各個領域的頭可以通過類變量。此外,還有CVBRHeader類是概括CXINGHeaderCVBRIHeader 。所有的標簽都繼承類CTag 。這些類是完全獨立于任何庫一樣MFC或ATL 。他們只使用Win32 API 。所有課程將拋出例外情況下的錯誤。所有例外的類型CMPAException 。您可以顯示的信息除了使用ShowError()方法。所有課程使用CMPAStream的文件訪問。這個類包含一個簡單的緩沖區(qū)。

下面是一個代碼段,這表明你可以使用這些類。請注意,您必須至少包括mpafile.h頭:

 

try {// open file and look for first header    CMPAFile MPAFile(_T("C:\\test.mp3")) ;cout << MPAFile.GetLengthSec() << _T(" seconds");}catch(CMPAException& Exc){// show error message    Exc.ShowError();}

 

欲了解更多信息,看看源代碼的演示項目MPEG Audio Info ,這是一個簡單的MFC對話框應用程序,它使用類CMPAFile獲取信息MPEG的音頻文件。它也可以執(zhí)行檢查整個文件的錯誤的框架結構。

5 。鏈接和雜項

在這里,你可以找到的來源,我用于此文章:

 

如果您發(fā)現(xiàn)任何錯誤代碼或文章,或有改進建議,只要他們后論壇低于或?qū)懴潆娮余]件至webmaster@wincd.de

6 。歷史

  • 2004-09-15
    • Version 1.0 of MPEG Audio Info released.
    • First version of the article published.
  • 2004-11-01
    • Version 2.0 of MPEG Audio Info released.
      • added possibility to get information about arbitrary frames (not just the first one).
      • added checking of MPEG audio files.
      • better handling of faulty MPEG files (tolerance range +/-3 bytes to look for the next frame).
      • padding is detected correctly.
      • improved buffer management.
      • fixed some other small issues.
      • added a readme file.
    • Article updated:
      • added information about mode extension field.
      • XING header offsets fixed (Mono and Stereo inverted).
      • frames and bytes in VBRI fixed (they were inverted).
      • position of quality indicator in VBRI header fixed.
      • corrected some typos.
  • 2005-11-17
    • Version 2.1 of MPEG Audio Info released.
      • cleaned up class architecture.
      • better navigation through frames.
      • improved checking of files.
      • fixed original bit checking.
      • fixed frame size calculation for all layers (correct truncation).
      • fixed skipping of small frames in VBR files.
      • new cache management.
      • added CRC check.
      • added detection of ID3V1/V2, APE and Lyrics3 tags.
    • Article updated:
      • added information about CRC.
      • fixed sampling rate table.
      • some minor enhancements.
  • 2007-04-09
    • Version 2.2 of MPEG Audio Info released.
      • added Musicmatch-Tag detection
      • better exception handling
      • improved design of CMPAStream
      • added Drag&Drop functionality to dialog
      • fixed memory leaks
      • updated solution to Visual Studio 2005
      • better performance for finding frames
    • Article updated:
      • fixed broken links
      • added link with MPEG Audio Specifications
      • added link with informations about Musicmatch

 

所含源碼列表:
Download demo project (binary and source, V2.2) - 225.4 KB
Download source (V2.2) - 21.9 KB
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MP3的播放時間的計算公式及XING和VBRI頭介紹
94個比付費軟件更好的免費軟件
電子相冊制作知識
什么是M4A格式
常見音頻文件格式有哪些?
了解播放器常見視頻格式
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服