mms - projektni rad - dsp.etfbl.netdsp.etfbl.net/multimedia/studenti/2007/javorina_babic.pdf ·...
TRANSCRIPT
Elektrotehnički fakultet Banja Luka
P R O J E K T N I R A D
iz predmeta:
M U L T I M E D I J A L N I S I S T E M I
zadatak: Virtuelna multimedijalna biblioteka Studenti: Asistent: Vladimir Javorina, 80/02 Vladimir Risojević Milan Babić, 45/02
Multimedijalni sistemi
UVOD
U okviru laboratorijskih vježbi iz predmeta Multimedijalni sistemi upoznali smo se
sa programskim alatom Macromedia Director 2004 kao i sa elementima Lingo
programiranja. Naša zadaća je bila izrada virtuelne multimedijalne biblioteke koristeći
gore pomenuti alat i Lingo programiranje. Ovdje je dat kratak opis našeg rješenja sa nekim
screenshot-ovima radi efikasnije prezentacije.
KRATAK OPIS
Odlučili smo da će naše rješenje podržavati prikaz i reprodukciju nekih formata
audio i video sadržaja, neke formate slika, te DVD filmove. Da bi naša aplikacija radila
na najbolji mogući način potrebno je na C:\ kreirati folder projektni i unutar
njega fajlove audio.txt, video.txt, slike.txt i dvd.txt. U fajl dvd.txt prije prvog
pokretanja aplikacije unesite slovo vašeg drajva (UPPER CASE, tj. veliko slovo). To će se
nadalje čuvati u pomenutom fajlu. Na slici je prikazano kako naša aplikacija izgleda kada
se pokrene:
Multimedijalni sistemi
Početna strana je neka vrsta menija gdje korisnik može da izabere sa kojim tipom
sadržaja želi da radi. Odabir se vrši isključivo kada se klikne na sličicu. Kada se odabere
jedno od ponuđenih polja boja pozadine tog polja postaje žuta i ostaje takva dok god se ne
odabere neko drugo polje. Klikom na jednu od sličica dobijaju se sljedeće situacije:
• Na ovoj slici je prikazano kakav je izgled interfejsa kada se u meniju izabere
AUDIO. Kao što se vidi postoje:
o dugmići koji služe za reprodukciju,
o dugmići koji omogućavaju dodavanje, odnosno uklanjaje audio sadržaja,
o flashcomponent List koji je inicijalno prazan, a u koji će se upisivati nazivi
i ekstenzije fajlova koje smo dodali,
o te nadasve “moćna“ GIF animacija.
Multimedijalni sistemi
• Na ovoj slici je prikazan izgled interfejsa kada se u meniju izabere SLIKE. Tu su:
o dugmići koji služe za navigaciju,
o dugmići za dodavanje, odnosno uklanjanje slika,
o flashcomponent List koji je inicijalno prazan, a u koji će se upisivati nazivi
i ekstenzije fajlova koje smo dodali, te
o dugme koje služi za prikazivanje odabrane slike; prikaz se vrši u desnom
dijelu interfejsa.
Multimedijalni sistemi
• Na ovoj slici prikazan je izgled interfejsa kada se u meniju izabere VIDEO. Ovdje
postoje dugmići za reprodukciju video sadržaja koji će biti prikazan u desnom
dijelu, te standardni dugmići koji omogućavaju dodavanje odnosno uklanjanje
fajlova, te neizbježni flashcomponent List koji je inicijalno prazan, a u koji će se
upisivati nazivi i ekstenzije fajlova koje smo dodali.
Multimedijalni sistemi
• Na ovoj slici prikazan je izgled interfejsa kada se u meniju izabere DVD. Kao što
se vidi tu su dugmići koji služe za reprodukciju i dugmići Meni i Full screen.
Dugmići Meni i Full screen će raditi samo ako je dvd film pokrenut, tj. kada
pritisnete Meni pojavljuje se meni filma kojeg ste pokrenuli, a ako pritisnete Full
screen film kojeg ste pokrenuli se prikazuje preko cijelog ekrana. Za izlaz iz Full
screen moda potrebno je pritisnuti dugme Esc na tastaturi. Film će biti prikazan
otprilike u centru ekrana i na to mjesto će se vratiti kada izađete iz Full screen
moda.
Multimedijalni sistemi
RIJEČ-DVIJE O ČUVANJU, REPRODUKCIJI I FORMATIMA FAJLOVA
Kada je riječ o čuvanju fajlova, kao što je na početku spomenuto, opredijelili smo
se da apsolutne putanje fajlova koje dodamo u našu virtuelnu biblioteku čuvamo, u
zavisnosti od toga kojeg su tipa, u jednom od fajlova: audio.txt, video.txt i slike.txt, koji
će biti smješteni na C:\ . U fajl dvd.txt upisaćete slovo drajva koji čita dvd diskove. Kada
se aplikacija pokrene i ako odaberete jedno od polja AUDIO, SLIKE ili VIDEO vršiće se
čitanje jednog od fajlova audio.txt, video.txt ili slike.txt i sadržaj će biti prikazan u
flashcomponent List u zavisnosti koje ste od ponuđenih sadržaja odabrali. Ukoliko su
pomenuti fajlovi prazni, u flashcomponent List-i će pisati “Lista je prazna”. Ako ste se u
meniju odlučili za DVD, pritiskom na će se pročitati sadržaj fajla dvd.txt, tj. saznaće
se kojim je slovom obilježen vaš drajv koji čita dvd diskove i reprodukovaće se film. Kao
što se vidi iz predthodnog odjeljka svrha dugmića dodaj i ukloni je jasna, međutim, ovdje
ćemo prikazati i neke skrivene adute istih. Klikom na dugme dodaj dobija se sljedeća
situacija:
Multimedijalni sistemi
Kada se odabere željeni audio fajl njegova apsolutna putanja se upisuje u audio.txt, a
naziv fajla i ekstenzija će biti prikazani u flashcomponent List. Fajl audio.txt će biti
ažuriran svaki put kada se pritisne dugme dodaj i izabere željeni fajl. Slijedi dio koda koji
sve ovo podržava:
on mouseUp me if(AL.count<>0 and not voidP(sprite(13).getSelectedIndex()))then ind=integer(_movie.sprite(13).selectedIndex) end if f=new xtra("fileio") aPut=f.displayOpen() if(aPut<>Void) then if(aPut contains ".mp" or aPut contains ".wav" or aPut contains ".wma" or aPut contains ".rm" or aPut contains ".m4a") then AL.add(aPut) ALpolje.add(vratiImeFajla(aPut)) fajl=new xtra("fileio") fajl.createFile("C:\projektni\audio.txt") fajl.openFile("C:\projektni\audio.txt",2) fajl.writeString("") fajl.writeString(string(AL)) fajl.closeFile() member("audio_polje").labels=ALpolje member("audio_polje").data=AL end if end if if(pjesmaIde=true or pjesmaPauza=true)then fajl1=audioFajl.fileName repeat with i=1 to AL.count if(fajl1=AL[i] and ind=(i-1))then sprite(13).setSelectedIndex(i-1) end if end repeat end if end on vratiImeFajla(apsolutnaP) ImeFajla=apsolutnaP repeat while ImeFajla contains "\" indikator=offset("\",ImeFajla) ImeFajla=chars(ImeFajla,indikator+1,ImeFajla.length) end repeat return ImeFajla end
Dugme ukloni takođe ima skrivenu opciju ažuriranja fajla. Klikom na ovo dugme iz datog
fajla (npr. C:\projektni\audio.txt.) se uklanja putanja fajla kojeg je korisnik odabrao u
flashcomponent List-i i vrši se ažuriranje ovog fajla (C:\projektni\audio.txt). Kod je isti
kao u prethodnom slučaju. Probajte ovo na praktičnom primjeru.
vrši ažuriranje fajla
svodi apsolutnu putanju samo na
ime_fajla.ekstenzija
Multimedijalni sistemi
Što se tiče dugmića za reprodukciju audio fajlova rukovodili smo se rješenjem koje je
primjenjeno kod Winamp-a. Ukratko, dugme vraća na prethodnu pjesmu, a ukoliko
je odabrana prva pjesma u listi, onda ide na posljednju. Kod za to je:
ind=integer(_movie.sprite(13).selectedIndex) if(ind=0)then fajl=AL.getAt(AL.count) sprite(13).setSelectedIndex(AL.count-1) else fajl=AL.getAt(ind) sprite(13).setSelectedIndex(ind-1) end if
Slična je situacija kod dugmeta samo što se sada vrši prelazak na sljedeću pjesmu, a
ukoliko je odabrana posljednja pjesma u listi, prelazi se na prvu. Kod za to je:
ind=integer(_movie.sprite(13).selectedIndex) if(AL.count>ind+1)then fajl=AL.getAt(ind+2) sprite(13).setSelectedIndex(ind+1) else fajl=AL.getAt(1) sprite(13).setSelectedIndex(0) end if
Ukoliko je pjesma pokrenuta i ako pritisnete dugme ili zaustavićete
reprodukciju te pjesme, izvršiće se prelazak na prethodnu, odnosno sljedeću pjesmu i ta
pjesma će biti pokrenuta automatski. Situacija je identična ako je pjesma bila pauzirana.
Ukoliko je pjesma bila stopirana i ako ste pritisnuli jedan od ova dva dugmića izvršiće se
prelazak na prethodnu, odnosno sljedeću pjesmu, koju potom, ukoliko želite, možete
pokrenuti pritiskom na dugme . Probajte ovo praktično. Slijedi kod za dugme
koji ovo omogućuje:
if(pjesmaIde and not voidP(sprite(13).getSelectedIndex()))then sound(1).stop() ind=integer(_movie.sprite(13).selectedIndex) if(AL.count>ind+1)then fajl=AL.getAt(ind+2) sprite(13).setSelectedIndex(ind+1) else fajl=AL.getAt(1)
Multimedijalni sistemi
sprite(13).setSelectedIndex(0) end if if(fajl contains ".wma") then audioFajl=_movie.newMember(#windowsMedia) else if(fajl contains ".rm") then audioFajl=_movie.newMember(#realMedia) else audioFajl=_movie.newMember(#sound) end if audioFajl.fileName=fajl sound(1).play(audioFajl) else if(pjesmaPauza and not voidP(sprite(13).getSelectedIndex()))then sound(1).stop() ind=integer(_movie.sprite(13).selectedIndex) if(AL.count>ind+1)then fajl=AL.getAt(ind+2) sprite(13).setSelectedIndex(ind+1) else fajl=AL.getAt(1) sprite(13).setSelectedIndex(0) end if if(fajl contains ".wma") then audioFajl=_movie.newMember(#windowsMedia) else if(fajl contains ".rm") then audioFajl=_movie.newMember(#realMedia) else audioFajl=_movie.newMember(#sound) end if audioFajl.fileName=fajl sound(1).play(audioFajl) pjesmaIde=true pjesmaPauza=false else if(pjesmaIde=false and pjesmaPauza=false and not voidP(sprite(13).getSelectedIndex()) and AL.count<>0)then ind=integer(_movie.sprite(13).selectedIndex) if(AL.count>ind+1)then sprite(13).setSelectedIndex(ind+1) else sprite(13).setSelectedIndex(0) end if end if
Multimedijalni sistemi
Razvijajući ovu aplikaciju primjetili smo nekoliko, za nas bitnih, situacija. Ukoliko ste u
meniju odabrali AUDIO i ukoliko ste pokrenuli neku od pjesama iz liste ta pjesma će biti
markirana zelenom bojom. Međutim, ako dodate neku pjesmu u listu, marker sa pjesme
koja je pokrenuta će nestati. Ovako nešto se nama nije svidjelo, pa smo težeći što boljem
rješenju odlučili da se marker zadrži na onoj pjesmi koja je pokrenuta bez obzira na to da
li želite da dodate novu pjesmu u listu ili želite da uklonite neku od pjesama iz liste.
Pjesmu koja je pokrenuta ili pauzirana nije moguće ukloniti, a ako to pokušate dobićete
alert s odgovarajućom porukom. Situacija je slična ukoliko ste u meniju odabrali SLIKE
ili VIDEO, samo što smo kod slika omogućili uklanjanje slike koja je prikazana.
Napominjemo da ukoliko želite pustiti pjesmu, film ili prikazati sliku morate selektovati
stavku u flashcomponent List-u, ako ovo ne učinite dobićete alert s odgovarajućom
porukom. Takođe, napominjemo da ukoliko ste u meniju izabrali DVD trebate ubaciti dvd
film u vaš drajv, a potom pritiskom na dugme pokrećete film. Probajte ovo
praktično. Slijedi dio koda za uklanjanje pjesme:
on mouseUp me if(AL.count()<>0 and not voidP(sprite(13).getSelectedIndex()))then if(AL.count()=1)then if(pjesmaIde=true or pjesmaPauza=true)then alert "Ne mozete ukloniti pjesmu koja se reprodukuje ili je pauzirana!" else AL.deleteAt(1) ALpolje.deleteAt(1) Pomlista.add("Lista je prazna") member("audio_polje").labels=Pomlista Pomlista=[] member("audio_polje").data=Pomlista fajl=new xtra("fileio") fajl.createFile("C:\projektni\audio.txt") fajl.openFile("C:\projektni\audio.txt",2) fajl.writeString("") fajl.writeString(string(AL)) fajl.closeFile() end if
slučaj kada je jedan element u
listi -----------------------
provjera da li pjesma ide ili je
pauzirana i odgovarajući alert -----------------------
pjesma nije ni pokrenuta ni
pauzirana
Multimedijalni sistemi
else if(pjesmaIde=true or pjesmaPauza=true)then fajl1=audioFajl.fileName repeat with i=1 to AL.count if(fajl1=AL[i])then ind=integer(sprite(13).getSelectedIndex()+1) if(i>ind)then AL.deleteAt(ind) ALpolje.deleteAt(ind) member("audio_polje").data=AL member("audio_polje").labels=Alpolje fajl=new xtra("fileio") fajl.createFile("C:\projektni\audio.txt") fajl.openFile("C:\projektni\audio.txt",2) fajl.writeString("") fajl.writeString(string(AL)) fajl.closeFile() sprite(13).setSelectedIndex(i-2) else if(i<ind)then AL.deleteAt(ind) ALpolje.deleteAt(ind) member("audio_polje").data=AL member("audio_polje").labels=ALpolje fajl=new xtra("fileio") fajl.createFile("C:\projektni\audio.txt") fajl.openFile("C:\projektni\audio.txt",2) fajl.writeString("") fajl.writeString(string(AL)) fajl.closeFile() sprite(13).setSelectedIndex(i-1) else alert "Ne mozete ukloniti pjesmu koja se reprodukuje ili je pauzirana!" exit repeat end if end if end repeat else ind=sprite(13).getSelectedIndex() AL.deleteAt(ind+1) ALpolje.deleteAt(ind+1) member("audio_polje").data=AL member("audio_polje").labels=ALpolje fajl=new xtra("fileio") fajl.createFile("C:\projektni\audio.txt") fajl.openFile("C:\projektni\audio.txt",2) fajl.writeString("") fajl.writeString(string(AL)) fajl.closeFile() end if end if else
slučaj kada je u listi više od jednog
elementa -----------------------
provjera da li pjesma ide ili je
pauzirana -----------------------
provjera da li je tekuća pjesma na većoj poziciji od pjesme koju smo
odabrali za uklanjanje
slučaj kada je u listi više od jednog
elementa -----------------------
pjesma nije ni pokrenuta ni
pauzirana
Multimedijalni sistemi
if(AL.count<>0)then alert "Izaberite pjesmu!" end if end if Kao što smo spomenuli ranije, ukoliko ste odabrali da radite s DVD sadržajem i ukoliko
ste pokrenuli dvd film možete ga, ako kliknete na dugme Full screen, prikazati preko
cijelog ekrana. Slijedi dio koda koji ovo omogućuje:
on mouseUp me if(dvdIde=true)then dvdFajl.fullScreen=dvdFajl end if end Potrudili smo se da podržimo što je moguće više tipova za audio i video sadržaje, ali i za
slike. Tako smo kod audio sadržaja obezbijedili podršku za fajlove sa sljedećim
ekstenzijama:
o .mp (dakle mp3, mp4 itd), .wav, .wma, .rm kod video sadržaja obezbijedili smo podršku za fajlove sa sljedećim ekstenzijama:
o .mpeg, .mpg, .avi, .mov, .qt, .wmv, .rm, .3gp, dok smo kod slika podržali fajlove sa sljedećim ekstenzijama:
o .bmp, .jpg, .jpeg, .tif, .gif Iz nama nepoznatih razloga nismo mogli da pokrenemo fajlove sa ekstenzijom .wma, pa
smatramo da je to jedan od propusta Director-a. Što se tiče fajlova s ekstenzijom .3gp
možemo samo reći da smo ih preuzeli s mobilnog telefona i uspješno ih prikazali na
kompjuteru na kojem smo i razvijali ovu aplikaciju.
Multimedijalni sistemi
ZAVRŠNA RIJEČ
Ovjde ćemo prikazati “članove ekipe” i Score window uz komentar kako se stvari
odvijaju tokom trajanja aplikacije.
Na ovoj slici su prikazani “članovi ekipe” i script-ovi koji su im dodjeljeni. Članove ekipe
uglavnom čine dugmići, sličice, po neki tekst i jedna gif animacija.
Multimedijalni sistemi
Na ovoj slici su prikazani sprajtovi i markeri koje smo koristili u ovoj aplikaciji. Sprajtovi
od 1 do 12 postoje dok aplikacija traje, a markeri Audio, Slike, Video i DVD su zaduženi
za preostale sprajtove. Kada se pokrene aplikacija dobijamo neku vrstu menija (pomenuto
na početku) i tu ostajemo sve dok ne kliknemo na neku od sličica u poljima AUDIO,
SLIKE, VIDEO ili DVD. Kada izaberemo jedan od ponuđenih sadržaja “skače” se na
odgovarjući marker. Ako smo npr. u meniju izabrali AUDIO onda se izvršio skok na
marker Audio i sprajtovi od 13 do 21 će postojati dok se ne klikne na neku drugu sličicu iz
menija. Analogno je ako ste odabrali SLIKE, VIDEO ili DVD, samo što će sada sprajtovi
od 13 do 18, odnosno od 13 do 20, odnosno od 13 do 17 postojati dok je odabrano polje
aktivno.
Literatura:
o Director Scripting Reference
o World Wide Web