Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

swf muzički i radio plejer u action scriptu3

[es] :: Flash :: swf muzički i radio plejer u action scriptu3

[ Pregleda: 2941 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon swf muzički i radio plejer u action scriptu308.07.2010. u 08:13 - pre 167 meseci
Početnik sam u programiranju u AS i molim za pomoć. Pokušavam da napravim najjednostavniji plejer sa dva dugmeta: Start i Stop. Na formi imam dva layera, Akcija i Maska. Na Masci su pored pozadine dva dugmeta, Start i Stop, sa instance names Dugme1 i Dugme2. Na Akciji layeru mi je sledeći skript:

var kanal:SoundChannel = new SoundChannel();
var zvuk:Sound = new Sound();
var zahtev:URLRequest = new URLRequest();

addEventListener(MouseEvent.CLICK, start_stop);

function start_stop(event:MouseEvent):void
{
if(event.target==Dugme1)
{
zahtev.url ="nešto";
zvuk.load(zahtev);
kanal = zvuk.play();
}
if (event.target==Dugme2)
{
kanal.stop();
}
}

gde je ovo "nešto" bilo neki mp3 fajl, bilo url adresa neke stanice. I ovo radi kad se klikne na dugme Start, tj Dugme1. Ne radi, međutim, dugme Stop, tj, Dugme2, odnosno klik na njega ne zaustavlja plejer. Skript je Action Script 3. Šta je pogrešno ili šta nedostaje ovom skriptu da bi radilo i dugme Stop, tj. Dugme2? Unapred zahvalan dobronamernim ljudima.
 
Odgovor na temu

StarCraft
Rančić Milan
Beograd

Član broj: 164837
Poruke: 441
...148.91.adsl.dyn.beotel.net.



+3 Profil

icon Re: swf muzički i radio plejer u action scriptu308.07.2010. u 10:45 - pre 167 meseci
Meni je interesantno kako to da i Dugme1 radi uopšte?
Kome si ti dodelio onaj addEventListener(MouseEvent.CLICK, start_stop) ?

U stvari... sad kad razmislim... izgleda da si ti stejdžu dodelio eventListener a da se Dugme1 zbog bubbling-a nekako registrovalo kao event.target (čista sreća, može se reći) Nije mi skroz jasno kako to da ti radi Dugme1 a da pritom neće da radi Dugme2 onda?

A možda nam nisi dao ceo kod?
www.zeitgeistmovie.com - film koji mora svako da vidi! (free to download)
 
Odgovor na temu

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon Re: swf muzički i radio plejer u action scriptu308.07.2010. u 12:02 - pre 167 meseci
Ovo je ceo kod i potrebno je par minuta da se sve ovo ugradi u Flash i proveri. Inače, mislim da ugrađena Flash-ova funkcija addEventListener(MouseEvent.CLICK....., obrađuje svaki klik mišem i prosleđuje komandu sopstvenoj funkciji start_stop, koja kako se i vidi proverava da li je pritisnuto Dugme1 ili Dugme2 i zavisno od toga nastavlja program. Zato klik na Dugme1 pokreće plejer i to je u redu, ali to sa Dugmetom2 ne može da se zaustavi, ne znam zašto i to sam pitao i zamolio za odgovor nekoga ko zaista nešto zna, a ne nekoga kome ništa nije jasno.
 
Odgovor na temu

StarCraft
Rančić Milan
Beograd

Član broj: 164837
Poruke: 441
*.dynamic.sbb.rs.



+3 Profil

icon Re: swf muzički i radio plejer u action scriptu309.07.2010. u 01:01 - pre 167 meseci
Haha :)
Pa jasno je meni šta si ti hteo, samo me iznenađuje da to kao takvo radi :)

Pazi, svaki put kad vidiš da se nešto (ne)dešava (a trebalo bi suprotno) koristi trace()
Ajde napiši trace("kliknuto je dugme 2"); odmah iznad (ili ispod) onog kanal.stop(); da proveriš da li dugme2 uopšte reaguje, a isto tako možeš da uradiš i za dugme1 pa ćeš videti u output panelu šta se dešava i kad.

