as3获得播放音频的百分比

时间:2014-03-16 18:45:27

标签: actionscript-3

我正在尝试创建一个音频进度条,显示已播放音频的百分比,并且会在音频播放完毕之前平稳地向上移动。它从左侧开始,在结束时,条形图将位于右侧,显示其完整。

以下代码可以使用,但它一次跳转为5或10个数字。我曾是 希望数字增长缓慢,而不是让他们跳跃。例 它从3到7到10到15等。如何从1开始向上移动数字,然后向上移动每个数字,直到达到100,此时它将完成。

var mySound:Sound = new Sound();
var myChannel:SoundChannel = new SoundChannel();
var lastPosition:Number = 0;
mySound.load(new URLRequest("audio/1.mp3"));
myChannel = mySound.play();

addEventListener(Event.ENTER_FRAME, checkAudio);

function checkAudio()
{
    var duration:Number = Math.round((mySound.bytesTotal / (mySound.bytesLoaded / mySound.length)) / 1000);

    var seconds:uint = Math.floor(myChannel.position / 1000) % 60;
    trace('position: ' + seconds);
    trace("duration: " + (duration));
    var percent = Math.floor(seconds/duration * 100);
    trace(percent);
}

1 个答案:

答案 0 :(得分:0)

您必须先从Sound对象属性获取持续时间,而不是从bytesLoaded/bytesTotal获取持续时间,因为这是另一个百分比而不是应该是的常量。然后,您应该在该计算中使用毫秒而不是秒,因为如果您的声音长度小于100秒,percent值有时会跳过1以上。

function checkAudio()
{
    var duration:Number = mySound.length; // milliseconds
    var currentTime:uint = Math.floor(myChannel.position / 1000);
    var seconds:uint=currentTime%60;
    var minutes:uint=Math.floor(currentTime/60);
    var percent = Math.floor(myChannel.position/duration * 100);
    trace(percent);
}