1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205
| import flash.display.MovieClip;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.media.SoundMixer;
import flash.net.URLRequest;
import flash.utils.ByteArray;
import flash.text.TextField;
public class MP3Player extends MovieClip {
// Location of the config xml file
public static const CONFIG_XML_URL:String = "xml/config.xml";
// URL of the mp3 file
public static var MP3_URL:String = "mp3/track.mp3";
// Main color for the mp3 player
public static var MAIN_COLOR:uint = 0xFF0000;
// An XMLLoader to load the configuration file
private var xmlLoader:XMLLoader;
// Sound object to be played
private var mp3:Sound = new Sound();
// A sound channel to play the sound object
private var channel:SoundChannel;
// Holds the pause position
private var pausePos:Number;
// A byte array to read spectrum
private var bytes:ByteArray = new ByteArray();
// Indicates whether the mp3 player is playing or not.
private var _isPlaying:Boolean = false;
// Holds the previous label color
private var _prevColor:uint;
public function MP3Player() {
// Initialize the player
init();
}
/**
* Initializes the player.
*/
private function init():void {
// Use as a button
useHandCursor = true;
buttonMode = true;
mouseChildren = false;
equalizer.alpha = 0;
// Add necessary event listeners
addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown, false, 0, true);
addEventListener(MouseEvent.MOUSE_OVER, onMouseOver, false, 0, true);
addEventListener(MouseEvent.MOUSE_OUT, onMouseOut, false, 0, true);
loadConfig();
}
/**
* Sets the color of the player to the given parameter.
*/
public function setColor(color:uint):void {
MAIN_COLOR = color;
// Change the color of the equalizer
var colorTransform:ColorTransform = equalizer.transform.colorTransform;
colorTransform.color = MAIN_COLOR;
equalizer.transform.colorTransform = colorTransform;
}
/**
* Loads the configuration file to the memory.
*/
private function loadConfig() {
// Start loading the config.xml file
xmlLoader = new XMLLoader(CONFIG_XML_URL);
xmlLoader.addEventListener(XMLLoader.XML_LOADED, onXMLLoaded);
xmlLoader.load();
}
/**
* This method is called when the xml file is loaded to the memory.
*/
private function onXMLLoaded(evt:Event):void {
// Get configuration parameters
var xml:XML = xmlLoader.getXML();
MP3_URL = xml.@mp3URL;
MAIN_COLOR = xml.@color;
// Change the color of the equalizer
equalizer.alpha = 1;
setColor(MAIN_COLOR);
// Start loading the mp3
loadMP3();
}
/**
* Start loading the mp3 file.
*/
private function loadMP3():void {
mp3.load(new URLRequest(MP3_URL));
mp3.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
channel = mp3.play();
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
}
/**
* This method is called whenever a new enter frame event occurs.
*/
private function onEnterFrame(evt:Event):void {
try {
SoundMixer.computeSpectrum(bytes, true, 0);
} catch (e:Error) {
}
equalizer.update(bytes);
}
/**
* This method is called when playing the sound is finished.
*/
private function onSoundComplete(evt:Event):void {
// Loop
channel = mp3.play();
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
}
/**
* This method is called when the mouse is over the mp3 player.
*/
private function onMouseOver(evt:MouseEvent):void {
// Change the color of the equalizer
_prevColor = label.textColor;
label.textColor = MAIN_COLOR;
}
/**
* This method is called when the mouse leaves the mp3 player.
*/
private function onMouseOut(evt:MouseEvent):void {
label.textColor = _prevColor;
}
/**
* This method is called when the mouse is clicked on the mp3 player.
*/
private function onMouseDown(evt:MouseEvent):void {
if (_isPlaying) {
pausePos = channel.position;
channel.stop();
_isPlaying = false;
label.text = "MUSIC OFF";
} else {
channel = mp3.play(pausePos);
channel.addEventListener(Event.SOUND_COMPLETE, onSoundComplete, false, 0, true);
_isPlaying = true;
label.text = "MUSIC ON";
}
}
/**
* This method is called if an IO error occurs.
*/
private function onIOError(evt:IOErrorEvent):void {
}
}
} |
Partager