获取声音的总时间和当前时间?

时间:2009-11-18 20:15:28

标签: flash actionscript-3 actionscript

我在Flash ActionScript 3中有一个播放器。我需要记录声音文件的总时间和声音文件的当前时间。 我的代码:

function onPlayProgress(evt:Event):void {
            var sndLength:int = Math.ceil(snd.length /(snd.bytesLoaded / snd.bytesTotal));
            var seekbar = 100 * (channel.position / sndLength);
            playBar.seekbar.x = seekbar*5.8;
            var _totalTime:Number = (((snd.length /(snd.bytesLoaded / snd.bytesTotal))*0.001/60));

现在是什么时候?

2 个答案:

答案 0 :(得分:3)

我并不完全清楚你提供的代码示例正在尝试通信,但如果你想获得正在播放的声音的当前位置,你会做这样的事情:

protected var sound:Sound; 
protected var soundChannel:SoundChannel;

protected function loadSound():void
{
    sound = new Sound(new URLRequest("path_to_sound.mp3"));
    sound.addEventListener(Event.COMPLETE, onSoundLoadComplete);
{

protected function onSoundLoadComplete(e:Event):void
{
    sound.removeEventListener(Event.COMPLETE, onSoundLoadComplete);
    soundChannel = sound.play();
    addEventListener(Event.ENTER_FRAME, onEnterFrame);
}

//Calculuate the sound time
protected function onEnterFrame(e:Event):void
{
    var minutes:uint = Math.floor(soundChannel.position / 1000 / 60);
    var seconds:uint = Math.floor(soundChannel.position / 1000) % 60;
    trace('position: ' + minutes + ':' + seconds);        
};

答案 1 :(得分:0)

我不这么认为。 sound.length不能作为总时间,它是加载流的总时间。如果你调试代码,你会发现sound.length正在改变,直到音频完全加载。 但是我还不知道总时间...... 我这样计算, estimatedTotalTimeLength = sound.bytesTotal / sound.bytesLoaded * sound.length;