Professional Documents
Culture Documents
Sadraj
1.
Uvod...........................................................................................................1
2.
2.1.1.
2.1.2.
Java danas......................................................................................4
2.1.3.
Zvuna podrka...............................................................................4
2.2.
2.2.1.
2.2.2.
Funkcionalnost.................................................................................6
2.2.3.
2.2.4.
2.2.5.
2.2.6.
Zvuna konfiguracija........................................................................9
2.2.7.
MIDI protokol..................................................................................11
2.2.8.
2.2.9.
2.3.
Swing....................................................................................................20
2.3.1.
Razvoj i namjena...........................................................................20
2.3.2.
Arhitektura.....................................................................................20
3.
Opis aplikacije..........................................................................................25
3.1.
3.2.
Glavni modul.........................................................................................26
3.2.1.
Glavni izbornik...............................................................................26
3.2.2.
Preglednik instrumenata................................................................30
3.3.
Glavni sekvencer..................................................................................32
3.4.
Sporedni sekvencer..............................................................................34
3.5.
Kontrolni modul.....................................................................................37
4.
4.1.1.
4.1.2.
Zvune klase..................................................................................40
4.1.3.
Pomone klase..............................................................................40
4.2.
4.2.1.
Klasa SynthesizerWrapper............................................................41
iii
4.2.2.
4.3.
Klasa SequencerWrapper.............................................................43
4.3.1.
4.3.2.
4.3.3.
4.3.4.
4.3.5.
5.
Literatura...................................................................................................66
6.
Zakljuak...................................................................................................67
iv
Uvod
1. Uvod
Digitalno zapisivanje, reprodukcija i obrada zvuka u dananje vrijeme ine
osnovnu studijsku tehnologiju za rukovanje zvunim zapisima. Napretkom
raunalne tehnologije, u 90-tim godinama 20. stoljea digitalna obrada zvuka se
ubrzano razvila, te preuzela veinski udio u zastupljenosti na svjetskom tritu nad
analognim tehnologijama.
Prvi praktini ureaj za snimanje i reprodukciju zvunog zapisa izumio i
patentirao je Thomas Edison 1878. godine. [1] Bio je to mehaniki ureaj nazvan
fonografski cilindar. Radio je na principu igle koja je bila privrena na
membranu, ije je vibracije prenosila na votani cilindar. Ureaj je brzo usavren i
rasprostranjen irom svijeta. Ovim izumom ovjeku je prvi put dana mogunost da
uhvati i spremi zvuk, te ga reproducira po elji. Snimanjem zvuka, distribucijom i
prodajom zvunih zapisa zapoeta je nova, brzo rastua grana industrije. Do
1910. godine snimljeno je i rasprodano nekoliko milijuna naslova. Ureaj je uskoro
zamijenjen gramofonom, kojeg je izumio Emile Berliner 1887. godine [2], a
industrija se nastavila sve bre razvijati. Mehaniki proces snimanja zvuka ubrzo
je zamijenjen elektrinim.
Analogno snimanje zvuka zapoeli su 1920-tih godina inenjeri amerike tvrtke
Bell Telephone Laboratories usavravanjem ureaja nazvanog mikrofon, kojeg je
takoer izumio Emile Berliner 1876. godine. Tvrtka je izum otkupila za potrebe
telefonske industrije. Analogni proces snimanja zvuka upotpunjen je izumom
magnetofona njemake tvrtke AEG 1935. godine. 1948. godine ameriki izumitelj
Les Paul izumio je viekanalni magnetofon [3] koji je postao glavni alat za
studijsko snimanje i montau zvuka sve do 90-tih godina 20. stoljea, kada je
zamijenjen raunalima. Ovim izumom postalo je mogue napredno manipuliranje
slijedom zvunih zapisa, spajanje zvunih dionica i kreiranje zvunih sekvenci.
Digitalno zapisivanje zvuka postalo je mogue tek 60-tih godina dvadesetog
stoljea. Proces pretvorbe analognog zvunog signala u digitalni oblik pod
nazivom PCM (eng. Pulse-Code Modulation) prvi je istraio i patentirao britanski
znanstvenik Alec Reeves jo 1937. godine. Nakon objave njegovog rada amerika
tvrtka Bell Telephone Laboratories poela je raditi na implementaciji procesa.
1957. godine njihov inenjer Max Mathews razvio je sustav za snimanje zvuka uz
pomo raunala. Od 1970. godine na tritu su se pojavili viekanalni digitalni
snimai zvuka tvrtki Denon, Mitsubishi i Soundstream koji su koristili PCM
tehnologiju zapisivanja. Digitalni zapisi spremali su se i dalje na magnetske trake,
a najpoznatiji tip takvog medija bile su DAT (eng. Digital Audio Tape) trake, esto
koritene u studijske svrhe.
70-tih godina 20. stoljea na tritu su se takoer poeli pojavljivati elektroniki
instrumenti, kao to su sintesajzeri i sekvenceri. 80-tih godina takvi ureaji inili su
standardnu opremu glazbenih studija. Uskoro, u zvuna studija su poela ulaziti i
raunala, koja su se spajala sa klavijaturama i ostalim elektronikim
komponentama koritenjem MIDI tehnologije (eng. Musical Instrument Digital
Interface). [4] Ova tehnologija predstavljena je 1983. godine i uvela je u upotrebu
industrijski standardiziran protokol za povezivanje, kontrolu i sinkroniziranje
elektronikih ureaja koji se odrao do danas. Protokol je definiran na nain da
1
Uvod
ureaji meu sobom izmjenjuju MIDI poruke, koje sadre instrukcije za izvoenje
operacija koje ureaji trebaju obaviti.
Poetkom 90-tih godina za zapisivanje zvuka su se poeli koristiti raunalni tvrdi
diskovi. Zvuk se u poetku spremao u sirovim AIFF ili WAV formatima, a kasnije su
uvedeni komprimirani formati kao to su MP3, WMA i OGG. Nakon to su
raunalni tvrdi diskovi dostigli dovoljne veliine, a procesori dovoljne brzine,
otvorila se mogunost za efikasno spremanje i rukovanje sa velikim zvunim
zapisima. Ubrzo, raunala su postala osnovni alat svakog glazbenog studija.
Dananji profesionalni programski alati kao to su Cubase, Protools, Logic, Acid,
Nuendo ili Sonar korisniku nude funkcionalnosti cijelog glazbenog studija u jednoj
aplikaciji, koja se uz prikladnu zvunu podrku moe koristiti na prosjenom
korisnikom osobnom raunalu. Takvi programi rezultat su dugogodinjeg razvoja i
napisani su u programskim jezicima C i C++. Od nedavno, napretkom i
optimizacijom programskog jezika Java, uz koritenje Java Sound API biblioteke,
postalo je mogue razvijati sline prenosive aplikacije prihvatljivih performansi.
kojoj se izvodi, te je vrlo brzo postala sveprisutna na Internetu. Idui korak bio je
ulazak na trite mobilnih telefona to se takoer pokazalo uspjenim.
takvi programi mogu izgraditi. API naglaava kontrolu zvuka na niskom nivou nad
onom koju korisnici tipino oekuju.
U Javi takoer postoje API-ji viih razina koji sadre elemente usko vezane uz
zvune operacije. Jedan od takvih je JMF (eng. Java Media Framework), dostupan
kao standardna ekspanzija Java platforme. JMF predstavlja ujedinjenu arhitekturu,
komunikacijski protokol i programsko suelje za snimanje i reprodukciju audio i video
zapisa. Na ovaj nain programerima se nudi jednostavna osnova za izgradnju
programa za reprodukciju multimedijskih sadraja. S druge strane, ako je potrebno
izgraditi sofisticiraniju aplikaciju sa naprednijim opcijama kao to su reprodukcija
segmentiranih ili velikih zvunih zapisa, upotreba audio efekata ili manipulacija nad
MIDI zapisom, Java Sound API nudi primjereniji pristup zbog veeg nivoa kontrole.
Java Sound API sastavljen je iz skupa brzih, optimiranih osnovnih funkcija
napisanih u C/C++ kodu. Takve funkcije piu se u proizvoljnom jeziku i provode se u
binarni kod spreman za izvoenje na ciljanoj platformi. Na taj nain se zaobilazi
interpretiranje meukoda i eliminira mogue kanjenje unutar JVM-a (eng. Java
Virtual Machine), te izravno pristupa resursima sustava na niskoj razini (eng. Low
level programing). Tako su na Windowsima osnovne funkcije napisane i prevedene
uz pomo Direct Sound-a, a na Linuxu uz pomo ALSA-e. Ovakav pristup
upotrijebljen je radi ubrzanja rada Java Sound API-ja, a dobivene performanse su u
rangu sa klasinim C/C++ kodom. Vrijeme uitavanja aplikacije takoer je skraeno u
odnosu na obian Java kod jer su sve funkcije za upravljanje zvukom unaprijed
prevedene, pa se kanjenje uglavnom odnosi na ostale Java klase, kao to su npr.
klase grafikog suelja, klase za mrenu komunikaciju i slino [8].
Mogunosti i performanse Java Sound API-ja dobro demonstrira mnotvo
besplatnih aplikacija dostupnih na Internetu [9].
2.2.2. Funkcionalnost
Java Sound API sastoji se od dva funkcionalno odvojena modula. Jedan prua
audio, a drugi MIDI podrku. Svaki modul podran je unutar svog paketa:
Osim ova dva paketa, Java Sound API jo ine paketi javax.sound.sampled.spi i
javax.sound.midi.spi koji sadre servise, tj. apstraktne klase i suelja preko kojih je
mogue uvesti dodatne komponente i funkcionalnosti unutar API-ja.
kvantizaciji,
6
Primjer pokazuje sustav sa zvunom karticom koja ima vie ulaza i vie izlaza, dok
je mikser izveden softverski. Izvori zvuka su programi, mrea, sintesajzer, datoteke
sa zvunim zapisom, mikrofon itd. Sav zvuk iz izvora dolazi do miksera gdje se spaja
u jedan tok informacija (eng. stream) koji se preko izlaza moe predati ureajima za
reprodukciju.
10
prima poruke preko jednog ili vie takvih objekata, pri emu se kae da on te objekte
posjeduje. Svaki odailja moe biti spojen na jednog primatelja odjednom, i
suprotno. Ako elimo da nam ureaj alje poruke prema vie primatelja odjednom,
onda mora posjedovati vie odailjaa pri emu je svaki spojen sa svojim
primateljem.
2.2.8.5. Sekvenceri
Sekvencer je ureaj za snimanje i reprodukciju sekvenci MIDI dogaaja. Posjeduje
odailjae i primatelje, jer mora slati poruke ostalim ureajima kao to su sintesajzeri
ili izlazni MIDI prikljuci, te ih primati prilikom zapisivanja u MIDI datoteke. Sekvencer
je u API-ju predstavljen objektom koji implementira Sequencer suelje. U odnosu na
svoje nadsuelje MidiDevice, ovo suelje definira dodatne metode za osnovne
mogunosti sekvenciranja, kao to su uitavanje sekvenci iz MIDI datoteka,
postavljanje tempa izvoenja i sinkroniziranje ostalih ureaja. Programi preko suelja
takoer mogu registrirati objekte sluae, koji se obavjetavaju o izvravanju
odabranih funkcija sekvencera.
2.2.8.6. Sintisajzeri
Sintesajzer je ureaj za generiranje zvuka. To je jedini objekt u MIDI paketu Java
Sound API-ja koji generira zvuk. Sintesajzer kontrolira 16 MIDI kanala. Kanali su
instance klase koja implementira MidiChannel suelje. Zvuk se moe generirati
direktno, koritenjem metoda ovih objekata ili slanjem poruka sintesajzeru, koji onda
prema njima generira zvukove. Poruke su ei nain upotrebe. Sintesajzer ih prima
od sekvencera ili preko ulaznog porta. Osim informacija iz MIDI poruka, npr. o visini i
jaini note, sintesajzer mora znati kako uope generirati traeni zvuk, da bi ga mogao
interpretirati na traeni nain. Ova vrsta informacija predstavljena je Instrumentom.
Svaki instrument sadri skup instrukcija u prema kojima sintesajzer generira odreeni
zvuk. Instrumenti su ugraeni u sintesajzer ili mu se dodaju u obliku kolekcije
instrumenata (eng. soundbank).
12
}
catch (Exception e) {
// obrada iznimke
}
void start(),
void stop(),
2.3. Swing
2.3.1. Razvoj i namjena
Swing je biblioteka za izradu grafikih suelja u sklopu programskog jezika Java.
Biblioteka ini dio Sun-ovog paketa grafikih komponenti pod nazivom JFC (eng.
Java Foundation Classes) u kojem su jo bibliteke AWT i Java 2D. Swing je prvi
razvila tvrtka Netscape Communications Corporation pod nazivom IFC (eng. Internet
Foundation Classes) krajem 1996. godine. Godinu dana poslije tvrtka Sun
Microsystems odluila je ukljuiti biblioteku IFC kao standardni dio jezika Java.
15
2.3.2. Arhitektura
Swing je platformski nezavisan MVC (eng. Model View Controller) okvir za izradu
grafikih suelja u programskom jeziku Java. [11] Izveden je kao jednodretveni
programski model sa slijedeim karakteristikama:
16
18
ponaanje koje komponenta treba izvoditi prilikom klika na eliju, kao to je prikaz
dijaloga ili mijenjanje boje elije ili slino.
Na slijedeoj slici prikazana je Sun-ova Swing Demo aplikacija, u kojoj su
demonstrirane neke od vizualnih mogunosti Swing-a u kombinaciji sa Java 2D
bibliotekom, pod grafikim temama Windows i Motif:
19
Opis aplikacije
3. Opis aplikacije
3.1. Koncept, namjena i dizajn
Aplikacija izraena u okviru ovog diplomskog rada predstavlja grafiki MIDI
sekvencer, namijenjen izgradnji jednostavnih i sloenih MIDI sekvenci, te
spremanju u MIDI datoteke. Grafiko suelje aplikacije prikazano je na slijedeoj
slici:
20
Opis aplikacije
3.2.1.Glavni izbornik
Glavni izbornik aplikacije sastoji se od tri podizbornika: File, Midi i Help.
3.2.1.1. Podizbornik File
Podizbornik File nudi osnovne operacije za upravljanje radom tj. projektima:
21
Opis aplikacije
22
Opis aplikacije
23
Opis aplikacije
24
Opis aplikacije
Opis aplikacije
26
Opis aplikacije
Opis aplikacije
28
Opis aplikacije
29
Opis aplikacije
30
31
32
}
}
34
SynthesizerWrapper m_SynthesizerWrapper
omota sintesajzera,
- referenca na
35
SequencerWrapper m_Sequencer,
SequencerWrapper m_LoopTool,
SequencerWrapper m_PreviewPlayer,
SynthesizerWrapper m_Synthesizer.
39
int m_TableRightColumnCount,
40
int m_TablesRowCount,
int m_TableRowHeight,
int m_TableLeftColumnWidth,
int m_TableRightColumnWidth,
int m_ActiveColumn,
Vector<TrackProperties> m_trackProperties,
SequencerWrapper m_Sequencer,
MainGUI m_MainGUI.
Prvih pet varijabli definiraju svojstva tablica sekvencera kao to su broj stupaca
i redaka tablica, te visina i irina elija. Varijabla m_ActiveColumn oznaava
osvijetljeni stupac, tj. trenutnu poziciju u sekvenci. Kolekcija m_trackProperties
koristi se za spremanje svojstava pojedinih traka iz glavne sekvence. Sastoji se od
niza TrackProperties objekata. Zadnje dvije varijable su reference na sekvencer i
glavni modul aplikacije.
Ostale lanske varijable ine vizualne komponente podijeljene na skupinu
privatnih i skupinu zatienih komponenti. Prva skupina se koristi samo u okviru
ove klase, dok se druga skupina koristi izravno u izvedenim klasama.
Klasa sadri etiri konstruktora:
BasicSequencerGUI (),
MainGUI
}
}
});
// slusa na playback kontrolama - stop
jButtonStop.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// javna metoda
stopPlayBack();
}
});
// osvjetljavanje prve kolone
setPlayingColumn(0);
}
42
43
void listenerPlay(boolean p_Loop, boolean store, long p_TickPosition) metoda koja pokree sviranje sekvence,
SequencerGUI(),
46
LoopToolGUI(),
LoopToolGUI(int p_ColumnCount),
void synchronizeTrackProperties(Vector<TrackProperties>
p_TrackProperties) - metoda postavlja kolekciju svojstava i modificira
popis traka u izborniku,
void play(boolean p_Loop, boolean p_Store, long p_TickPosition) metoda za stvaranje i sviranje sekvence prema podacima iz tablice.
Klasa nadograuje slijedee metode iz osnovnog sekvencera:
51
Zakljuak
5. Zakljuak
Aplikacija izraena u okviru ovog diplomskog rada predstavlja primjer izgradnje
sloenog zvunog sustava koritenjem Java Sound API-ja i Swing-a. Iz pokazanog
se moe zakljuiti da se upotrebom navedenih biblioteka mogu graditi korisne,
efikasne i prilagodljive zvune aplikacije namijenjene koritenju na razliitim
raunalnim platformama, prijenosnim ureajima, te na internetu, u obliku apleta
ugraenih u web stranice.
Efikasnost ovakvih aplikacija je manja u odnosu na ekvivalentne aplikacije u
jezicima kao to su C ili C++. Manjak efikasnosti uzrokuju klase unutar jezika Java
koje se odnose na grafika suelja, kolekcije, operacije s nizovima i slino. Taj
manjak efikasnosti je sa zadnjom verzijom Jave 1.6 optimizacijom jezika sveden
na minimum i ne predstavlja bitnu prepreku u odabiru tehnologije za razvoj
ovakvih aplikacija. Java Sound API zbog koritenja strojnog koda nudi
performanse jednake aplikacijama pisanim u C-u, jer su te funkcije ve prevedene
i optimizirane za platforme na kojima se kod izvodi.
Kod pisanja komercijalnih aplikacija treba ipak uzeti u obzir nekoliko dodatnih
injenica. Komercijalne aplikacije moraju pruati besprijekornu funkcionalnost te
fleksibilna i atraktivna korisnika suelja. Zvune aplikacije vee sloenosti esto
zahtijevaju drugaije grafike komponente od tipinih komponenti dostupnih u
veini grafikih biblioteka. Npr. tablice koritene za MIDI sekvence u aplikaciji
predstavljaju ogranienje u pozicioniranju nota u glazbenim sekvencama. Zbog
toga bi u svrhu izgradnje profesionalnog proizvoda trebalo izgraditi grafiku
kontrolu koja dozvoljava pozicioniranje nota na proizvoljnim mjestima u sekvenci,
uz mogunost lakog pozicioniranja na mjestima odreenima odabranim tempom
sekvence koju prua tablini pristup. Izgradnju takve kontrole mogue je izvesti
koritenjem Java 2D biblioteke, koja vrlo dobro funkcionira u kombinaciji sa
Swing-om. Izgradnja takvih kontrola ipak predstavlja poprilino sloen programski
pothvat, pogotovo u sluaju aplikacija koje se ne ograniavaju samo na MIDI
tehnologiju, ve trebaju pruati i mogunost sviranja WAV zapisa.
Osim sloenosti koju za aplikaciju predstavljaju same zvune operacije, treba
uzeti u obzir i injenicu da na tritu ve postoje slini profesionalni proizvodi koji
korisnicima osim razraene funkcionalnosti pruaju i atraktivna suelja, u
potpunosti izraena od prilagoenih, dizajnerskih grafikih komponenti.
Iz svega navedenog moe se zakljuiti, da odabir Jave kao jezika za izradu
zvunih aplikacija prua najvie pogodnosti u smislu prenosivosti aplikacije, tj.
mogunosti koritenja na raznim platformama i u sklopu web aplikacija. Ubrzanje
koje se dobiva zbog koritenja irokog skupa Java biblioteka dolazi do izraaja
kod manje sloenih aplikacija, dok se kod poveanja sloenosti ta prednost bitno
smanjuje.
52
API
AWT
JMF
MVC
JVM
GM
General MIDI
JRE
SMF
RGB
53
Popis slika
7. Popis slika
Slika 1. Uzorkovanje zvunog signala..................................................................7
Slika 2. Primjer audio miksera..............................................................................9
Slika 3. Primjer zvune konfiguracije..................................................................10
Slika 4. Primjer MIDI koniguracije.......................................................................12
Slika 5. JTable komponente sa razliitim implementacijama prikaza elija.......21
Slika 6. Komercijalne "Synthetica" teme za Swing.............................................22
Slika 7. Prikaz Sun-ove Demo aplikacije............................................................24
Slika 8. Grafiko suelje aplikacije.....................................................................25
Slika 9. Prikaz pogreke pri otvaranju datoteke.................................................26
Slika 10. Izbornik za otvaranje datoteke.............................................................27
Slika 11. Izbornik za spremanje datoteke...........................................................27
Slika 12. Prikaz pogreke pri spremanju datoteke.............................................28
Slika 13. Izbornik za odabir kolekcije zvukova...................................................28
Slika 14. Prikaz pogreke pri odabiru kolekcije zvukova....................................29
Slika 15. Izbornik za spremanje MIDI zapisa.....................................................29
Slika 16. Prikaz pogreke pri spremanju MIDI zapisa........................................30
Slika 17.Prikaz informacija o autoru i aplikaciji...................................................30
Slika 18. Preglednik instrumenata......................................................................31
Slika 19. Glavni sekvencer.................................................................................33
Slika 20. Sporedni sekvencer.............................................................................35
Slika 21. Kontrolni modul....................................................................................37
Slika 22. Klase grafikog suelja........................................................................38
54
Literatura
8. Literatura
[1]
[2]
[3]
[4]
[5]
[6]
The Financial Express, The 10-year story - Java and the networked
world, 2005, http://www.financialexpress.com/old/fe_full_story.php?
content_id=86910
[7]
[8]
[9]
55
Saetak
9. Saetak
Tema ovog diplomskog rada je izrada programskog Midi sekvencera
koritenjem Java Sound API biblioteka u sklopu programskog jezika Java. Rad je
zamiljen kao proirenje jednog dijela aplikacije Java Sound Demo tvrtke Sun
Microsystems. Cilj ovog rada je prikaz zvunih mogunosti programskog jezika
Java u kombinaciji sa osnovnim grafikim sueljem izvedenim koritenjem Java
Swing biblioteka.
Rad pokazuje kako se koritenjem navedenih biblioteka mogu izgraditi
prenosive i sloene zvune aplikacije koje po svojim performansama ne zaostaju
puno za ekvivalentnim aplikacijama pisanim u jezicima kao to su C ili C++.
56