package { import flash.display.MovieClip; import flash.external.ExternalInterface; import flash.media.Sound; import flash.media.SoundChannel; import flash.net.URLRequest; import flash.events.Event; public class mp3player extends MovieClip { public var sound:Sound; public var channel:SoundChannel; private var position:Number = 0; private var loopPlayback:Boolean = false; private var file:String = ""; public function mp3player() { // setup callback from javascript ExternalInterface.addCallback("playSound", playSound); ExternalInterface.addCallback("stopSound", stopSound); ExternalInterface.addCallback("pauseSound", pauseSound); ExternalInterface.addCallback("loopOn", loopOn); ExternalInterface.addCallback("loopOff", loopOff); } public function playSound(mp3:String):void { if(file != mp3){ // Reset position if new file file = mp3; position = 0; } startPlaying(); } private function startPlaying():void { var url:URLRequest = new URLRequest(file); if(sound && channel.position > 0){ channel.stop(); } sound = new Sound(); sound.load(url); channel = sound.play( position ); channel.addEventListener(Event.SOUND_COMPLETE, shallWeLoop); } public function stopSound():void { position = 0; channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, shallWeLoop); } public function pauseSound():void { position = channel.position; channel.stop(); channel.removeEventListener(Event.SOUND_COMPLETE, shallWeLoop); } public function loopOn():void { loopPlayback = true; } public function loopOff():void { loopPlayback = false; } public function shallWeLoop(e:Event):void { // ExternalInterface.call("dbg","shallWeLoop "+loopPlayback); if(loopPlayback){ channel.removeEventListener(Event.SOUND_COMPLETE, shallWeLoop); startPlaying(); } else { position = 0; } } } }