1

我想要做的是以歌曲持续时间的形式显示歌曲下载进度。例如: 00: 00, 01:05, 02:14, 03:58, .... 04:13歌曲总时长 04:13。到目前为止,我有这个代码:

var soundClip:Sound;
var sTransform:SoundTransform = new SoundTransform(0.1);

function init() {
soundClip = new Sound();
soundClip.load(new URLRequest("magneto.mp3"));
//soundClip.load(new URLRequest("making.mp3"));
soundClip.addEventListener(Event.COMPLETE, soundLoaded);
soundClip.addEventListener(ProgressEvent.PROGRESS, soundLoading);
}
init();

function convertTime(millis:Number):String{
    var displayMinutes:String;
    var displaySeconds:String;
    var Minutes:Number = (millis % (1000*60*60)/(1000*60));
    var Seconds:Number = ((millis % (1000*60*60)) % (1000*60))/1000;
    if(Minutes<10){
        displayMinutes = "0"+Math.floor(Minutes);
    }else{
        displayMinutes = Math.floor(Minutes).toString();
    }
    if(Seconds<10){
        displaySeconds = "0"+Math.floor(Seconds);
    }else{
        displaySeconds = Math.floor(Seconds).toString();
    }
    return displayMinutes + ":" + displaySeconds;
}


function soundLoaded(e:Event) {
    soundClip.play(0,0,sTransform);
}
function soundLoading(e:ProgressEvent) {
    trace(convertTime(soundClip.length));
}

如您所见,我正在用两首歌曲对其进行测试,根据上面的代码,两者的持续时间分别为:03:52 和 11:28,但根据窗口,这两首歌曲最后 03:52 和 05:44 . 是代码和两个 mp3 文件。

谢谢你。

编辑:我正在分析这个页面来播放歌曲making.mp3,调试后我意识到有一个值被传递给播放器,然后这样:0、0、2664、7576 、...344370这些值显示为 *00:00, 01:05, 02:14, 03:58, .... 04:13* 作为下载进度。知道这些数据来自哪里可以解决我的问题,最初我认为它可以通过长度属性获得,但这仅适用于磁力.mp3 文件而不适用于两首歌曲。

总的来说,我想展示:

00:00, 00:23, 01:23...03:57(其中 03:57 是任何歌曲的持续时间)作为下载进度。

感谢你们对我的帮助。干杯:)

4

1 回答 1

0

您的代码没有问题,您的技术是正确的。

您只需要在下载结束时获取总持续时间。随着检索到更多数据,文件长度的值会发生变化。如果您的下载在到达结尾之前停止,您将只有不完整文件的长度。添加另一个处理程序可能会检查错误,如果被触发,请让用户知道文件下载仍然不完整。

更新:我想通了。convertTime()在方法中添加调用soundLoaded()

正在发生的事情是在 PROGRESS 事件处理程序中更新文件长度。但是最终的长度通常只在 COMPLETE 事件中可用,因为 PROGRESS 事件处理程序仅在文件下载不完整时才被调用,而不是在它准备好之后。

像现在一样将调用保留convertTime()在 PROGRESS 事件处理程序中。

private function soundLoaded(e:Event):void
{
    soundClip.play(0, 0, sTransform);
    trace(convertTime(soundClip.length));
}

这应该这样做。

更新 2:这是许多论坛在线报告的已知问题。在下载过程中,任何以小于 44 khz 采样的声音文件的长度都会被错误报告。只有在下载完成后才会报告正确的持续时间。这仅影响 SWF 文件版本 9 或更低版本。

将输出 SWF 更改为版本 10+ 可解决此问题。

于 2013-07-13T09:44:15.180 回答