Poslao: 16 Mar 2008 16:00
|
offline
- darchy
- Građanin
- Pridružio: 11 Maj 2007
- Poruke: 86
|
Napravio sam audio MP3 player sa svim potrebnim elementima u AS 3.0 !!!
Sada me zanima kako da detektujem kraj playback-a !!!
Postoji opcija:
var song:Sound = new Sound(new URLRequest("pesma.mp3"));
var sc:SoundChannel = song.play();
sc.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
function onSoundComplete(e:Event):void {
trace("Gotovo!!!");
}
Ovo radi, ali samo ako se pesma slusa od pocetka do kraja, ako kojim slucajem preskacem (ubrzavam) pesmu kreiranim seekbar-om ili ako istu pauziram u jednom trenutku, a zatim, je opet pustim, tada se ova funkcija ne izvrsava !!!???
Ima li neko ideju ???
Hvala ...
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 17 Mar 2008 14:03
|
offline
- Tamtitam
- Legendarni građanin
- Pridružio: 19 Maj 2005
- Poruke: 5224
- Gde živiš: Oslo
|
Proveri "ciji" je addEventListener. Nisam sigurna ovako napamet, ali mislim da je song.addEventListener umesto sc.addEventListener.
|
|
|
|
Poslao: 17 Mar 2008 19:01
|
offline
- darchy
- Građanin
- Pridružio: 11 Maj 2007
- Poruke: 86
|
Dosao sam do resenja nakon 3 dana razmisljanja !!! Lud je ovaj AS 3.0, treba malo da se razmislja (jos uvek sam u periodu tranzicije) !!!
Evo kako:
var song:Sound = new Sound(new URLRequest("pesma.mp3"));
var sc:SoundChannel = song.play();
this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
function onEnterFrameHandler(e:Event):void {
sc.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
}
function onSoundComplete(e:Event):void {
trace("Gotovo!!!");
}
Znaci, sve se radi preko handler-a, pa se pojavljuje brdo funkcija !!!
U svakom slucaju je bolji od AS 2.0 !!!
|
|
|
|
Poslao: 17 Mar 2008 20:59
|
offline
- Tamtitam
- Legendarni građanin
- Pridružio: 19 Maj 2005
- Poruke: 5224
- Gde živiš: Oslo
|
Pa sve ti zavisi os scope-a i sta je u tvom slucaju this. "song" bi ti isto radio posao
|
|
|
|
Poslao: 18 Mar 2008 01:55
|
offline
- darchy
- Građanin
- Pridružio: 11 Maj 2007
- Poruke: 86
|
Da ...
"song" bi radio posao, ali mora event da bude ENTER_FRAME, a u toj funkciji da dodajem SoundChannel-u SOUND_COMPLETE event ("song" ne moze da sadrzi SOUN_COMPLETE event, moze - nema greske, ali se funkcija ne izvrsava) !!!
U mom slucaju "this" je "root" !!!
|
|
|
|
Poslao: 18 Mar 2008 12:54
|
offline
- stolex
- Novi MyCity građanin
- Pridružio: 16 Jan 2008
- Poruke: 9
- Gde živiš: Nis
|
Meni se ovo resenje uopste ne svidja. Pogotovu sto se bez razloga koristi ENTER_FRAME, zasto u svakom frejmu mora da se dodaje event listener?
Mozda je bolje resenje da to uradis samo prilikom seek-a jer si reko da ti se tad gubi listener (a vrlo je moguce da sound koji je preterano izmenjen) pravi novu instancu za koju se nisi prijavio da slusas event.
|
|
|
|
Poslao: 18 Mar 2008 13:15
|
offline
- darchy
- Građanin
- Pridružio: 11 Maj 2007
- Poruke: 86
|
Citat:@stolex
(a vrlo je moguce da sound koji je preterano izmenjen) pravi novu instancu za koju se nisi prijavio da slusas event.
Ne, ne ... to nema nikakve veze,a nova instanca se ne kreira, jer je zvuk unapred definisan, "nista" se nece kreirati samo od sebe !!!
Seek i "osluskujem" ENTER_FRAME-om, ali na root-u !!!
U istom "osluskivacu" sam kreirao SOUND_COMPLETE event (i na ovaj nacin obavlja svoj posao) --- nisam kreirao milion ENTER_FRAME listener-a, vec samo jedan, ali sam zato u njega "ugradio" razna s*anja --- poziciju seekbar-a, spectrum analyzer, detekciju peek-ova na levom i desnom zvucniku, proteklo vreme, itd.
Jos jedna stvar:
ja sam mislio (vodjen znanjem iz AS 2.0) da ce ovi silni eventListener-i da uspore rad flash player-a, a isto tako i animacije, medjutim sve radi super i bez kasnjenja ... a izgleda da u AS 3.0 sve mora da se radi preko "osluskivanja", ja ne vidim drugo resenje (kompletno je objektno orijentisan) imas cak i mogucnost da, kada kreiras svoju klasu, za istu definises svoje eventListener objekte !!!
|
|
|
|
Poslao: 19 Mar 2008 01:47
|
offline
- stolex
- Novi MyCity građanin
- Pridružio: 16 Jan 2008
- Poruke: 9
- Gde živiš: Nis
|
this.addEventListener(Event.ENTER_FRAME, onEnterFrameHandler);
function onEnterFrameHandler(e:Event):void {
sc.addEventListener(Event.SOUND_COMPLETE, onSoundComplete);
}
Ovim kodom funkciju onEnterFrameHandler pozivas u svakom frejmu i njome u svakom frejmu registrujes listener za sc. Zasto to radis u nedogled?
Dalje, Nista se nece napraviti samo od sebe. TACNO. sc pravis TI. To je ono sto ti pricam. Ukoliko seek radis kao sto je lepo objasnjeno u helpu: livedocs.adobe.com/flex/3/html/help.html?co.....nd_08.html videces da svakim pozivom sound.play(position) TI pravis novu instancu soundChannel objekta, sto znaci da od sada radi on, tj da onaj prethodni vise ne radi sto znaci da taj prethodni vise ne svira, iz cega proizilazi da on nikad nece da zavrsi pesmu, iz cega dalje proizilazi da isti taj nikad nece baciti event da je pesma zavrsena. To znaci da (SAMO) kada radis seek treba ponovo da registrujes listener na novu instancu soundChannel objekta, a ne da to radis u svakom frejmu.
Citat:a izgleda da u AS 3.0 sve mora da se radi preko "osluskivanja", ja ne vidim drugo resenje (kompletno je objektno orijentisan) imas cak i mogucnost da, kada kreiras svoju klasu, za istu definises svoje eventListener objekte !!!
Ovo si imao i u AS2 ( nutrixinteractive.com/blog/?p=33 ), samo sto je u AS3 to jedino (ispravno) resenje.
E da, slazemo se u jednoj stvari: AS3 jeste mnogo bolji od AS2
|
|
|
|
Poslao: 19 Mar 2008 13:14
|
offline
- darchy
- Građanin
- Pridružio: 11 Maj 2007
- Poruke: 86
|
Ja sam zaustavljao zvuk funkcijom
SoundMixer.stopAll();
pa sam poslusao tvoj savet i zaustavljao isti funkcijom
sc.stop();
to sam radio kada treba da prebacim "poziciju" pesme seekbar-om ili da je pauziram, a zatim ponovo pustim.
Zatim sam listener "izbacio" iz ENTER_FRAME-a
sc.addEventListener(Event.SOUND_COMPLETE, onSoundCompleteHandler);
function onSoundCompleteHandler(e:Event):void {
trace("Gotovo!");
}
ali opet ne radi prilikom "preskakanja" pozicije pesme i pauziranja, vec samo ako se pesma preslusa od pocetka do kraja !!!
Ja bih te zamolio da pokusas da kreiras kod koji ce raditi ... nista specijalno ... samo da imas opciju da pauziras zvuk i da opet pustis, a da pritom SOUND_COMPLETE radi kako treba, bez ENTER_FRAME-a !!!
Hvala ...
|
|
|
|
Poslao: 19 Mar 2008 18:22
|
offline
- stolex
- Novi MyCity građanin
- Pridružio: 16 Jan 2008
- Poruke: 9
- Gde živiš: Nis
|
import flash.events.Event;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.URLRequest;
import flash.utils.setTimeout;
var sound:Sound, channel:SoundChannel, request:URLRequest;
var onComplete:Function = function(evt:Event):void{
trace("gotovo");
}
var onTimer:Function = function():void{
channel.stop();
channel.removeEventListener(Event.SOUND_COMPLETE, onComplete);
channel = sound.play(187000);
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
}
request = new URLRequest("palacinka.mp3");
sound = new Sound(request);
channel = sound.play();
channel.addEventListener(Event.SOUND_COMPLETE, onComplete);
setTimeout(onTimer, 4000);
znaci startujes sound sa sound.play() settimeout nakon 4 sec pozove funkciju onTimer u kojoj odem na 2 sekunde pred kraj moje pesme (ti unesi ovde vrednost koja tebi odgovara). Skinem stari listener, napravim novi soundChannel objekat i opet registrujem event na njega.
|
|
|
|