ID3TAG
1. ID3TAG 구조
+-----------------------------+
| 헤더 (10바이트) |
+-----------------------------+
| 확장 헤더 |
| (가변 길이, 불필수) |
+-----------------------------+
| 프레임들 (가변 길이) |
+-----------------------------+
| padding (가변 길이, 불필수) |
+-----------------------------+
| footer (10바이트, 불필수) |
+-----------------------------+
2. 헤더
ID3v2/file identifier "ID3"
ID3v2 version $04 00
ID3v2 flags %abcd0000
ID3v2 size 4 * %0xxxxxxx
7~10byte는 확장헤더, 프레임들, padding의 합 -> footer가 없다면 전체사이즈는 태그 크기(헤더의 7~10byte) + 10 , 있으면 태그 크기(헤더의 7~10byte) + 20 이다.
b는 확장 헤더가 있는지 없는지를 나타냄
d는 footer가 유무 여부를 나타냄
3. 확장헤더
Extended header size 4 * %0xxxxxxx
Number of flag bytes $01
Extended Flags $xx
'Extended header size'는 32 bit synchsafe integer로 저장되는 전체 확장헤더 크기
[6~3] : 헤더 사이즈(최상위 비트는 0으로 시작)
[2] : 플래그 < Extended Flags > 수(0x01)
[1] : 확장 플래그(0bcd0000) 상위의 첫 비트를 제외한 3개의 비트만 사용
b(bit 7) : Tag 업데이트 여부
c(bit 6) : CRC
d(bit 5) : Tag 규정
>> b 비트 데이터
[1] : 데이터 길이(0x00)
>>c 비트 데이터
[1] : 데이터 길이
[5] : 전체 프레임 CRC
>> d 비트 데이터
[1] : 데이터 길이
[1] : aabccdee비트
>> a(bit 8,7) : 태그 사이즈 제한
>>b(bit 6) : 문자 인코딩
>>c(bit 5,4) : 문자 필드 길이
>>d(bit 3) : 그림 인코딩
>>e(bit 2,1) : 그림 크기
확장 플래그 뒤 : 확장 플래그에 대한 데이터
4. 프레임
Frame ID $xx xx xx xx (four characters) Size 4 * %0xxxxxxx Flags $xx xx
[4]Frame ID $xx xx xx xx (four characters)
[4]Size $xx xx xx xx
[2]Flags $xx xx
Synchronised lyrics/text
구조
[10] Frame ID $xx xx xx xx (four characters) Size 4 * %0xxxxxxx Flags $xx xx + (......)
[1] Text encoding $xx
$00 ISO-8859-1 [ISO-8859-1] character set is used => $00 is sync identifier.
$01 Unicode [UNICODE] character set is used => $00 00 is sync identifier
[3] Language $xx xx xx
[1]Time stamp format $xx
[1]Content type $xx
[1/2]Content descriptor <text string according to encoding> $00 (00)
Content type
$00 is other
$01 is lyrics
$02 is text transcription
$03 is movement/part name (e.g. "Adagio")
$04 is events (e.g. "Don Quijote enters the stage")
$05 is chord (e.g. "Bb F Fsus")
$06 is trivia/'pop up' information
$07 is URLs to webpages
$08 is URLs to images
[n] Lyrics/text <full text string according to encoding>
Unsychronised lyrics/text
구조
[10] Frame ID $xx xx xx xx (four characters) Size 4 * %0xxxxxxx Flags $xx xx + (......)
[1] Text encoding $xx
[3] Language $xx xx xx
[1/2] Content descriptor <text string according to encoding> $00 (00)
[n] Lyrics/text <full text string according to encoding>
ID3TAG 정보 추출 방법
Media Scanner를 통해서 뽑아내서 저장한 후에 개발자가 손쉽게 사용하도록 제공
Media Store 클래스를 통해서 Audio/Video 정보를 뽑아낼 수는 있긴 한데, 아직까지는 제공하는 것은 제한적
http://developer.android.com/reference/android/media/MediaScannerConnection.html#scanFile(android.content.Context,
java.lang.String[], java.lang.String[],
android.media.MediaScannerConnection.OnScanCompletedListener
Sample Ex(미디어 스캔을 이용한 metadata를 이용한 소스)
String[] mCursorCols = new String[] { AudioColumns.ARTIST, MediaColumns.TITLE, AudioColumns.ALBUM, AudioColumns.ALBUM_ID, MediaColumns.DATA };
cur = getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, mCursorCols, null, null, null);
titleColumn = cur.getColumnIndex(MediaColumns.TITLE); //타이틀명 가져오기
artistColumn = cur.getColumnIndex(AudioColumns.ARTIST); //가수명 가져오기
albumColumn = cur.getColumnIndex(AudioColumns.ALBUM); //앨범명 가져오기
albumIdColumn = cur.getColumnIndex(AudioColumns.ALBUM_ID); //앨범 ID 가져오기
albumFileNames = cur.getColumnIndex(MediaColumns.DATA); //mp3 파일이름 가져오기
title[cnt] = cur.getString(titleColumn); //title 에 값을 넣기
private SimpleDateFormat formatter = new SimpleDateFormat("H:mm:ss");//이건 노래 파일의 총시간 값을 가져오기
formatter.format(player.getDuration());
ID3TAG 참고용 : Sample 참고(사용 Libary)
ID3TAG 한글 깨지는 버그 관련 mediascanner를 이용해서 가지고 올때: 링크1
ID3TAG Library Download : 링크1
ID3 : http://id3.org / http://www.id3.org/ID3v2Easy / ID3 구조(한글) / ID3 구조2 / ID3구조3 / ID3구조4 / 구조
ID3TAG Source : 링크1 / 링크2 / 링크3
Android mediascanner CPP : 링크 / android mediascann source / 정확도 높음
Android Content Providers Guide : 링크1
Android Media metadata 정보 : 링크1
ID3TAG parsser : 링크1 / 링크2 / 링크3 / 링크4
UTF : 링크1
ID3TAG 구조 참고 할만한 한글 사이트 : 링크1 / 링크2 / 사이즈
ID3V1 : 링크1
'Dev Theory > 01. Open Library' 카테고리의 다른 글
OpenGL (0) | 2012.12.18 |
---|