【问题标题】:as3 get percentage of audio playedas3 获取播放音频的百分比
【发布时间】:2014-03-17 13:08:23
【问题描述】:

我正在尝试制作一个音频进度条,以显示已播放音频的百分比,并且该进度条会平稳地向上移动,直到音频播放完毕。它从左侧开始,最后条将在右侧,显示其完整。

下面的代码可以运行,但它一次会跳 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);
}

【问题讨论】:

    标签: actionscript-3


    【解决方案1】:

    您必须首先从 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);
    }
    

    【讨论】:

    • 嘭!太感谢了! :)
    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2011-10-01
    • 2019-03-05
    • 2018-02-20
    • 2016-06-29
    相关资源
    最近更新 更多