'모종의 음모/mp3 분석'에 해당되는 글 4건

  1. 2014.10.01 mp3 joint stereo
  2. 2014.10.01 mp3 id3 태그 내의 jpeg 추출
  3. 2014.10.01 mp3 format
  4. 2014.09.16 bitrate / sampling rate / mp3 / 등등등...
모종의 음모/mp3 분석2014. 10. 1. 16:36
음.. 크게와 닫지 않는데.. ADPCM 같은 느낌?

과거에는 확실하게 디코더가 작동하지 않아 문제가 되었지만
요즘에는 디코더가 좋아져서 문제없이 작동하기에 동일 bitrate일 경우 음질이 더 좋아진다고 한다.
일단 frame 단위로 설정이 되므로 mp3 내에서도 프레임 단위로 M/S stereo 와 Joint Stereo를 오갈수 있는 듯

M/S (Mid/Main - Side)
[링크 : http://www.sounddevices.com/notes/general/ms-stereo-basics/]


한정대역에서 고품질 오디오 서비스를 위한 코딩 방식의 일종. 
스테레오 처럼 무조건 좌우측 신호를 나누어 기록하는 것이 아니고 좌우축 신호에서 공통되는 신호는 1가지만 기록하며 좌우측에는 각각 다른 신호만을 기록하므로 스테레오와 비교하면 남는 공간에 데이터를 더 기록할 수 있어 음질을 향상시킬 수 있는 방식이다. MP3나 DAB방송에서 한정된 대역으로 고음질 서비스를 위해 사용된다.
 
[링크 : http://word.tta.or.kr/terms/termsView.jsp?gubun=1&terms_num=28873

[링크 : http://en.wikipedia.org/wiki/Joint_(audio_engineering)]
[링크 : http://ko.goldenears.net/board/1160186]
[링크 : http://www.clien.net/cs2/bbs/board.php?bo_table=cm_mac&wr_id=384226&page=

'모종의 음모 > mp3 분석' 카테고리의 다른 글

mp3 id3 태그 내의 jpeg 추출  (0) 2014.10.01
mp3 format  (0) 2014.10.01
bitrate / sampling rate / mp3 / 등등등...  (0) 2014.09.16
Posted by 구차니
모종의 음모/mp3 분석2014. 10. 1. 16:27
mp3 파일을 들여다 보다 보니.. JFIF 라는 문구 발견
심심해서 적당하게 잘라내 보니 된다.

일단 시작 지점은 JFIF 앞 6바이트 부터
mp3 헤더인 FFFB... 이전 0x00 부분을 제외한(패딩으로 생각되니)

추출한 녀석은 320x320 인데 IDv3 에 표준 사이즈인지는 미지수



 

'모종의 음모 > mp3 분석' 카테고리의 다른 글

mp3 joint stereo  (0) 2014.10.01
mp3 format  (0) 2014.10.01
bitrate / sampling rate / mp3 / 등등등...  (0) 2014.09.16
Posted by 구차니
모종의 음모/mp3 분석2014. 10. 1. 13:10
mp3
[링크 : http://en.wikipedia.org/wiki/ID3]

일단 FFFBA040 이라고 아래에서 예를 들지만
mpeg1 - Layer 3냐 
mpeg2 - Layer 3냐에 따라서도 조금씩 달라지지만
FFFx 로 시작하는건 "거의" 확실하다는 점



[링크 : http://en.wikipedia.org/wiki/MP3]
[링크 : http://www.datavoyage.com/mpgscript/mpeghdr.htm]

MP3 file is divided into a small blocks - frames. Each frame has constant time length 0.026 sec.
But size of one frame (in Bytes) varies according to bitrate. Eg. for 128kbps it is (normally) 417 Bytes and for 192kbps 626 Bytes.
[링크 : http://www.multiweb.cz/twoinches/mp3inside.htm]

--

96kbps / 44k / 2ch mp3의 덤프
팟인코더로 해서 앞에 ID3 태그에 간략하게 팟 인코더로 나오고 FFFB7064로 프레임당 313 바이트 정도로 나온다.
이유는 모르겠지만.. CBR이라고 해도 313/314로 오락가락하는데 패딩 문제인거 같긴하지만 계산법을 찾아 봐야 할 듯

 

320kbps / 44k / 2ch mp3의 덤프
FFFBE064 로 프레임당 1044 / 1045 바이트


mp3 헤더 분석 및 프레임 크기 계산


// MPEG versions - use [version]

const uint8_t mpeg_versions[4] = { 25, 0, 2, 1 };


// Layers - use [layer]

const uint8_t mpeg_layers[4] = { 0, 3, 2, 1 };


// Bitrates - use [version][layer][bitrate]

const uint16_t mpeg_bitrates[4][4][16] = {

  { // Version 2.5

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }, // Reserved

    { 0,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0 }, // Layer 3

    { 0,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0 }, // Layer 2

    { 0,  32,  48,  56,  64,  80,  96, 112, 128, 144, 160, 176, 192, 224, 256, 0 }  // Layer 1

  },

  { // Reserved

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }, // Invalid

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }, // Invalid

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }, // Invalid

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }  // Invalid

  },

  { // Version 2

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }, // Reserved

    { 0,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0 }, // Layer 3

    { 0,   8,  16,  24,  32,  40,  48,  56,  64,  80,  96, 112, 128, 144, 160, 0 }, // Layer 2

    { 0,  32,  48,  56,  64,  80,  96, 112, 128, 144, 160, 176, 192, 224, 256, 0 }  // Layer 1

  },

  { // Version 1

    { 0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 0 }, // Reserved

    { 0,  32,  40,  48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 0 }, // Layer 3

    { 0,  32,  48,  56,  64,  80,  96, 112, 128, 160, 192, 224, 256, 320, 384, 0 }, // Layer 2

    { 0,  32,  64,  96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 0 }, // Layer 1

  }

};


// Sample rates - use [version][srate]

const uint16_t mpeg_srates[4][4] = {

    { 11025, 12000,  8000, 0 }, // MPEG 2.5

    {     0,     0,     0, 0 }, // Reserved

    { 22050, 24000, 16000, 0 }, // MPEG 2

    { 44100, 48000, 32000, 0 }  // MPEG 1

};


// Samples per frame - use [version][layer]

const uint16_t mpeg_frame_samples[4][4] = {

//    Rsvd     3     2     1  < Layer  v Version

    {    0,  576, 1152,  384 }, //       2.5

    {    0,    0,    0,    0 }, //       Reserved

    {    0,  576, 1152,  384 }, //       2

    {    0, 1152, 1152,  384 }  //       1

};


// Slot size (MPEG unit of measurement) - use [layer]

const uint8_t mpeg_slot_size[4] = { 0, 1, 1, 4 }; // Rsvd, 3, 2, 1



uint16_t mpg_get_frame_size (char *hdr) {

    

    // Quick validity check

    if ( ( ((unsigned char)hdr[0] & 0xFF) != 0xFF)

      || ( ((unsigned char)hdr[1] & 0xE0) != 0xE0)   // 3 sync bits

      || ( ((unsigned char)hdr[1] & 0x18) == 0x08)   // Version rsvd

      || ( ((unsigned char)hdr[1] & 0x06) == 0x00)   // Layer rsvd

      || ( ((unsigned char)hdr[2] & 0xF0) == 0xF0)   // Bitrate rsvd

    ) return 0;

    

    // Data to be extracted from the header

    uint8_t   ver = (hdr[1] & 0x18) >> 3;   // Version index

    uint8_t   lyr = (hdr[1] & 0x06) >> 1;   // Layer index

    uint8_t   pad = (hdr[2] & 0x02) >> 1;   // Padding? 0/1

    uint8_t   brx = (hdr[2] & 0xf0) >> 4;   // Bitrate index

    uint8_t   srx = (hdr[2] & 0x0c) >> 2;   // SampRate index

    

    // Lookup real values of these fields

    uint32_t  bitrate   = mpeg_bitrates[ver][lyr][brx] * 1000;

    uint32_t  samprate  = mpeg_srates[ver][srx];

    uint16_t  samples   = mpeg_frame_samples[ver][lyr];

    uint8_t   slot_size = mpeg_slot_size[lyr];

    

    // In-between calculations

    float     bps       = (float)samples / 8.0;

    float     fsize     = ( (bps * (float)bitrate) / (float)samprate ) + ( (pad) ? slot_size : 0 );

    

    // Frame sizes are truncated integers

    return (uint16_t)fsize;

}
[링크 : http://www.hydrogenaud.io/forums/index.php?showtopic=85125]

'모종의 음모 > mp3 분석' 카테고리의 다른 글

mp3 joint stereo  (0) 2014.10.01
mp3 id3 태그 내의 jpeg 추출  (0) 2014.10.01
bitrate / sampling rate / mp3 / 등등등...  (0) 2014.09.16
Posted by 구차니
모종의 음모/mp3 분석2014. 9. 16. 16:18
MP3 파일을 보면 아래와 같이 다양한 비트레이트가 있는데

익숙한 녀석으로는 96kbps / 128kbps / 192kbps / 320kbps 등이 있다.

[링크 : http://en.wikipedia.org/wiki/MP3]

물론 이런 다양한 비트레이트가 존재하더라도
CD의 원본 비트레이트
44.1kHz / 16bit / 2Channel 이기에
44100 * 16 * 2 = 1,411,200 bps
편의상 CD-DA의 비트 레이트는 1,411.2kbit/s 로 표기를 하는 듯한데..(1024가 아니잖아?)
[링크 : http://en.wikipedia.org/wiki/Bit_rate]

아무튼. 1.4Mbps 정도의 CD롬 음질이기에 mp3로 320kbps가 엄청 좋아보인다고 하더라도
실제로는 1/4 이상 압축된 상태란 것.
그렇기에 mp3 에서 동일 sampling rate / sampling bit / channel 이라고 하더라도 다른 bitrate가 존재할 수 있다.
[링크 : http://en.wikipedia.org/wiki/Sampling_(signal_processing)]
 

뜬금포 결론 : MP3의 비트레이트가 오락가락  

'모종의 음모 > mp3 분석' 카테고리의 다른 글

mp3 joint stereo  (0) 2014.10.01
mp3 id3 태그 내의 jpeg 추출  (0) 2014.10.01
mp3 format  (0) 2014.10.01
Posted by 구차니