Tengo una clase mp3player que es la que controla el audio, otra clase para el timeBar (que es donde está el scrubb (sí, la ruedita que arrastras)) y otra clase para la barra de volumen.
La actualización de la nueva posición del scrubb se lleva por los eventos EnterFrame tanto de la clase mp3player como de la timeBar.
Evento EnterFrame de la clase mp3player:
Código :
private function onMp3PlayerEnterFrame(e:Event):void{
if(_timeBar.scrubberStatus=="notdragging"){
_timeBar.currentTime=_soundChannel.position;
_timeBar.totalTimeofSong=_actualSong.length;
_currentTimeText.text=getTimeString(_timeBar.currentTime);
}
else if(_timeBar.scrubberStatus=="released"){
if(_status=="playing"){
_soundChannel.stop();
_timeBar.scrubberStatus="notdragging";
_soundChannel=_actualSong.play(_timeBar.currentTime);
}
else if(_status=="paused"){
_pauseTime=_timeBar.currentTime;
_soundChannel.stop();
}
}
if(_status=="playing"){
_bPlay.visible=false;
_bPause.visible=true;
}
else{
_bPlay.visible=true;
_bPause.visible=false;
}
}Y eventos EnterFrame, onMouseDown y onRelease de la clase timeBar:
Código :
private function onTimeBarEnterFrame(e:Event):void{
_scrubber.x=_BG.width*(_currentTime/_totalTime);
}
private function onMouseDownScrubber(e:Event):void{
if (_timeBar.hasEventListener(Event.ENTER_FRAME)){
_timeBar.removeEventListener(Event.ENTER_FRAME,onTimeBarEnterFrame);
}
// start scrubb dragging
e.target.startDrag(false,_rectArea);
_status="dragging";
}
private function releaseScrubber(e:Event):void{
e.target.stopDrag();
_currentTime=(_scrubber.x*_totalTime)/_BG.width;
trace(" _currentTime = "+_currentTime);
if(!_timeBar.hasEventListener(Event.ENTER_FRAME)){
_timeBar.addEventListener(Event.ENTER_FRAME,onTimeBarEnterFrame);
}
_status="released";
}
Voy a intentar con Timers en vez de EnterFrames, sospecho que esto me pasa por el desfase de frame rates.
Aquí les dejo un video de lo que sucede.
Bienvenida su ayuda .