Da, uspeo sam i ja da uradim to isto i sve radi. Ono što si ti zapravo uradio jeste da si dodelio mouEvent listener stejdžu, a pošto su dugmad childovi stejdža, u nekoj bubbling fazi ti si detectovao da je target (u stvari firstResponder) to dugme na koje si kliknuo. Međutim ako čekiraš event.currentTarget onda neće da provali dugme.
Inače ovo što si ti napisao bi trebalo da radi. Proveri za početak to drugo dugme da li reaguje uopšte.

[Ovu poruku je menjao StarCraft dana 09.07.2010. u 02:18 GMT+1]
www.zeitgeistmovie.com - film koji mora svako da vidi! (free to download)
 
Odgovor na temu

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon Re: swf muzički i radio plejer u action scriptu309.07.2010. u 07:16 - pre 167 meseci
Gospodine Rančiću,
Ja jesam početnik u AS programiranju, ali nisam u programiranju. Jesu naši forumi prepuni i početnika i neozbiljnih, ali se ne može unapred znati sa kim se ima posla, pa odgovori odgovornih lica u stilu ...sad kad bolje razmislim..., smejanje i tome slično, nisu baš primereni. Nisam baš primetio na ozbiljnijim stranim forumima ovakav odnos u odgovorima stručnih lica na pitanja i to me je iritiralo, naročito zato što smatram da je elitesecfurity naš najozbiljniji i najstručniji forum.
Ja zaista nisam toliko ušao u Flash da znam sve osobine "bubblinga", "stejdžova", ali je u ovom konkretnom primeru situacija sledeća: ako se akcioni skript napiše i deklariše kao klasa u eksternom as fajlu, Dugme2 radi, tj. isljučuje plejer. Evo tog Action Script-a koji je isti kao i onaj koji sam stavljao na formu, ali koji, može se proveriti, radi:

package
{
import flash.display.*;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.events.MouseEvent;
import flash.net.*;
public class Media extends MovieClip
{
public var kanal:SoundChannel = new SoundChannel();
public var zvuk:Sound = new Sound();
public var zahtev:URLRequest = new URLRequest();
public function Media()
{
addEventListener(MouseEvent.CLICK, start_stop);
}

function start_stop(event:MouseEvent):void
{
if(event.target==Dugme1)
{
zahtev.url ="http://sh1.beotel.net:8002";
zvuk.load(zahtev);
kanal = zvuk.play();
}
if (event.target==Dugme2)
{
kanal.stop();
}
}
}
}

Ovde sam, kao što se vidi, stavio URL internet radija S, pa sa dva dugmeta START i STOP na formi može do mile volje da se uključuje i isključuje i sluša ova radio stanica. Doduše, ovde sam namerno slagao - ne može baš do mile volje da se uključuje i i sključuje, nego samo jednom može da se isključi, a ponovo ne može da se uključi dok se swf fajl ne restartuje. Ako se pokuša ponovno uključenje, posle prvog isljučenja, Flash prijavljuje grešku:
Error #2037: Functions called in incorrect sequence, or earlier call was unsuccessful. Na stranici http://troyworks.com/blog/2007...earlier-call-was-unsuccessful/ čovek je sve lepo objasnio - "Sound object is a single use item. Once it's been loaded you can't use it again, regardless if it's the same mp3 or a different one, or null, you'll get the cryptic error "Functions called in incorrect sequence"". Sve u svemu, da bi se ponovo koristio isti sound objekat mora da se napiše još gomila koda! Zašto prosto, kad može komplikovano? Ja ovo ne shvatam, kao što ne shvatam ni zašto skript ne radi kad je deo forme, a radi kad je u posebnom fajlu. Jesu li to Adobeovi (Makromedijini) programeri prevazišli same sebe u želji da dostignu genijalnost?
Izvinjavam se, istinski, ako sam bio preopširan i ukoliko smatrate da je ovo suvišno, jednostavno obrišite moj post. Mislim ipak da bi nekome možda koristilo neko iskustvo, pa makar bilo i početničko i laičko i nestručno.
 
