MP3 の ID3 タグ読み込み

(サンプル一覧を表示する)

FlashDevelop を使って、MP3 の ID3 タグ読み込みテストをしてみました。

曲は、フリー素材曲(MIDI/MP3)のダウンロードサイト / ハイパースペシャル さんからお借りしました。

プロジェクトファイルの中に曲データは入っていないので、
HDD の中に入っている MP3 ファイルを持ってきて代用してください。
SWF ファイルが生成される bin フォルダに一緒に入れると、
ロード時のエラーが出なくなります。

ID3 タグは、 UTF-8 形式の文字列が入ったものしか読み込むことはできません。
日本語の MP3 ファイルはほとんど Shift-JIS で ID3 タグが書かれており、
そのままでは Flash で扱うことができません。
ID3 タグの文字コードが認識できなくて読み込めない場合、
Sound クラスの ID3 イベントは発生しません。

ローカル環境にある MP3 ファイルの ID3 タグを編集するときは、
SuperTagEditor 等のソフトで対応できますが、
サーバにアップロードされた MP3 ファイルの ID3 タグを読み込むような
アプリケーションを作りたい場合は、なんらかのソフトで ID3 タグを抽出しておき、
データベースサーバに入れるのが現実的な対処方法だと思います。
その場合、ASCII コード以外の ID3 タグが入っている時は
文字コードを認識する処理を入れる必要があります。
Flash の実行画面
MP3 の ID3 タグ読み込み

Flashプレーヤーが入っていないか、JavaScriptが無効になっているようです。

Get Adobe Flash player

MP3 の ID3 タグ読み込み

ソースコード

package 
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.ProgressEvent;
	import flash.media.ID3Info;
	import flash.media.Sound;
	import flash.net.URLRequest;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	
	/**
	 * ID3 タグ読み込みのサンプル
	 * @author Hikipuro
	 */
	public class Main extends Sprite 
	{
	
		/**
		 * 結果表示用のテキストフィールド
		 */
		private var textField:TextField;
		
		/**
		 * サウンドのローダ
		 */
		private var sound:Sound;
		
		/**
		 * ID3 タグが読み込み済みなら True
		 */
		private var id3readedFlag:Boolean = false;
		
		/**
		 * コンストラクタ
		 */
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		/**
		 * 初期化イベント
		 * @param	e
		 */
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			
			// 結果表示用テキストフィールド初期化
			textField = new TextField();
			textField.autoSize = TextFieldAutoSize.LEFT;
			textField.x = 10;
			textField.y = 10;
			addChild(textField);
			
			// サウンドの URL を指定
			var urlRequest:URLRequest;
			urlRequest = new URLRequest("khs_come_cross_the_winter.mp3");
			
			// サウンドのイベントの設定とロード
			sound = new Sound();
			sound.addEventListener(Event.ID3, onID3);
			sound.addEventListener(ProgressEvent.PROGRESS, onProgress);
			sound.addEventListener(Event.COMPLETE, onComplete);
			sound.load(urlRequest);
			
			textField.appendText("ID3 タグの読み込み中です…");
		}
		
		/**
		 * ID3 タグが読み込み可能になったら呼ばれるイベント
		 * @param	event
		 */
		private function onID3(event:Event):void
		{
			trace("onID3");
			
			if (id3readedFlag == true)
				return;
				
			id3readedFlag = true;
			
			var id3:ID3Info = sound.id3;
			var text:String = "\n";
			
			text += "songName : " + id3.songName + "\n";
			text += "artist : " + id3.artist + "\n";
			text += "album : " + id3.album + "\n";
			text += "genre : " + id3.genre + "\n";
			text += "track : " + id3.track + "\n";
			text += "year : " + id3.year + "\n";
			
			textField.appendText(text);
		}
		
		/**
		 * ロード中のイベント
		 * @param	event
		 */
		private function onProgress(event:ProgressEvent):void
		{
			trace("onProgress");
		}
		
		/**
		 * ロード完了のイベント
		 * @param	event
		 */
		private function onComplete(event:Event):void
		{
			trace("onComplete");
		}
	}
	
}		

外部リンク