// ActionScript file package { import flash.display.Shape; import flash.display.Sprite; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.media.SoundTransform; import flash.utils.*; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFormat; import flash.events.*; import flash.geom.*; import flash.filters.*; import flash.errors.IOError; import mx.controls.Alert; import mx.controls.ComboBox; public class audioManager extends Sprite { private var _barArray: Array; private var _lineArray: Array; private var _sound: Sound; private var _songIndex: Number; private var _id3Index: Number; private var _sc: SoundChannel; private var _ba: ByteArray; private var _numBars: int; private var isplaying: int; private var _playtime: int; private var id3Array: Array; private var songArray: Array; public function audioManager() { // the song array contains your mp3 files. Change them to reflect the mp3 you wish to play // to add more mp3 files add another array indice eg., songArray[3] = "somesong.mp3"; songArray = new Array(); songArray[0] = "assets/Darude - Ecstacy.mp3"; songArray[1] = "assets/Darude - SandStorm.mp3"; _songIndex = 0; _barArray = new Array(); _lineArray = new Array(); _sc = new SoundChannel(); _sound = new Sound(); _sound.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); _ba = new ByteArray(); _playtime = 0; // change the number of bars _numBars = 60; createSpectrumBars(); _sound.load(new URLRequest(songArray[_songIndex])); isplaying = 0; _id3Index = 0; _sc = _sound.play(_playtime, 25); var voltransform: SoundTransform = _sc.soundTransform; // set your volume for the mp3 voltransform.volume = 0.6; _sc.soundTransform = voltransform; addEventListener(Event.ENTER_FRAME, animateBars); addEventListener(Event.ENTER_FRAME, getInfo); } private function createSpectrumBars(): void { for (var i: int = 0; i < _numBars; i++) { // this function allows you to change the the appearance of the bars var bar: Shape = new Shape(); var dropShadow: DropShadowFilter = new DropShadowFilter(6, 25, 0x00FF00, 1, 10, 10, 2, 1); bar.graphics.beginFill(0xFF0099); bar.graphics.drawRect(250, - 75, 1, 30); bar.graphics.endFill(); bar.filters = [dropShadow]; bar.y = bar.height + 130; bar.x = 1+i * 4; addChild(bar); _barArray.push(bar); // this function allows you to change the the appearance of the blue dots var line1: Shape = new Shape(); line1.graphics.beginFill(0x66FFFF); line1.graphics.drawRect(250, - 90, 1, 2); line1.graphics.endFill(); line1.y = bar.height + 95; line1.x = 1+i * 4; addChild(line1); _lineArray.push(line1); } } private function ioErrorHandler(event: IOErrorEvent): void{ } public function onStop():void { _playtime = 0; _sc.stop(); isplaying = 1; } public function onPlay():void { if (isplaying == 0) { // do nothing } else { _sc = _sound.play(_playtime, 25); isplaying = 0; } } public function onPause():void { _playtime = _sc.position; _sc.stop(); isplaying = 1; } private var textField: TextField = new TextField(); private function getInfo(event: Event): void { // stores the MP3 ID3 info into an array, you can add more id3 info by adding another id3Array id3Array = new Array(); id3Array[0] = "Song: " + _sound.id3.songName + " "; id3Array[1] = "Artist: " + _sound.id3.artist + " "; id3Array[2] = "Album: " + _sound.id3.album + " "; if (_sound.id3.songName != null) { // formats the display and appearance of the id3 array textField.width = 190; textField.height = 20; textField.x = 50; textField.y = 100; addChild(textField); textField.text = id3Array[_id3Index]; var format: TextFormat = new TextFormat(); format.font = "Cambria"; format.color = 0x0099CC; format.size = 13; textField.setTextFormat(format) } id3Timer.addEventListener("timer", cycleid3Array); id3Timer.start(); } private var id3Timer: Timer = new Timer(8000, 10); private function cycleid3Array(event: TimerEvent): void { if (_id3Index != 2) // set to higher number if you use more id3 information in the arrays. { _id3Index++ } else if (_id3Index != 0) { _id3Index = 0; } } public function cyclesongArray(dir:String,cBox:ComboBox):void { if (dir == 'forw' && _songIndex != 1) // set to higher number if you use more mp3 files in the songArray. { _songIndex++; _sc.stop(); _sound = new Sound(); _sound.load(new URLRequest(songArray[_songIndex])); _sc = _sound.play(_playtime, 25); _sound.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); var data:Number = _songIndex; data++ cBox.selectedIndex = data }else if (dir == 'rev' && _songIndex != 0) { _songIndex--; _sc.stop(); _sound = new Sound(); _sound.load(new URLRequest(songArray[_songIndex])); _sc = _sound.play(_playtime, 25); _songIndex = 0; var data1:Number = _songIndex; data1++ cBox.selectedIndex = data1 } } public function setSong(data:Number):void { _songIndex = data; _sc.stop(); _sound = new Sound(); if(songArray[_songIndex] != "") { _sound.load(new URLRequest(songArray[_songIndex])); _sc = _sound.play(_playtime, 25); _sound.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); //data++ //Box.selectedIndex = data }else{ mx.controls.Alert.show("Song doesn't exist!"); } } private function animateBars(event: Event): void { SoundMixer.computeSpectrum(_ba, true, 0); for (var i: int = 0; i < _numBars; i++) { _barArray[i].scaleY = _ba.readFloat(); _lineArray[i].scaleY = _ba.readFloat(); } } } }