2009-03-21 4 views
5

ActionScript 3에서 기본 MP3 플레이어를 만들고 있습니다. 나는 얼마나 많은 노래가 연주되었는지 나타내는 기본 진행 막대를 가지고 있습니다. 진행은 같은 0과 1 사이의 정규화 소수 백분율로 계산됩니다아직로드중인 Sound 객체의 최종 길이를 얻는 방법은 무엇입니까?

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

문제는, 오디오가 여전히로드 된 경우 /를 sound.length을 버퍼링하는 것은 올바르지 않습니다. 이렇게하면 사운드가 완전히로드되고 sound.length가 더 이상 바뀌지 않을 때까지 진행 막대가 건너 뛰고 뒤로 이동할 수 있습니다.

아직로드중인 사운드 객체의 최종 길이를 결정하는 가장 좋은 방법은 무엇입니까?

1 :

답변

6

이 적어도 두 가지 옵션이 있습니다 0 %에서 진행 표시 줄을두고 사운드가 완전히로드 될 때까지 이동하지 않습니다. 즉 :

sound.addEventListener(Event.COMPLETE, onSoundComplete); 

private function onSoundComplete(event:Event):void { 
    // Calculate progress 
} 

2 : 이미로드 된 파일의 백분율을 기준으로 한 대략적인 백분율. 이런 식으로 뭔가 : 소리가 제대로 tagged 된 경우

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 
} 
+0

두 번째 아이디어는 좋습니다! 내가 말할 수있는 것에서 몇 밀리 초 이내에 꽤 정확해야합니다. – Soviut

2

당신은 또한 ID3 태그를 통해 소리의 길이를 확인할 수 있습니다.

관련 문제