예제: 임의 액세스를 사용하여 데이터 읽기 및 쓰기

Adobe AIR 1.0 이상

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))을 추가해야 합니다.