如何显示由其持续时间表示的歌曲下载

时间:2013-07-12 20:13:47

标签: actionscript-3

我要做的是以歌曲持续时间的形式显示歌曲下载进度。例如: 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。 Here是代码和两个mp3文件。

谢谢。

编辑:我正在分析这个page播放歌曲制作.mp3,在重新调整之后我意识到有一个传递给播放器的值,并且这样: 0, 0,2664,7576,... 344370 这些值显示为* 00:00,01:05,02:14,03:58,...... 04:13 *作为下载进度。知道这些数据来自哪里可以解决我的问题,最初我认为它可能是长度的,但这只适用于magto.mp3文件而不是两首歌。

总的来说,我想表明:

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

感谢您帮助我。干杯:)

1 个答案:

答案 0 :(得分: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的声音文件长度不正确。只有在下载完成后才会报告正确的持续时间。这仅影响版本9或更低版本的SWF文件。

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