Odgovor na temu

StarCraft
Rančić Milan
Beograd

Član broj: 164837
Poruke: 441
...148.91.adsl.dyn.beotel.net.



+3 Profil

icon Re: swf muzički i radio plejer u action scriptu309.07.2010. u 14:54 - pre 167 meseci
E sori, video sam tvoj post još jutros, nego sam na poslu pa nisam stigo da odgovorim...

Ma i ja bezveze tebi ovde prosipam neku filozofiju... u suštini bubbling je advanced topik, smao mi je bilo interesantno što si mi upravo otkrio kako može da se primenjuje bubbling i u tom obliku :)
Pravilna programerska praksa bi bila da dodaš poseban listener za svako dugme ponaosob:
Code:
Dugme1.addEventListener(MouseEvent.MOUSE_DOWN, pokreniZvuk);
Dugme2.addEventListener(MouseEvent.MOUSE_DOWN, zaustaviZvuk);

Al ajde, kad već imaš system koji funkcioniše, onda to ne moraš da diraš.

Fora je u tome, (koliko ja vidim) da ne smeš da inicijalizuješ dva puta istu Sound instancu. Znači, rešenje za tvoj problem je najverovatnije samo da prebaciš tu instancu da bude globalna (što si ti i namestio) i treba da je inicijalizuješ samo jedamput prilikom instanciranja glavne klase Media.

Tvoj kod bi otprilike trebao da glasi ovako:
[kôd obrisan...]

Sad sam testirao ovo što sam napisao i radi. Međutim, problem je u tome što taj objekat klase Sound baferuje samo jedan stream i kada kažeš play uvek pušta isti zvuk od istog mesta. Znači, trebalo bi svaki put kad pokrećeš zvuk da stvaraš novi Sound objekat i da ga registruješ u globalni obj klase SoundChannel, tako da tvoj kôd treba da izgleda u stvari ovako:
Code:
package {
    import flash.display.*;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.events.MouseEvent;
    import flash.net.*;
    
    public class Media extends MovieClip {
        public var kanal:SoundChannel = new SoundChannel();        
        
        public function Media() {
            Dugme1.addEventListener(MouseEvent.MOUSE_DOWN, pokreniZvuk);
            Dugme2.addEventListener(MouseEvent.MOUSE_DOWN, zaustaviZvuk);
        }

        function pokreniZvuk(event:MouseEvent):void {
            var _zvuk:Sound = new Sound();
            _zvuk.load( new URLRequest("http://sh1.beotel.net:8002") );
            kanal = _zvuk.play();
        }
        
        function zaustaviZvuk(event:MouseEvent):void {
            kanal.stop();
        }
        
        
    }
}

Jedini problem koji mi se pojavljuje jeste da kada testiram swf movie iz flasha, ond amogu samo dvaput da pustim i zaustavim zvuk, treći put se više ništa ne čuje(?!) Mada ja lično sumnjam da je problem do flashovog security policy-a i da možda zato offline neće da pusti više od dvaput (ko zna?) možda će online da radi, treba testirati. Ja inače lično nikada ranije nisam radio sa zvukom.

AS3 kôd inače radi normalno i kada se piše u samom Flešu (u timeLine-u) međutim koliko vidim tvoja klasa Media extenduje MovieClip klasu, a ako ti to nije Main (document) klasa onda pretpostavljam da na stejdžu imaš jedna muvi klip i u njemu se nalaze ta dva dugmeta. I sad, (onako kako si ti prvobitno bio napisao) ta dva dugmeta verovatno reaguju na mouse eventove, ali ne mogu da prođu onu "if" proveru jer njihove putanje ne odgovaraju objektima sa kojima pokušavaš da ih uporediš. Morao bi u stvari da napišeš sledeće:
Code:
function start_stop(event:MouseEvent):void {
    if (event.target == movieClipUkojemSeNalaziDugme.Dugme1) {
        ...
    }
    if (event.target == movieClipUkojemSeNalaziDugme.Dugme2) {
        ...
    }
}


