Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 如何获得仍在加载的声音对象的最终长度?_Flash_Actionscript 3_Audio_Mp3 - Fatal编程技术网

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

Flash 如何获得仍在加载的声音对象的最终长度?,flash,actionscript-3,audio,mp3,Flash,Actionscript 3,Audio,Mp3,我正在ActionScript3中创建一个基本的MP3播放器。我有一个基本的进度条,指示歌曲播放了多少。进度以0和1之间标准化的十进制百分比计算,如下所示: var progress:Number = channel.position / sound.length; 问题是,如果音频仍在加载/缓冲声音。长度不正确。这会导致我的进度条跳转,甚至向后移动,直到声音完全加载且sound.length不再更改 确定仍在加载的声音对象的最终长度的最佳方法是什么?至少有两个选项: 1:将进度条保持在0%,

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

var progress:Number = channel.position / sound.length;
问题是,如果音频仍在加载/缓冲声音。长度不正确。这会导致我的进度条跳转,甚至向后移动,直到声音完全加载且sound.length不再更改


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

至少有两个选项:

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
}

如果声音播放正确,您还可以通过标签找到声音的长度。

第二个想法很棒!它应该是相当准确的在几毫秒内从我能告诉。