Published in: ActionScript
import er4d.util.Delegate; import er4d.transitions.Tween; class panik.PlayerMp3 extends MovieClip { private var play_btn:MovieClip; private var pause_btn:MovieClip; private var timeline:MovieClip; private var timeline_bg:MovieClip; private var songTrack:Sound; private var loaded:Boolean; private var _src:String; private var track_position:Number; private var track_duration:Number; private var loading_int:Number; private var playing_int:Number; function PlayerMp3() { loaded = false; } // INIT public function set src(_src:String) { this._src = _src; loaded = false; } public function get isLoaded() { return loaded; } public function loadMP3 (autoplay:Boolean) { songTrack = new Sound(); songTrack.onLoad = Delegate.create(this, songLoaded, autoplay); songTrack.loadSound(_src, true); loaded = true; loading_int = setInterval(this, "checkLoadingProgress", 100); // CONTROL timeline._width = 0; play_btn.onPress = Delegate.create(this, startSound); pause_btn.onPress = Delegate.create(this, stopSound); if(autoplay) enablePlayBtn (false); else enablePlayBtn (true); } // SOUND CONTROL public function stopSound () { songTrack.stop(); enablePlayBtn (true); } public function startSound (n:Number) { // play if (!n || songTrack.position == songTrack.duration) n = 0; songTrack.start(n); enablePlayBtn (false); } public function lock() { this._x += 5000; play_btn.enabled = pause_btn.enabled = false; } public function unlock() { this._x -= 5000; play_btn.enabled = pause_btn.enabled = true; } // PRIVATE // watch song loading private function checkLoadingProgress () { var numBytesLoaded:Number = songTrack.getBytesLoaded(); var numBytesTotal:Number = songTrack.getBytesTotal(); var numPercentLoaded:Number = Math.floor(numBytesLoaded / numBytesTotal * 100); } // song loaded private function songLoaded (autoplay:Boolean) { // play stop if(!autoplay) stopSound(); else clearInterval(loading_int); playing_int = setInterval(this, "checkPlayingProgress", 100); track_duration = songTrack.duration/1000; } private function checkPlayingProgress () { track_position = songTrack.position/1000; var track_percent:Number = track_position / track_duration * 100; if(songTrack.position == songTrack.duration) stopSound(); timeline._width = timeline_bg._width * track_percent / 100; } private function enablePlayBtn (b:Boolean){ if (b) { Tween.prop(play_btn, "_alpha", 100); play_btn.enabled = true; Tween.prop(pause_btn, "_alpha", 30); pause_btn.enabled = false; } else { Tween.prop(play_btn, "_alpha", 30); play_btn.enabled = false; Tween.prop(pause_btn, "_alpha", 100); pause_btn.enabled = true; } } }
You need to login to post a comment.