Inače, ja mislim da ja odgovaram na 90% postova na flash delu eliteSecurity foruma ;)



www.zeitgeistmovie.com - film koji mora svako da vidi! (free to download)
 
Odgovor na temu

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon Re: swf muzički i radio plejer u action scriptu309.07.2010. u 17:11 - pre 167 meseci
Ne samo da se više od dva puta ne može uključiti zvuk - ja sam to dobio dodavanjem još jedne inicijalizacije zvuk=new Sound() posle poslednje komande kanal.stop() - nego posle svakog novog klika na Dugme1 Flash izdaje poruku o grešci 2037, kako je i opisano u tekstu na adresi koju sam naveo. Video sam i kako se to rešava u primerima i to nije problem, problem je što je cela stvar, po mom mišljenju, nepotrebno iskomplikovana u Flešu i zahteva komplikovaniji kod. U svakom slučaju sam ti na ovom odgovoru i angažovanju iskreno zahvalan.
 
Odgovor na temu

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon Re: swf muzički i radio plejer u action scriptu314.07.2010. u 15:01 - pre 166 meseci
Malo uz tvoju pomoć Milane, malo uz pomoć helpova i primera, napredovao sam i napisao skript koji sluša nekoliko naših Internet stanica. Staviću ga ovde, možda ga neko iskoristi da napravi bolji Internet radio u Flešu, a ako misliš da je preveliki i neprimeren za ovde, ti ga jednostavno obriši.

package
{
import flash.display.Sprite;
import flash.media.Sound;
import flash.media.SoundChannel;
import flash.net.*;


public class ListExample extends Sprite
{
import flash.events.*;
import fl.data.DataProvider;
import fl.controls.List
import fl.controls.Label
import fl.controls.Button

private var clearButton:Button;
private var startButton:Button;
private var availableItems:List;
private var selectedItemList:List;
private var selectedItemsList:List;

public var kanal:SoundChannel = new SoundChannel();
public var adresa:Array = new Array("http://77.105.36.58:8881","http://sh1.beotel.net:8002",
"http://91.214.45.59:8052","http://mediastream.my-its.com:9320",
"http://live.radiobuca.rs:8000","http://77.92.85.113:10400",
"http://213.246.55.5:9545",
"http://67.212.179.133:8400","http://174.132.123.90:8004",
"http://www.radionovosti.rs:443/radionovosti56s.mp3");
public var imest:Array = new Array("Radio INDEX","Radio S","OK Radio",
"HIT Radio KG","Radio BUCA NS","Radio PINGVIN",
"996 FM Kraljevo","TOP FM Arandjelovac","NAXI Radio","Radio NOVOSTI");
public var index:uint = new uint();
public var _zvuk:Sound = new Sound();
public var zahtev:URLRequest = new URLRequest();
public var playing:Boolean = false;
public var praznaLista:Boolean = true;
public function ListExample() {
createComponents();
setupComponents();
}

private function setupComponents():void {
var dp:Array = new Array();
var in:uint;
var count:uint = availableItems.rowCount * 2;

for (in = 0; in< count; in++) {
dp.push({label:imest[in]});
}
availableItems.allowMultipleSelection = false;
availableItems.dataProvider = new DataProvider(dp);
availableItems.dataProvider = new DataProvider(dp);
availableItems.addEventListener(Event.CHANGE, updateLists);
}

private function clearHandler(event:MouseEvent):void {
availableItems.clearSelection();
selectedItemList.dataProvider = new DataProvider();
kanal.stop();
_zvuk.close();
playing=false;
praznaLista=true;
}

private function updateLists(e:Event):void {
if (!playing)
{
selectedItemList.dataProvider = availableItems.selectedItem ? new DataProvider
([availableItems.selectedItem]) : new DataProvider();
index=availableItems.selectedIndex;
if (index==-1)
{
index=0;
}
startButton.addEventListener(MouseEvent.CLICK, pustiRadio);
clearButton.addEventListener(MouseEvent.CLICK, clearHandler);
zahtev.url= adresa[index];
_zvuk = new Sound();
_zvuk.load(zahtev);
praznaLista=false;
}
}

private function pustiRadio(event:MouseEvent):void {
if (!playing&&!praznaLista)
{
kanal = _zvuk.play();
playing=true;
}
}

private function createComponents():void {
clearButton = new Button();
startButton = new Button();
availableItems = new List();
selectedItemList = new List();
selectedItemsList = new List();
var availableItemsLabel:Label = new Label();
var selectedItemListLabel:Label = new Label();
var selectedItemsListLabel:Label = new Label();

clearButton.move(10,142);
startButton.move(120,142);
availableItems.move(10,32);
selectedItemList.move(120,32);
availableItemsLabel.move(10,10);
selectedItemListLabel.move(120,10);
clearButton.label = "Stop";
startButton.label = "Start";
availableItemsLabel.text = "Internet radio";
selectedItemListLabel.text = "Sada slusate";
addChild(clearButton);
addChild(startButton);
addChild(availableItems);
addChild(selectedItemList);
addChild(availableItemsLabel);
addChild(selectedItemListLabel);
}
}
}

