konto usunięte
Temat: Zwrócenie czasu trwania mp3
Pytanie za sto punktów - potrzebuję zwrócić i zapisać do własności obiektu AudioFile, czas trwania pliku mp3. Problem polega na tym, że ta wartość widoczna jest tylko w ciele funkcji wywoływanej przy zajściu eventa Event.COMPLETE, a muszę mieć do niej dostęp w innej funkcji. Z grubsza/**
* Wyświetla okno wyboru plików mp3
*/
private function addFiles():void{
var localFile:File = new File();
var txtFilter:FileFilter = new FileFilter("Mp3", "*.mp3");
localFile.browseForOpenMultiple("Wybierz pliki mp3",[txtFilter]);
localFile.addEventListener('selectMultiple', filesSelected);
}
/**
* Dodaje wybrane pliki mp3 do biblioteki
*/
private var _fileListCount:int;
private var _files:Array;
private function filesSelected(e:FileListEvent):void{
_fileListCount = 0;
_files = e.files;
loadDetails();
}
private function loadDetails(currentCount:int = 0):void
{
var urlReq:URLRequest = new URLRequest(_files[currentCount].nativePath);
s = new Sound();
s.addEventListener(Event.COMPLETE, addAdditionalInfoToFile);
//----------------------------------- i tu w tej funkcji
pobierany jest czas, ALE
TUTAJ, PONIŻEJ WYWOŁUJE SIĘ KOLEJNA FUNKCJA W LISTENERZE, W KTÓREJ POTRZEBUJĘ WYKORZYSTAĆ TĘ WARTOŚĆ
if (!s.hasEventListener(Event.ID3)){
s.addEventListener(Event.ID3,onID3InfoReceived);
}
s.load(urlReq)
}
private function addAdditionalInfoToFile(event:Event):void{
var mySound:Sound = event.target as Sound;
var songLen:Number;
songLen = mySound.length / mySound.bytesLoaded * mySound.bytesTotal;
songLen = Math.round(songLen / 1000);
var m:Mp3Player = new Mp3Player();
String(m.formatTimeValue(s.length/1000)))
//------------------------ ta instrukcja zwaraca czas w formacie
00:00:00 i tę wartość potrzebuję w dalszej kolejności przekazać DO FUNKCJI PONIŻEJ
}
private function onID3InfoReceived(event:Event):void
{
//tutaj wykorzystuje tagi ID3 , ktore przypisuję do paramentów obiektu AudioFile i tutaj też chciałabym przypisac wartość CZAS do jednego z parametrów. Później obiek ten jest dodawany do kolekcji, a nastepnie kolekcja służy jako dataProvider dla AdvancedDataGrid'a
}
Problem leży w tym, że nie posiadam dostepu do wartosci CZAS poza funkcją addAdditionalInfoToFile, a że listenery wywołują się asynchronicznie, jest jeszcze tak, ze najpierw wywoła się onID3 a potem dopiero kończy się addAdidionalInfo...no i jestem troche w d...moze sie okazać, że cały ten fragment trzeba będzie przepisać...tylko jak?
JAkiekolwiek sugestie będą mile widziane, bo już popadam w desperację...:)