The following example shows how you can dynamically load an MP3 file into Flex using the Sound class and get the MP3 file’s ID3 information using the id3 event (Event.ID3) and the Sound object’s id3 property.

Full code after the jump.

View MXML

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/03/05/displaying-a-dynamically-loaded-mp3-files-id3-information-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Script>
        <![CDATA[
            import mx.utils.ObjectUtil;

            private const URL:String = "http://www.helpexamples.com/flash/sound/song2.mp3";
            private var sound:Sound;
            private var soundLoaderContext:SoundLoaderContext;

            private function loadSound(url:String):void {
                var urlRequest:URLRequest = new URLRequest(url);
                // Check policy file
                soundLoaderContext = new SoundLoaderContext(1000, true);

                sound = new Sound();
                sound.addEventListener(Event.ID3, sound_id3);
                sound.load(urlRequest, soundLoaderContext);

                textArea.text = "";
            }

            private function sound_id3(evt:Event):void {
                var id3Info:ID3Info = Sound(evt.currentTarget).id3 as ID3Info;
                textArea.text += ObjectUtil.toString(id3Info);
                textArea.text += "\\n---------- ---------- ----------\\n";
            }
        ]]>
    </mx:Script>

    <mx:ApplicationControlBar dock="true">
        <mx:Button id="button"
                label="Load MP3"
                click="loadSound(URL);" />
    </mx:ApplicationControlBar>

    <mx:TextArea id="textArea"
            editable="false"
            width="100%"
            height="100%" />

</mx:Application>

View source is enabled in the following example.

The following example shows how you can use data binding to update values in a Label control using a Model:

<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/03/05/displaying-a-dynamically-loaded-mp3-files-id3-information-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
        layout="vertical"
        verticalAlign="middle"
        backgroundColor="white">

    <mx:Script>
        <![CDATA[
            private const SONG1:String = "http://www.helpexamples.com/flash/sound/song1.mp3";
            private const SONG2:String = "http://www.helpexamples.com/flash/sound/song2.mp3";

            private var sound:Sound;
            private var soundLoaderContext:SoundLoaderContext;

            private function loadSound(url:String):void {
                var urlRequest:URLRequest = new URLRequest(url);
                // Check policy file
                soundLoaderContext = new SoundLoaderContext(1000, true);

                sound = new Sound();
                sound.addEventListener(Event.ID3, sound_id3);
                sound.load(urlRequest, soundLoaderContext);
            }

            private function sound_id3(evt:Event):void {
                model.id3info = Sound(evt.currentTarget).id3;
            }
        ]]>
    </mx:Script>

    <mx:Model id="model">
        <model>
            <id3info></id3info>
        </model>
    </mx:Model>

    <mx:ApplicationControlBar dock="true">
        <mx:Button label="Song 1" click="loadSound(SONG1);" />
        <mx:Button label="Song 2" click="loadSound(SONG2);" />
    </mx:ApplicationControlBar>

    <mx:Form>
        <mx:FormItem label="album:">
            <mx:Label text="{model.id3info.album}" />
        </mx:FormItem>
        <mx:FormItem label="artist:">
            <mx:Label text="{model.id3info.artist}" />
        </mx:FormItem>
        <mx:FormItem label="songName:">
            <mx:Label text="{model.id3info.songName}" />
        </mx:FormItem>
        <mx:FormItem label="track:">
            <mx:Label text="{model.id3info.track}" />
        </mx:FormItem>
        <mx:FormItem label="year:">
            <mx:Label text="{model.id3info.year}" />
        </mx:FormItem>
    </mx:Form>

</mx:Application>
 
Tagged with:
 
About The Author

Peter deHaan

Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.

2 Responses to Displaying a dynamically loaded MP3 file’s ID3 information in Flex

  1. Wow.
    All of this is mindboggling to me.
    But I know about Flex, and how much it does for webmasters.

    This is great information and very useful,
    I’m going to bookmark this and hope that one day when I know how to put all of this into play, I’ll be using this.

    Thanks for this.
    I’m sure it will help me and a lot of other people.

  2. PartyPro says:

    I agree as there are many useful examples on the site! This one in particular will be helpful to me.

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Anti-Spam Protection by WP-SpamFree