AS3에서 MP3 파일의 ID3 태그 확인 방법은 Sound Class를 이용해서 mp3를 로드 후 정보를 확인할 수 있는데요. 단지 ID3 태그만을 확인해야 하는 경우에는 mp3 파일 전체를 로드할 필요없이 Event.ID3 이벤트 타입을 등록해서 ID3 태그가 확인되면 load 중인 Sound 객체를 중지(close()) 시켜주면 됩니다.
여기서 주의할 점은 mp3 파일의 시작 부분과 끝 부분에서 ID3 버전 1.0 및 2.0 태그를 모두 사용하여 파일이 인코딩된 경우라면 onId3Handler() 메서드가 두 번 호출된다는 점인데요. 필요한 정보가 어느 태그에 있는지 확인 후에 진행중인 Sound 객체를 중지 시켜줘야겠죠.
Event.COMPLETE 타입으로 MP3가 모두 로드된 후에도 ID3 태그를 참조할 수 있는데요.
굳이 재생할 필요가 없는 MP3를 전부 로드하는건 불필요한 작업이기 때문에(시간도 걸리고) Event.ID3 타입으로 처리하는 것이 효과적이라 할 수 있겠습니다.
주로 MP3 플레이어를 제작할 때 재생 리스트 작업에 사용하게되는데.. 가령 로컬의 특정 폴더에 있는 MP3 파일을 확인해서 재생 리스트를 만든다면 폴더에 곡이 많을수록 최대한 빨리 ID3 태그를 불러오는게 필요하겠죠. 대부분의 MP3 파일들이 파일의 시작 부분에 ID3 정보가 들어가 있기 때문에 전체 파일을 로드할 필요없이 정보를 빠르게 불러올 수 있습니다.
다만 순차적으로 MP3 파일의 ID3 태그 정보를 로드해야 할 경우 반드시 2가지 이벤트를 모두 등록해줘야 한다는 점입니다.
모든 MP3가 ID3 태그를 정상적으로 가지고 있다고 볼 수 없기 때문에 1차적으로 Event.ID3 이벤트로 확인 한 후 확인이 되면 곧바로 진행중인 sound.load()를 close()로 중지시키고 다음 곡을 로드해서 정보를 확인하고, Event.ID3 이벤트가 발생하지 않았따면 해당 MP3가 ID3 태그를 가지고 있지 않은 상태기 때문에 Event.COMPLETE 이벤트 발생시 다음 곡을 로드하도록 해줘야합니다.
또한 정상적으로 MP3가 로드되지 않았을 때도 확인이 필요하기 때문에 IOErrorEvent.IO_ERROR 이벤트도 등록해주는 것이 좋습니다.
var snd:Sound = new Sound();
snd.addEventListener(Event.ID3, onId3Handler);
snd.load(new URLRequest("mySound.mp3"));
function onId3Handler(event:Event):void {
// ID3 태그 확인
var id3:ID3Info = event.target.id3;
for (var propName:String in id3) {
trace(propName + " = " + id3[propName]);
}
event.target.close();
}여기서 주의할 점은 mp3 파일의 시작 부분과 끝 부분에서 ID3 버전 1.0 및 2.0 태그를 모두 사용하여 파일이 인코딩된 경우라면 onId3Handler() 메서드가 두 번 호출된다는 점인데요. 필요한 정보가 어느 태그에 있는지 확인 후에 진행중인 Sound 객체를 중지 시켜줘야겠죠.
snd.addEventListener(Event.COMPLETE, onCompleteHandler);
Event.COMPLETE 타입으로 MP3가 모두 로드된 후에도 ID3 태그를 참조할 수 있는데요.
굳이 재생할 필요가 없는 MP3를 전부 로드하는건 불필요한 작업이기 때문에(시간도 걸리고) Event.ID3 타입으로 처리하는 것이 효과적이라 할 수 있겠습니다.
주로 MP3 플레이어를 제작할 때 재생 리스트 작업에 사용하게되는데.. 가령 로컬의 특정 폴더에 있는 MP3 파일을 확인해서 재생 리스트를 만든다면 폴더에 곡이 많을수록 최대한 빨리 ID3 태그를 불러오는게 필요하겠죠. 대부분의 MP3 파일들이 파일의 시작 부분에 ID3 정보가 들어가 있기 때문에 전체 파일을 로드할 필요없이 정보를 빠르게 불러올 수 있습니다.
다만 순차적으로 MP3 파일의 ID3 태그 정보를 로드해야 할 경우 반드시 2가지 이벤트를 모두 등록해줘야 한다는 점입니다.
snd.addEventListener(Event.ID3, onId3Handler); snd.addEventListener(Event.COMPLETE, onCompleteHandler);
모든 MP3가 ID3 태그를 정상적으로 가지고 있다고 볼 수 없기 때문에 1차적으로 Event.ID3 이벤트로 확인 한 후 확인이 되면 곧바로 진행중인 sound.load()를 close()로 중지시키고 다음 곡을 로드해서 정보를 확인하고, Event.ID3 이벤트가 발생하지 않았따면 해당 MP3가 ID3 태그를 가지고 있지 않은 상태기 때문에 Event.COMPLETE 이벤트 발생시 다음 곡을 로드하도록 해줘야합니다.
또한 정상적으로 MP3가 로드되지 않았을 때도 확인이 필요하기 때문에 IOErrorEvent.IO_ERROR 이벤트도 등록해주는 것이 좋습니다.
snd.addEventListener(IOErrorEvent.IO_ERROR, onIoErrorHandler);











