MP3 파일에는 파일의 시작 또는 끝에 있는 섹션이며 녹음을 식별하는 메타데이터가 들어 있는 ID3 태그가 포함될 수 있습니다. ID3 태그 형식 자체에는 여러 개정이 있습니다. 이 예제에서는 가장 단순한 ID3 형식(ID3 버전1.0)이 포함된 MP3 파일을 "데이터에 대한 임의 액세스"를 사용하여 읽고 쓰는 방법을 설명합니다. 즉, 파일의 임의 위치에서 읽고 씁니다.
ID3 버전 1 태그가 있는 MP3 파일에는 파일 끝의 최종 128 바이트에 ID3 데이터가 포함되어 있습니다.
임의 읽기/쓰기 액세스용으로 파일에 액세스할 경우
open()
또는
openAsync()
메서드에 대한
fileMode
매개 변수로
FileMode.UPDATE
를 지정해야 합니다.
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
이렇게 하면 파일을 읽고 쓸 수 있습니다.
파일이 열리면
position
포인터를 파일 끝 전의 위치 128바이트로 설정할 수 있습니다.
fileStr.position = file.size - 128;
ID3 v1.0 형식에서 ID3 태그 데이터를 파일의 마지막 128바이트에 저장하도록 지정하므로 이 코드는
position
속성을 파일의 위치로 설정합니다. 또한 이 사양에는 다음과 같이 규정되어 있습니다.
-
태그의 첫 번째 3바이트에는 문자열
"TAG"
가 포함됩니다.
-
다음 30자에는 MP3 트랙의 제목이 문자열로 포함됩니다.
-
다음 30자에는 가수 이름이 문자열로 포함됩니다.
-
다음 30자에는 앨범 이름이 문자열로 포함됩니다.
-
다음 4자에는 연도가 문자열로 포함됩니다.
-
다음 30자에는 주석이 문자열로 포함됩니다.
-
다음 바이트에는 트랙의 장르를 나타내는 코드가 포함됩니다.
-
모든 데이터는 ISO 8859-1 형식입니다.
id3TagRead()
메서드는 데이터를 읽은 후(
complete
이벤트가 전달되면) 데이터를 확인합니다.
function id3TagRead():void
{
if (fileStr.readMultiByte(3, "iso-8859-1").match(/tag/i))
{
var id3Title:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Artist:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Album:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Year:String = fileStr.readMultiByte(4, "iso-8859-1");
var id3Comment:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3GenreCode:String = fileStr.readByte().toString(10);
}
}
또한 임의 액세스로 파일에 쓸 수 있습니다. 예를 들어
id3Title
변수를 파싱하여 대/소문자가 올바른지(String 클래스의 메서드 사용) 확인한 후 다음과 같이 수정된 문자열(
newTitle
이라고 함)을 파일에 기록합니다.
fileStr.position = file.length - 125; // 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
ID3 버전 1 표준을 준수하려면
newTitle
문자열은 30자여야 하며 끝에 문자 코드 0(
String.fromCharCode(0)
)을 추가해야 합니다.