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

by Peter deHaan on March 5, 2008

in ActionScript, ID3Info, Model, Sound

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>

{ 2 comments… read them below or add one }

1 Zune Accesories May 3, 2008 at 11:52 am

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.

Reply

2 PartyPro July 22, 2008 at 11:13 am

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

Reply

Leave a Comment

Sorry, this blog is terrible at eating HTML comments.
If you're pasting any HTML/XML/MXML code, you need to convert your < characters to &lt; and your > characters to &gt; .

You can 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

Previous post:

Next post: