代码之家  ›  专栏  ›  技术社区  ›  Soviut

如何获取仍在加载的声音对象的最终长度?

  •  5
  • Soviut  · 技术社区  · 15 年前

    我在ActionScript3中创建了一个基本的MP3播放器。我有一个基本的进度条,指示歌曲播放了多少。进度按0和1之间的十进制百分比进行计算,如下所示:

    var progress:Number = channel.position / sound.length;
    

    问题是,如果音频仍在加载/缓冲声音。长度不正确。这会导致我的进度条跳来跳去,甚至向后移动,直到声音完全加载并且声音长度不再改变。

    确定仍在加载的声音对象的最终长度的最佳方法是什么?

    2 回复  |  直到 12 年前
        1
  •  6
  •   Ron DeVera    12 年前

    至少有两种选择:

    1:将进度条保持在0%,在声音完全加载之前不要移动它。即:

    sound.addEventListener(Event.COMPLETE, onSoundComplete);
    
    private function onSoundComplete(event:Event):void {
        // Calculate progress
    }
    

    2:基于已加载文件的百分比的近似百分比。像这样:

    private var _sound:Sound = /* Your logic here */;
    private var _channel:SoundChannel = _sound.play();
    
    _sound.addEventListener(ProgressEvent.PROGRESS, onSoundProgress);
    
    private function onSoundProgress(event:ProgressEvent):void {
        var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
        var approxProgress:Number
            = _channel.position / _sound.length * percentLoaded;
        // Update your progress bar based on approxProgress
    }
    
        2
  •  2
  •   Theo.T    15 年前

    你也可以通过 ID3 标记声音是否正确 tagged .