MP3

재생 기기 종류 = 오디오 파일 포맷 **MP3**(**엠피쓰리** 또는 **엠피스리**, MPEG-1 Audio Layer-3 또는 MPEG-2 Audio Layer-3, **엠피삼**http://www.segye.com/Articles/SPN/ENTERTAINMENTS/Article.asp?aid=20110103003565&subctg1;=&subctg2;=)는 MPEG-1의 디지털 오디오 규격으로 개발된 손실 압축 오디오 코딩 포맷이다. MP1, MP2를 개량하여 만들어져 가장 대중적인 음악 파일 포맷으로 여겨진다. 컴퓨터 디스크 등의 PCMMPEG-2 AudioBC (Backward Compatible)이 정식 명칭이다. MPEG-2 MP3는 압축 방식은 동일하지만, 비트율이 낮은 매체를 위한 낮은 고정 비트율, 다채널 대응이 포함되어 있다. 이 형식은 유럽형 DVD에 채용되어 있다. 또한 ISO 표준 규격이 아닌 MPEG-2.5 Audio Layer 3이라는 것도 있으며, 저 비트레이트에서의 사용에 최적화되어 있다.
# 개요
MP3는 손실 오디오 압축 포맷이다. 정식 명칭은 **MPEG-1 Audio Layer III** 또는 **MPEG-2 Audio Layer III**이며, MPEG 표준의 일부로 정의되었다.access-date=2025-09-03 MP3는 PCM 오디오 데이터를 사람이 듣는 데 중요하지 않은 부분을 버리고 다시 표현한 것이다. (JPEG 이미지의 손실 압축 기법과 비슷하다.) MP3에서 사용하는 기술의 대부분은 음향심리학에서의 오디오 데이터의 어느 부분을 폐기할 것인가를 결정하는 데에 있다.Let's build an MP3 decoder 특히 인간의 귀가 잘 인지하지 못하는 주파수 성분이나 다른 소리에 의해 가려지는 성분(마스킹 효과)을 제거하여 파일 크기를 줄인다.access-date=2025-09-03 MP3 오디오는 각기 다른 비트레이트로 압축된다. 데이터의 크기와 음질에 서로 관계가 있다. 다시 말해, 데이터의 크기가 커지면 음질은 좋아지는 반면 데이터의 크기가 작아지면 음질과 성능은 떨어진다. 일반적으로 128 kbps가 보급형 음질, 192 kbps 이상이 고음질, 320 kbps가 표준 규격의 최고 음질로 알려져 있다.access-date=2025-09-03
# 역사

## 개발
MPEG, MP3를 포함하여 최근의 손실 압축은 아르헨티나 부에노스 아이레스(Buenos Aires) 대학 Oscar Bonello 교수의 초기 연구에 기본을 두고 있다. 그는 방송용 라디오 자동화를 위한 스튜디오 장비 설계에 관련이 있었다. 또한, 주된 연구 분야인 음향심리학과 음향학을 대학에서 가르쳤다(실내 음향 디자인에 관한 "Bonello Criterion"이라는 책을 낸 적도 있다.) 1983년, 그는 오디오 신호를 부호화할 때 필요한 비트 스트림을 줄이기 위해 크리티컬 밴드 마스킹(Critical Band Masking) 원리를 사용하는 아이디어를 연구하기 시작했다. 마스킹 원리는 1924년에 처음 개발되었으며 1959년 Egan-Hake와 Richard Ehmer에 의해 더욱 발전되었다. Bonello의 연구는 1987년 IBM 개인용 컴퓨터에서 하드웨어에 의해 구현되며 실시간으로 동작하는 세계 최초의 비트 압축 시스템을 만들어 냈다. 이것은 ECAM이라고 불렸다. 이 플러그인 카드와 관련된 제어 소프트웨어는 완벽히 동작하는 하나의 제품으로써 1988년 오디컴(Audicom)이란 이름으로 처음 전시되었다. 그 뒤 1990년 미국 아틀란타의 국제 NAB 라디오 전시회(Radio Exhibition)를 통해 세계에 알려졌다. 기본적인 Bonello 구현은 현재 MP3와 다른 시스템에서 쓰이고 있다. 그는 이 기술과 관련하여 어떠한 특허 내는 것을 거절하였다. MPEG-1 Audio Layer 2 인코딩은 독일의 *Deutsche Forschungs- und Versuchsanstalt für Luft- und Raumfahrt*(나중에는 *Deutsches Zentrum für Luft- und Raumfahrt*, German Aerospace Center로 불림) 소속 Egon Meier-Engelen가 관리하는 디지털 오디오 방송(Digital Audio Broadcast) 프로젝트로 시작되었다. 이 프로젝트는 일반적으로 EU-147(1987년부터 1994년까지 운영됨)로 알려진 유레카(EUREKA) 연구 프로그램의 한 부분으로써 유럽 연합의 재정 지원을 받았다. 독일의 Erlangen-Nuremberg 대학 박사 연구생인 Karlheinz Brandenburg는 1980년대 초반 디지털 음악 압축에 대한 연구를 시작했다. 그는 어떻게 사람들이 음악을 인지하는지에 초점을 맞추고 있었다. 1989년에 그의 박사 연구는 완성되었으며 Erlangen-Nuremberg에서 조교수가 되었다. 그 뒤 프라운호퍼 연구소(Karlheinz Brandenburg는 1993년에 st스태프로 합류)에서 과학자들과 함께 음악 압축에 관한 연구를 이어나갔다. 1991년 적용할 수 있는 두 개의 제안이 있었으나 필립스(네덜란드),CETT(프랑스), Institut für Rundfunktechnik(독일)이 제안한 Musicam 기술이 높은 음질의 압축 오디오를 인코딩하는 경우에 아주 적은 계산 능력으로 소화해 낼 뿐만 아니라 명료함과 오류 내구성 때문에 채택되었다. 서브밴드 인코딩(sub-band encoding)에 기반을 둔 Musicam 포맷은 MPEG 오디오 압축 포맷(샘플 레이트, 프레임 구조, 헤더, 프레임 당 샘플 수)의 기반을 마련하는 데 주요한 역할을 했다. 그 기술과 아이디어들은 ISO MPEG Audio Layer I과 Layer II, Layer III(MP3) 형식의 정의에 모두 추가되어 있다. Honnover 대학의 Mussmann 교수가 주도하며 Leon van de Kerkhof(Layer I)와 Gerhard Stoll(Layer II)의 책임하에 표준이 수정되었다. Leon Van de Kerkhof(네덜란드), Gerhard Stoll(독일), Leonardo Chiariglione(이탈리아), Yves-Franc,ois Dehery(프랑스), Karlheinz Brandenburg(독일)들로 구성된 연구 모임은 Musicam과 ASPEC으로부터 아이디어를 가져오는 한편 그들 스스로의 아이디어를 덧붙이기도 하였다. 그래서 192Kbps의 MP2와 같은 음질의 128kbps를 만들어 내는 방법을 만들어냈다. 모든 알고리즘은 1991년에 승인되었으며 1992년, MPEG의 첫 번째 표준 모음들 중의 한 부분으로써 완성시켰다. 그 뒤 1993년 *International Organization for Standardization(ISO)/International Electrotechnical Commission(IEC) 11172-3*에서 국제 표준이 되었다. MPEG 오디오에 대한 더 많은 연구가 1994년에 이루어졌다. 그것은 MPEG-2라고 하는 MPEG의 2번째 세트 가운데 한 부분이었으며 1995년 발행된 국제 표준 *International Organization for Standardization(ISO)/International Electrotechnical Commission(IEC) 13818-3*로써 공식적으로 더 알려지게 된다. 인코더의 압축 효율은 일반적으로 비트 레이트에 따라 결정된다. 왜냐하면 압축율은 입력신호의 샘플링 레이트와 비트 깊이에 의존하기 때문이다. 그러나 보통 CD 매개변수를 레퍼런스(44.1kHz, 2 채널, 1채널 당 16 비트 또는 2x16 비트)로 사용하여 압축율을 나타내곤 한다. 때로는 디지털 오디오 테이프(DAT) SP가 매개변수로 쓰이기도 한다.(48kHz, 2x16 비트). 이것을 레퍼런스로 사용한 압축률은 더 높아서 손실 인코더에서 "압축률(compression ratio)"이란 단어를 무색하게 만들기도 한다. Karlheinz Brandenburg MP3의 압축 알고리즘을 평가하기 위해 선택했던 노래가 Suzanne Vega의 노래 Tom's Diner이다. 이 노래는 부드럽고 단조로웠기 때문에 재생하는 동안 압축 포맷에서의 잘못된 부분을 듣기가 쉬웠다. 어떤 사람들은 농담 삼아 Suzanne Vega를 "MP3의 어머니"라 하기도 한다. 오늘날의 MP3에 VBR(Variable Bit Rate) 기술은 프라운호퍼사가 아닌 Xing에서 추가한 기술이다 하지만 Xing Encoder 1.5에서는 16kHz가 잘리는 버그가 있었으나 추후 개선되었다.
## 대중화
1994년 7월 7일, Fraunhofer Society는 I3enc라는 첫 번째 MP3 소프트웨어를 선보였다. 그 뒤 1995년 7월 14일 .mp3라는 확장자가 Fraunhofer팀에 의해 정의되었다.(이전까지는 .bit로 사용되었었다) 첫 번째 실시간 MP3 플레이어 프로그램(1995년 9월 9일 발표)과 함께 많은 사람들이 그들의 PC에서 MP3를 인코딩하고 재생할 수 있게 되었다. 그 때까지는 아주 작은 용량의 하드 디스크였기 때문에(~500MB) 컴퓨터에서 음악을 듣기 위해서는 비악기 기반 음악(non-instrument based Music)을 저장해야 했다.
### MP2
1993년 10월, MP2(MPEG-1 Audio Layer 2)파일이 인터넷에 모습을 드러냈다. MP2는 Xing MPEG Audio Player를 사용하여 재생할 수 있었다. 그 뒤 MAPlay라고 하는 Tobias Banding의 유닉스 프로그램(1994년 2월 22일 초기 버전 발표. 마이크로소프트 윈도우에서 동작하는 버전도 있음)을 사용하여 재생하기도 했다. 초창기 MP2를 만들어 내는 프로그램은 Xing가 유일하게 가능하였으며 cdda2wav라든지, CD 오디오에서 웨이브 형태의 오디오 파일을 만들어내는 CD 리퍼 같은 것들이 함께 쓰였다. Internet Underground Music Archive (IUMA)는 온라인 음악의 대변화의 시작점을 인정하기 시작했다. IUMA는 MP3와 웹이 대중화되기 앞서, 인터넷의 고품질 음악 웹 사이트였다. 그들은 MP3와 웹이 대중화되기 앞서 MP3 레코딩에 관한 수천가지의 권한을 제공했다.
### 인터넷
1995년 전반기부터 1990년 후반기까지. MP3는 인터넷에서 퍼지기 시작했다. MP3의 대중성은 널소프트(Nullsoft)의 오디오 플레이어인 윈앰프(1997년 발표)와 유닉스 오디오 플레이어인 mpg123, 그리고 네트워크 P2P 파일 공유 프로그램인 냅스터(1999년 발표)의 출현과 함께 빠르게 성장해 나갔다. 이 프로그램들은 사용자들로 하여금 MP3 공유와 수집, 제작, 재생을 보다 쉽게 해주도록 하였다. 작은 크기의 MP3파일은 P2P를 이용하여 음악을 광범위하게 공유할 수 있게 하였다. 그것은 이전까지는 불가능한 것이었다. 그렇게 무료로 음악을 공유하는 것은 음반 판매를 감소시킨다고 주장하는 주된 레코드 회사들은 냅스터에 법적소송을 걸어 냅스터를 폐쇄시켰다. 그리고 파일 공유에 적극적으로 참여한 개인 사용자들에 대해서도 법적 소송을 걸었다. MP3의 대중성에 반하여, 온라인 소매상인들은 소유권이 있는 포맷을 사용하기 시작했다. 그 포맷은 DRM로 암호화되어 있어서 사용자들이 레코드 회사에 의해 특별히 인증되지 않은 경로로 구매된 음악을 사용하는 것을 막았다. 레코드 회사들은 P2P로 네트워크에서 파일 공유되어 사용하는 것을 막기 위해 이것은 꼭 필요한 것이라 주장했다. 그러나 이것은 또 다른 문제가 있었다. 바로 사용자들이 정식으로 구입한 노래를 다른 형태의 장치에서 재생하는 것까지 막아 버린 것이었다.(이를테면, MP3 플레이어에서는 재생할 수 있지만 개인용 컴퓨터에서는 재생하지 못한다든지) eMusic과 같은 곳은 MP3 포맷으로 서비스를 계속하여 어떤 장치에서든지 사용자들이 음악을 들을 수 있게 하고 있다. 하지만 이런 일들이 있어도 꾸준히 판매가 늘어났지만 이런 일이 많아지고 계속되자 점점 판매가 줄어들었다.
# 인코딩
MPEG-1 표준은 MP3의 정확한 정의는 포함하고 있지 않지만 음향심리학적 예제 모델과, 비율 반복, 비규범적인 부분을 제공하고 있다. 현재에는, 구현에 대한 부분은 매우 진부하다고 암시하고 있다. 표준 구현자(표준에 따른 개발을 하는 개발자)들은 RAW 음원에 독립적인 알고리즘을 만드는 데 노력하고 있다. 인코딩 과정중 576회의 시간 도메인 샘플들이 576개의 주파수 도메인 샘플로 변환된다.(이부분은 실세계에서 음원과 컴퓨터 상의 음원의 원리를 비교해보면 이해할 수 있음) 만약 시간이 매우 짧다면, 576개 대신에 192개의 샘플만 추출될 수도 있다.(음원의 엔코딩 시간이 여유롭지 못할때). 이럴 때는 잠시동안의 약간의 노이즈가 동반 될 수 있다.(Jit) 결론적으로, 많은 MP3 인코더들이 존재하는데, 모두 생성하는 품질은 다를 수 있다. 그들에 대한 비교결과는 유효하며, 사용자에게 가장 편한 인코더를 선택하는 것이 최선의 방법이다. 매우 높은 비트레이트 샘플링에 요구되는 숙련된 사용방법은 낮은 비트레이트에서는 요구되지 않는다.
# 파일 구조
MP3 파일은 여러 블럭들의 집합으로 이루어져 있다. 블럭에는 ID3v1, ID3v2 등의 태그들과 AAU(Audio Access Unit)들로 이루어져 있다. 특히 ID3v2 태그는 선택적으로 여러개 들어갈 수 있다. {| class = "wikitable" | ID3v2 | AAU | AAU | ... | AAU | APE Tags | Lyrics3v2 | ID3v1 |}
## AAU
Audio Access Unit의 약자로서 실제 음향 데이터를 담고있다. AAU는 또 다시 여러개의 블럭으로 나뉜다. {| class = "wikitable" | 헤더
Header | CRC | 사이드 인포메이션
Side information | 메인 데이터
Main Data | 부가 데이터
Ancillary Data |} AAU의 길이는 다음과 같다. AAU's size = 144 * bitrate / frequency + paddingbit (byte) 만약, 비트 레이트가 448,000 bit/s 이고 주파수가 48,000Hz, 패딩 비트가 on(true 또는 1)이라면 AAU's size = 144 * 448,000 / 48,000 + 1 = 1,345 byte 가 된다. 비트레이트와 주파수, 패딩 비트 정보는 헤더로부터 가져 올 수 있다.
### 헤더
헤더에는 하나의 AAU 블럭을 디코딩 하기 위해 필요한 기본적인 정보를 담고 있다. 모든 AAU 마다 헤더를 가지고 있으므로 AAU는 독립적으로 디코딩 될 수 있지만 대개 하나의 MP3에는 동일한 헤더를 가지고 있으므로 디코더는 주로 맨 첫번째 헤더만을 읽는다. {| class="wikitable" | | 1 | | 1 | | 1 | | 1 | | 1 | | 1 | | 1 | | 1 |- ! 2 byte | | 1 | | 1 | | 1 | | 1 | | 1 | | 0 | | 1 | | 1 |- ! 3 byte | | 1 | | 1 | | 1 | | 1 | | 1 | | 0 | | 1 | | 1 |- ! 4 byte | | 1 | | 1 | | 1 | | 1 | | 1 | | 0 | | 1 | | 1 |} {| class="wikitable" ! | MP3 Sync Word | 모두 1로 설정되어 프레임의 시작을 알린다.http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header |- ! | Version | {| class="wikitable" ! scope="col" | Value ! scope="col" | Version |- | 00 || MPEG 2.5 |- | 01 || Reserved |- | 10 || MPEG 2 |- | 11 || MPEG 1 |} |- ! | Layer | {| class="wikitable" ! scope="col" | Value ! scope="col" | Layer |- | 00 || Reserved |- | 01 || Layer III |- | 10 || Layer II |- | 11 || Layer I |} |- ! | Error Protection | CRC 오류 체크 프레임의 존재 유무를 나타낸다. {| class="wikitable" ! scope="col" | Value ! scope="col" | Chucksum |- | 0 || on |- | 1 || off |} |- ! | Bit rate | (단위는 Kbit) {| class="wikitable" ! scope="col" rowspan="2" | Value ! scope="col" rowspan="2" | MPEG-1 Layer I ! scope="col" rowspan="2" | MPEG-1 Layer II ! scope="col" rowspan="2" | MPEG-1 Layer III ! scope="col" colspan="2" | MPEG-2, MPEG-2.5 |- ! scope="col" | Layer I ! scope="col" | Layer II, III |- | 0000 || free || free || free || free || free |- | 0001 || 32 || 32 || 32 || 32 || 8 |- | 0010 || 64 || 45 || 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 || bad || bad || bad || bad || bad |} MPEG1 Layer II에서는 다음과 같이 비트레이트에 따라 허용되는 모드가 정해져 있다. (MPEG 2와 2.5에서는 해당 없음확인날짜=2018-03-22) {| class="wikitable" ! scope="col" | Bitrate ! scope="col" | 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 |} |- ! | Frequency | {| class="wikitable" ! scope="col" | Value ! scope="col" | MPEG 1 ! scope="col" | MPEG 2 ! scope="col" | MPEG 2.5 |- | 00 || 44100 || 22050 || 11025 |- | 01 || 48000 || 24000 || 12000 |- | 10 || 32000 || 16000 || 8000 |- | 11 || reserved || reserved || reserved |} |- ! | Padding bit | {| class="wikitable" ! scope="col" | Value ! scope="col" | Padded |- | 0 || false |- | 1 || true |} |- ! | Priv bit | 별도로 쓰이지 않는다. |- ! | Channel Mode | 채널 모드에 대한 정보를 담고있다. {| class="wikitable" ! scope="col" | Value ! scope="col" | Mode |- | 00 || Stereo |- | 01 || Joint Stereo |- | 10 || Dual Channel(DualMono) |- | 11 || Single Channel(Mono) |} |- ! | Mode Extension | Joint Stereo의 경우에만 쓰이다. {| class="wikitable" ! scope="col" rowspan="2" | Value ! scope="col" rowspan="2" | Layer I ! scope="col" rowspan="2" | Layer II ! scope="col" colspan="2" | Layer III |- ! scope="col" | Intensity stereo ! scope="col" | MS stereo |- | 00 || colspan="2" | subbands 04 to 31 || off || off |- | 01 || colspan="2" | subbands 08 to 31 || on || off |- | 10 || colspan="2" | subbands 12 to 31 || off || on |- | 11 || colspan="2" | subbands 16 to 31 || on || on |} |- ! | Copyright | 저작권의 보호를 받고 있는지 아닌지에 대한 정보를 담고있다.
특별히 사용되지 않는다. {| class="wikitable" ! scope="col" | Value ! scope="col" | Copyrighted |- | 0 || false |- | 1 || true |} |- ! | Original | 원본 자료인지 아닌지에 대한 정보를 담고있다.
특별히 사용되지 않는다. {| class="wikitable" ! scope="col" | Value ! scope="col" | Copied |- | 0 || true |- | 1 || false |} |- ! | Emphasis | {| class="wikitable" ! scope="col" | Value ! scope="col" | Emphasis |- | 00 || none |- | 01 || 50/15 ms |- | 10 || reserved |- | 11 || CCIT J.17 |} |}
### CRC
CRC는 프레임의 오류를 검사하기 위한 데이터를 담고 있다. 대부분의 MP3 파일에는 존재하지 않는다.http://www.multiweb.cz/twoinches/mp3inside.htm 헤더에서 "Error Protection" 이 "on" 일때만 존재한다. 총 16 bit(2 byte)의 길이를 갖는다.
### 사이드 인포메이션
사이드 인포메이션(Side information) 은 인코딩된 메인 데이터를 디코딩 하는데 필요한 정보를 가지고 있다. 사이드 인포메이션의 길이는 다음과 같다. {| class="wikitable" ! scope="col" | Mode ! scope="col" | MPEG-1 ! scope="col" | MPEG-2, MPEG-2.5 |- | Stereo, Joint Stereo, Dual (Dual Channel) || 32 byte || 17 byte |- | Mono (Single Channel) || 17 byte || 9 byte |} 사이드 인포메이션은 다음과 같이 구성되어 있다. {| class="wikitable" |+ align="bottom" | 사이드 인포메이션의 구조 ! scope="col" rowspan="2" | Name ! scope="col" colspan="2" | Bits |- ! scope="col" | Single channel ! scope="col" | Dual channel |- | main_data_begin || colspan="2" | 9 |- | private_bits || 5 || 3 |- | scfsi || 1 * 4 || 1 * 4 * 2 (8) |- | Side Information for granule 1 || 59 || 59 * 2 (118) |- | Side Information for granule 2 || 59 || 59 * 2 (118) |- | | total | | 136 (17 byte) | | 256 (32 byte) |} 만약, MP3가 듀얼 채널 이라면 위에 보이는 것처럼 하나의 granule 은 두개로 나뉘어 하나는 좌측, 나머지 하나는 우측 채널에 대한 사이드 인포메이션을 담게 된다. 하나의 채널에 대한 사이드 인포메이션은 다음과 같이 구성되어 있다. {| class="wikitable" | Name ! scope="col" colspan="2"| Bits |- | colspan="2" | part2_3_length || 12 |- | colspan="2" | big_values || 9 |- | colspan="2" | global_gain || 8 |- | colspan="2" | scalefac_compress || 4 |- | colspan="2" | window_switching_flag || 1 |- ! rowspan="4" | if window_switching_flag == 1 | block_type || 2 |- | mixed_block_flag || 1 |- | table_select || 2 * 5 |- | subblock_gain || 3 * 3 |- ! rowspan="3" | if window_switching_flag == 0 | table_select || 3 * 5 |- | region0_count || 4 |- | region1_count || 3 |- | colspan="2" | preflag || 1 |- | colspan="2" | scalefac_scale || 1 |- | colspan="2" | count1table_select || 1 |- | colspan="2" | total | | 59 |} *main_data_begin* :메인 데이터의 시작점을 가리키는 포인터이다. 다음 프레임의 헤더의 sync word 로부터 음의 바이트 오프셋이다. *private_bits* :개인적인 목적으로 사용할 수 있는 비트이다. 이 비트의 또 다른 역할은 사이드 인포메이션의 크기를 바이트 단위로 맞춰주는 역할을 한다. 싱글 채널의 경우 17 바이트로, 듀얼 채널의 경우 32 바이트로 크기를 맞추어 준다. *scfsi* :1 비트로 구성되어 있으며 granule에 스케일 팩터 선택 정보를 제공하며 scfsi_band 로 그 값을 전달한다. :scfsi_band는 21개의 주파수 영역을 네 개의 그룹으로 나눈것으로 다음과 같다. :{| class="wikitable" |+ align="bottom" | 주파수 영역MP3 DECODER in Theory and Practice ! scope="col" | Group ! scope="col" | Scalefactor band |- | 0 || 0 ~ 5 |- | 1 || 6 ~ 10 |- | 2 || 11 ~ 15 |- | 3 || 16 ~ 20 |} *part2_3_length* :이 값은 스케일 팩터와 허프만 부호화를 위해 사용되는 메인 데이터의 비트수를 부호없는 정수로 가지고 있다. 하나의 granule 은 하나의 채널에 대한 사이드 인포메이션을 제공하는데 예를 들면, 싱글채널의 경우 두개의 granule이 있고 하나의 granule에는 하나의 채널이 존재한다. 그러므로 총 채널의 개수는 두 개이며 사이드 인포메이션 또한 두 개 존재한다. 각각의 채널의 크기는 그에 해당하는 사이드 인포메이션의 part2_3_length 에 저장되어 있다. *big_values* : *global_gain* :양자화 스탭 사이즈는 이 값을 통해 알 수 있으며 역양자화 공식은 역양자화 블럭 안에서 찾을 수 있다. *scalefac_compress* :스케일 팩터 디코딩에 필요한 정보의 비트 수를 밝혀 내는데 쓰인다. 스케일 팩터 대역폭으로 변환될 정보의 비트 수는 slen1 과 slen2 라는 변수 값으로 나타낸다. block_type 변수에 따라 다양하게 나타날 수 있으며 그에 대한 값은 아래 표에서 찾을 수 있다. :{| class="wikitable" |- | 0 || 0 || 0 |- | 1 || 0 || 1 |- | 2 || 0 || 2 |- | 3 || 0 || 3 |- | 4 || 3 || 0 |- | 5 || 1 || 1 |- | 6 || 1 || 2 |- | 7 || 1 || 3 |- | 8 || 2 || 1 |- | 9 || 2 || 2 |- | 10 || 2 || 3 |- | 11 || 3 || 1 |- | 12 || 3 || 2 |- | 13 || 3 || 3 |- | 14 || 4 || 2 |- | 15 || 4 || 3 |} :만약 block_type 이 0, 1, 3 이라면 slen1 은 0~10, slen2는 11~20의 대역폭으로 변환된다. :만약 block_type 이 2 이고 mixed_block_flag 가 0 이라면 slen1 은 0~5, slen2는 6~11의 대역폭으로 변환된다. :만약 block_type 이 2 이고 mixed_block_flag 가 1 이라면 slen1 은 0~7(긴 범위) 또는 3~5(짧은 범위), slen2는 6~11의 대역폭으로 변환된다. *window_switching_flag* :이 값이 셋 되어 있으면 block_type, mixed_block_flag, subblock_gain 값 또한 셋 된다. 셋 되어 있지 않으면 block_type 값은 0 이 된다. *block_type* :각 granule 에 쓰일 윈도우의 종류를 나타낸다. 윈도우의 종류는 아래 표에 있다. {| class="wikitable" ! block_type ! window type |- | 0 || reserved |- | 1 || start block |- | 2 || 3 short windows |- | 3 || end |} *mixed_block_flag* :각기 다른 주파수들이 각기 다른 윈도우 타입과 함께 변환될 지에 대한 정보를 나타낸다. 이 값이 셋 되어 있지 않으면 모든 주파수들은 block_type 에 명시된 종류에 따라 변환 되지만, 값이 셋 되어 있다면 가장 낮은 두 개의 부분대역폭은 normal window와 함께 변환되며 나머지 부분 대역폭들은 block_type 에 명시된 대로 변환된다. *table_select* : *subblock_gain* : *region0_count*, *region1_count* : *preflag* : *scalefac_scale* : *count1table_select* :
### 메인 데이터
인코딩된 실제 데이터를 담고있다. 사이드 인포메이션을 바탕으로 디코딩 되어야만 실제 사용 가능한 데이터가 될 수 있다. 허프만 디코딩, 스케일 팩터 디코딩 로 변환해야 한다. {| class="wikitable" |+ align="bottom" | 메인 데이터의 구조http://www.cs.columbia.edu/~sedwards/classes/2010/4840/reports/KH.pdf | colspan="8" | Main data |- | colspan="4" | Granule | colspan="4" | Granule |- | colspan="2" | Left Channel | colspan="2" | Right Channel | colspan="2" | Left Channel | colspan="2" | Right Channel |- | Scale Factor || Huffman Coded Bits || Scale Factor || Huffman Coded Bits || Scale Factor || Huffman Coded Bits || Scale Factor || Huffman Coded Bits |}
### 부수 데이터
Ancillary Data(부수적 데이터)는 말 그대로 부수적인 정보를 담고 있으며 사용자가 임의로 사용할 수 있다. 부수 데이터는 프레임 내에서 크기가 명확하게 표기되어 있지 않으며, 허프만 코드 정보가 끝나는 부분과 다음 프레임의 메인 데이터 시작 포인터가 가리키고 있는 부분과의 거리가 부수 데이터의 크기가 된다.
## APE Tag
APE 태그 APE 태그는 가수, 앨범명, 곡의 제목등의 메타데이터를 추가하기 위한 태그 포맷이다.
## Lyrics3v2
Lyrics3v2 태그는 가사와 노래 정보등을 담기 위한 태그 포맷이다.
## ID3v1
ID3 MP3 파일의 맨 끝에 존재하며 128 byte 길이의 태그이다. "TAG"라는 문자열로 시작하여 쉽게 찾을 수 있다. {| class="wikitable" ! 8 byte | | T | | A | | G | | Title | | 30 byte | | | | | | |- ! 16 byte | | | | | | | | | | | | | | | | |- ! 24 byte | | | | | | | | | | | | | | | | |- ! 32 byte | | | | | | | | | | | | | | | | |- ! 40 byte | | | | Artist | | 30 byte | | | | | | | | | | |- ! 48 byte | | | | | | | | | | | | | | | | |- ! 56 byte | | | | | | | | | | | | | | | | |- ! 64 byte | | | | | | | | | | | | | | | | Album |- ! 72 byte | | 30 byte | | | | | | | | | | | | | | |- ! 80 byte | | | | | | | | | | | | | | | | |- ! 88 byte | | | | | | | | | | | | | | | | |- ! 96 byte | | | | | | | | | | | | Year | | 4 byte | | |- ! 104 byte | | | | Comment | | 30 byte | | | | | | | | | | |- ! 112 byte | | | | | | | | | | | | | | | | |- ! 120 byte | | | | | | | | | | | | | | | | |- ! 128 byte | | | | | | | | | | | | | | | | Genre |}
# 참고 자료
위키공용분류 * MP3 DECODER in Theory and Practice * http://www.cs.columbia.edu/~sedwards/classes/2010/4840/reports/KH.pdf * http://www.mp3-tech.org/ * https://web.archive.org/web/20111111055609/http://www.id3.org/ * ISO-11172-3