Da bi skript radio potrebno je da se u biblioteku uvezu komponente Button, List i Label. Radio "pristojno" radi, mada ga nisam previše testirao, ali ima jedan VELIKI problem, a rekao bih da nije problem u kodu: ista stanica može da se pusti DVA puta i onda ćuti, baš ono što si i ti primetio. Pa evo ovde pitanje i za tebe i za sve ostale: jeli problem u Flash Security Policy i kako ga rešiti ili u nečem drugom? Fleš nije naklonjen naročito audio strimovima, pa osim što može da sluša samo strimove sa http protokolom i mp3 formatom, još, eto, ne da da se isti strim sluša više od dva puta. Video sam po forumima da je Adobe uveo Security Policy iz bezbednosnih razloga, ali što je mnogo, mnogo je. Bar ja tako mislim. Ako je to uopšte u pitanju.


[Ovu poruku je menjao exsaba dana 14.07.2010. u 17:54 GMT+1]

[Ovu poruku je menjao exsaba dana 14.07.2010. u 17:56 GMT+1]

[Ovu poruku je menjao exsaba dana 14.07.2010. u 17:58 GMT+1]

[Ovu poruku je menjao exsaba dana 14.07.2010. u 18:01 GMT+1]

[Ovu poruku je menjao exsaba dana 14.07.2010. u 18:08 GMT+1]

[Ovu poruku je menjao exsaba dana 14.07.2010. u 22:13 GMT+1]
 
Odgovor na temu

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon Re: swf muzički i radio plejer u action scriptu314.07.2010. u 15:03 - pre 166 meseci
PS. Imao sam par grešaka u prethodnom postu, ali je sve ispravljeno

[Ovu poruku je menjao exsaba dana 14.07.2010. u 18:15 GMT+1]
 
Odgovor na temu

gordon_beneth
BGD

Član broj: 104526
Poruke: 192
*.adsl-a-6.sezampro.rs.



+1 Profil

icon Re: swf muzički i radio plejer u action scriptu314.07.2010. u 20:57 - pre 166 meseci

Code:

private function clearHandler(event:MouseEvent):void {
    availableItems.clearSelection();
    selectedItemList.dataProvider = new DataProvider();
    kanal.stop();
    _zvuk.close()
    playing=false;
    praznaLista=true;
}

/(bb|[^b]{2})/
 
Odgovor na temu

exsaba

Član broj: 82867
Poruke: 27
*.dynamic.isp.telekom.rs.

ICQ: 138696335


+1 Profil

icon Re: swf muzički i radio plejer u action scriptu314.07.2010. u 21:20 - pre 166 meseci
Ispravio kod, radi, ipak greška u kodu. Povlačim što sam rekao o Flešu, osim ono o slaboj podršci audio strimovima. gordon_beneth-u: puno hvala!
 
Odgovor na temu

[es] :: Flash :: swf muzički i radio plejer u action scriptu3

[ Pregleda: 2941 | Odgovora: 10 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.