BABEŞ-BOLYAI UNIVERSITY CLUJ NAPOCA FACULTY OF MATHEMATICS AND INFORMATICS SPECIALIZATION: COMPUTER SCIENCE Diploma Thesis Musical information processing Abstract There will be a lot of citation from this book [Zölzer, 2008] This work is the result of my own activity. I have neither given nor received unauthorized assistance on this work. 2011 JUNE ALBERT CSANÁD - ISTVÁN ADVISOR: TEACHING ASSISTANT BODÓ ZALÁN-PÉTER, PHD.
UNIVERSITATEA BABEŞ-BOLYAI, CLUJ NAPOCA FACULTATEA DE MATEMATICÃ ŞI INFORMATICÃ SPECIALIZAREA INFORMATICÃ Lucrare de diplomă Procesarea informaţiei muzicale CONDUCĂTOR ŞTIINŢIFIC: ASISTENT UNIVERSITAR DR, BODÓ ZALÁN - PÉTER. ABSOLVENT: ALBERT CSANÁD - ISTVÁN IUNIE 2011
BABEŞ-BOLYAI TUDOMÁNYEGYETEM KOLOZSVÁR MATEMATIKA ÉS INFORMATIKA KAR INFORMATIKA SZAK Diplomadolgozat Zenei információ feldolgozása TÉMAVEZETŐ: DR. BODÓ ZALÁN - PÉTER, EGYETEMI TANÁRSEGÉD. SZERZŐ: ALBERT CSANÁD - ISTVÁN 2011 JÚNIUS
Tartalomjegyzék 1. Digitális jelfeldolgozás 3 1.1. DSP............................................. 3 1.1.1. Jel.......................................... 3 1.1.2. Jelfeldolgozás.................................... 3 1.2. Analóg-Digitális konvertálás................................ 4 1.2.1. Mintavételezés................................... 4 1.2.2. Kvantálás...................................... 5 1.2.3. Kódolás....................................... 6 1.3. Digitális hangfeldolgozás.................................. 6 1.4. Fast Fourier transzformáció................................. 7 2. Alkalmazási terület 8 2.1. Alkalmazási terület, célközönség.............................. 8 2.2. Motiváció.......................................... 8 3. Technológiák, API-k 10 3.1. A Java TM Sound API.................................... 10 3.1.1. javax.sound.sampled................................ 10 3.1.2. javax.sound.midi.................................. 11 3.2. Fast fourier Transzformáció (FFT)............................. 12 4. Dokumentáció amíg jobb cím nem jut az eszembe... 13 4.1. Célok............................................ 13 2
1. fejezet Digitális jelfeldolgozás Összefoglaló: Ebben a fejezetben általánosságban fogjuk tárgyalni a digitális jelfeldolgozást, az analóg jelnek digitálissá való átalakítását, a digitális hangfeldolgozást és a fast Fourier transzformációt. 1.1. DSP A digitális jelfeldolgozás már az 1960-as években elkezdett rohamosan fejlődni, majd a processzoroknak a gyors fejlődése tette lehetővé, hogy a digitális jelfeldolgozásra kifejlesztett algoritmusok igazán használhatóak legyenek.[hayes, 1999] A digitális jelfeldolgozásnak az egyik fő célja az analóg jelnek a digitális formában való tárolása, értelmezése és feldogozása. 1.1.1. Jel A jel [Proakis és Manolakis, 1995] az idő, tér vagy más független változónak a függvényében változó fizikai mennyiség. Ezeket a jeleket le lehet írni pontosan függvények segítségével (pl.: f(t) = t 2 ), bár általában ez nem lehetséges, mert vagy nem ismerünk függvényt, ami leírná, vagy ha ismerünk, akkor túl komplikált, hogy használható legyen valamire. Például a beszédet nem lehet leírni egyszerű függvények segítségével, de le lehet írni különböző (frekvenciájú, amplitúdójú) szinuszoid függvények összegeként. 1.1.2. Jelfeldolgozás A jeleket fel tudjuk dolgozni analóg úton: szűrhetjük, megnövelhetjük a frekvenciáját és az amplitúdóját. Ugyanezeket a műveleteket, más komplexebb műveleteket és olyan műveleteket is elvégezhetünk digitálisan, amikre nem érdemes áramkört tervezni, illetve gyártani, ehhez a jelet át kell alakítani digitálissá, majd általában vissza analóggá, ezeket analog-to-digital konverterrel (ADC) illetve digital-to-analog konverterrel (DAC) valósítják meg [Proakis és Manolakis, 1995]. A digitális jelfeldolgozásnak rengeteg előnye van az analóg jelfeldolgozással szemben, ezek közül talán a legfontosabb, hogy sokkal összetettebb műveleteket lehet végezni a jelen. Egy másik fontos előnye, hogy sokkal költséghatékonyabb, ha egy analóg jelfeldolgozót más célra szeretnénk átalakítani, akkor általában az egész áramkört újra kell tervezni és építeni, míg a digitálisnál csak a szoftvert kell kicserélni. Egy másik nagy előnye, hogy míg az analóg feldogozás során a jelnek a pontosságát nagyon nehéz megőrizni, szinte lehetetlen, addig a digitális jelfeldolgozásnál, miután megtörtént a digitális jellé való átalakítás, gyakorlatilag nem veszít a jel a pontosságából. 3
1. FEJEZET: DIGITÁLIS JELFELDOLGOZÁS A digitális jelfeldolgozásnak megvannak a hátrányai is az analóggal szemben: ha egy nagyon egyszerű műveletet akarunk végezni a jelen, akkor sokkal drágább a digitális megoldás, mint az analóg. Ha olyan jeleket szeretnénk feldolgozni, amelyeknek nagyon magas a frekvenciájuk, vagy nagyon nagy a sávszélességük, akkor olyan ADC-re van szükségünk, amelynek nagyon magas a mintavételezési frekvenciája, ami nagyon költséges, de egy bizonyos szint fölött már lehetetlen megfelelő konvertert készíteni, ilyenkor maradnak az analóg megoldások. 1.2. Analóg-Digitális konvertálás A digitális jelfeldolgozás egyik kulcsfontosságú része az analóg adatok digitálissá való alakítása, mivel a digitális jelek nagy részét analóg jelekből nyerjük (hang, rádió, videó), nagyon kevés kivétellel, ilyen például a valutaárfolyam. Ezt általában analog-to-digital konverterekkel (ADC) szoktuk elérni. A ma használatban levő asztali számítógépek többsége rendelkezik legalább egy ilyen konverterrel, mégpedig a hangkártyán található mikrofonbemenettel, ami a hangot alakítja át digitális jellé. Az átalakítás folyamata három fő részből áll: a mintavételezésből, a kvantálásból és a kódolásból. 1.2.1. Mintavételezés A mintavételezés folyamán megmérjük a bemenő folytonos jelet. Ha x a (t) a bemenő jel, akkor x a (nt ) x(n), ahol T a mintavételezési idő [Proakis és Manolakis, 1995]. A mintavételezés mikéntjére rengeteg megoldás ismeretes, ezekből a legelterjedtebb az egyenlő időközönként való mintavételezés (periodikus), aminek a lényege, hogy T időközönként veszi a mintát, ahogy ez a 1.1 ábrán is látszik. A T -t mintavételi 1.1. ábra. Analóg jelnek periodikus mintavételezése. [Proakis és Manolakis, 1995] 4
1. FEJEZET: DIGITÁLIS JELFELDOLGOZÁS időnek nevezzük és ennek a fordítottját ( 1/T = F s ) mintavételi frekvenciának nevezzük, az angol nyelvű szakirodalomban sampling rate vagy sampling frequency néven ismert. Ennek a mintavételi frekvenciának a helyes kiválasztására érdemes odafigyelni, különben előfordulhat a 1.2 ábrán megfigyelhető aliasing jelenség, ahol túl kicsinek van megválasztva a mintavételezési frekvencia (1Hz), és így a 7/8Hz-es jelből 1/8Hz-es jel fog látszani a digitalizálás után. Ha ugyanezt a 7/8Hz-es jelet 7/8Hz-es mintavételezési frekvenciával próbálnánk digitalizálni, akkor egy nulla amplitúdójú jelet kapnánk, ami bizonyos esetekben még rosszabb, mint az előző esetben kapott 1/8Hz-es jel. 1.2. ábra. Aliasing Ennek a jelenségnek az elkerülésére az általános megoldás, hogy minimum kétszer akkorára választjuk meg a mintavételezési frekvenciát, mint a digitalizálni kívánt analóg jelnek a maximális frekvenciája. Tehát ha az analóg jelünk 30Hz és 50Hz között mozog, akkor másodpercenként minimum 100 alkalommal kell mintát vegyünk a jelből, hogy ugyanazt a frekvenciájú jelet tudjuk majd visszanyerni, ami volt. 1.2.2. Kvantálás A kvantálás folyamán a folytonos értékkészletet diszkrétté alakítjuk, minden mintának egy értéket feleltetünk meg egy véges értékkészletből. x q (n) = Q[x(n)] A kvantálási folyamat során felosztjuk a bejövő x(n) analóg jelnek az amplitúdóját L intervallumra. Ha egy x(n) érték beleesik egy ilyen [x(k), x(k + 1)] intervallumba, akkor egy x q (k) értéket rendelünk hozzá ebből az intervallumból. 5
1. FEJEZET: DIGITÁLIS JELFELDOLGOZÁS 1.3. ábra. Kvantálás. [Hayes, 1999] A véges értékkészletből kifolyólag a még nem kvantált érték és a kvantált érték kis eltérést fog mutatni, ezt kvantálási hibának, kvantálási zajnak nevezzük. e q (n) = x q (n) x(n) Gyakorlatban ezt a hibát minimálisra, elhanyagolható szintre le lehet csökkenteni, de ennek ellenére az átalakítással mindig fog elvesztődni információ, mert mindig lesz két (vagy sokszor több száz) analóg érték, amihez a kvantáló ugyanazt a kvantált értéket fogja rendelni, emiatt a kvantálás vissza nem fordítható folyamat, a kvantált jelből csak egy bizonyos pontossággal lehet visszaállítani az eredetit. 1.2.3. Kódolás A kódolás folyamán minden kvantálási szinthez egy egyedi bináris számot rendelünk. Ha L intervallumra osztottuk fel az analóg jel amplitúdóját a kvantálási folyamatban, akkor b log 2 L bites szóhosszúságú számokra lesz szükség a kódoláshoz. 1.3. Digitális hangfeldolgozás A digitális jelfeldolgozás egy nagyon ágas-bogas tudományággá nőtte ki magát, rengeteg területen alkalmazható, ezek közül az egyik terület a hangfeldolgozás. A hangfeldolgozás a digitális jelfeldolgozás azon területe, amellyel majdnem minden ember találkozott már, hiszen ott van a számítógépeinkben, a mobiltelefonjainkban és az mp3-lejátszóinkban. Egy zenefájlnak a stúdiótól, addig a pontig, amíg mi halljuk, rengeteg feldolgozáson megy keresztül. Az első lépés a stúdióban a felvétel, ahol a hangot mikrofonok segítségével analóg elektronikus jellé alakítják, majd ezt ADC segítségével digitalizálják, ezzel a digitalizált jellel a stúdióban gyakorlatilag bármit el tudnak végezni, hogy élvezhetőbb, tetszetősebb legyen: visszhang hozzáadása, zajszűrés, több külön felvett sáv összekeverése stb. Majd miután a üzletekből a számítógépünkbe vagy lejátszónkba kerül, megint egy sor digitális jelfeldolgozáson megy keresztül, mielőtt megint analóg, számunkra hallható hang lesz belőle: gondoljunk itt arra, amikor a kedvenc zenelejátszónknak a hangszínszabályzójában (equalizer) felhúzzuk a basszust, ami tulajdonképpen a 40Hz körüli frekvenciák amplitúdóját növeli meg, vagy az mp3-lejátszónkon beállítjuk 6
1. FEJEZET: DIGITÁLIS JELFELDOLGOZÁS a zenestílust, amit hallgatunk, és máris sokkal élvezhetőbb lesz a zene. A fizikai hangmagasságnak nincsenek korlátai, azonban az emberi hallásnak vannak (16 25000Hz), és ennek a tartománynak is a felső határa már fülsértő, fájdalmat okoz az ember számára [Kesztler, 2000]. Ezért a digitális hangfeldolgozásban a vizsgált frekvenciatartomány lényegesen leszűkül, így viszonylag olcsó berendezésekkel már előállíthatjuk az analóg jelből a pontos digitális jelet. Ha tovább szeretnénk a berendezésen spórolni, akkor érdemes megnézni, hogy a hang milyen célt fog szolgálni. Egy telefonbeszélgetésnél elégséges csak 3200Hz alatti tartományt vizsgálni, így egy általában 8000Hz-es mintavételezési frekvenciát használunk a telekommunikációban, ugyanez a 3200Hz az ember számára hallható frekvenciatartomány körülbelül 16%-a, mégis a hasznos információnak körülbelül 90%-át tartalmazza. Viszont ha zenéről van szó, akkor legalább 20000Hz-ig kell vizsgálni, amire általában 44100Hz-es mintavételezési frekvenciát használhatunk. Ezen kívül a vételezett mintákat is más hosszúságú szavakban tárolhatjuk: egyszerű beszédnél elég egy 8 bites szó, míg ha zenéről van szó, akkor legalább egy 16 bites szó kell a tároláshoz. Ezeket figyelembe véve, sokkal kisebb számítási kapacitással kell rendelkeznie egy egyszerű beszédet feldolgozó rendszernek ( 64kbit/s), mint egy zenére kifejlesztett rendszernek ( 706kbit/s) [Smith, 1997]. 1.4. Fast Fourier transzformáció A diszkrét Fourier transzformációk alapja, hogy minden jelet fel tudunk írni szinuszoid függvények sorozataként. A diszkrét Fourier transzformációk átviszi a jelet az idő tartományából a frekvencia tartományba, így lehetővé teszi számtalan műveletet elvégzését a jellel, amelyek nem lennének lehetségesek az idő tartományában, például spektrumanalízis vagy egy rendszer frekvenciaválaszának az elemzése. A diszkrét Fourier transzformációnak egyik megoldási módszere a fast Fourier (gyors Fourier) transzformáció. Amint a neve is mutatja, az egyik fő tulajdonsága az, hogy gyors, ezzel az algoritmussal ugyanolyan pontos eredményt lehet elérni, mint más diszkrét Fourier transzformációt számoló algoritmusokkal, csak sokkal hatékonyabban. A fast Fourier transzformáció tette lehetővé a digitális jelfeldolgozásban ma használt módszereknek a kialakulását. A fast Fourier transzformáció nagyon rövid, de nagyon bonyolult algoritmus, egyike a legbonyolultabbaknak, amit használ a digitális jelfeldolgozás. 1 A fast Fourier transzformáció kiszámítására több algoritmus is ismert: Radix-2 (Cooley-Turkey): 2 n méretű mintákra, oszd meg és uralkodj módszeren alapszik, a legelterjedtebb. Prim factor: N méretű mintákra, ahol N felírható N = N 1 N 2 formában, ahol N 1 és N 1 relatív prímek. Bővebben a pontos algoritmusokat megtalálhatjuk a [Hayes, 1999] könyvben. 1. Részlet Smith [1997] könyvéből: While the FFT only requires a few dozen lines of code, it is one of the most complicated algorithms in DSP. 7
2. fejezet Alkalmazási terület Összefoglaló: Ebben a fejezetben a programnak a célcsoportjáról, alkalmazási területéről, megírásának a motivációjáról lesz szó. 2.1. Alkalmazási terület, célközönség Az előző fejezetben láthattuk, hogy a digitális jelfeldolgozás nagyon nagy tudományág, ezen belül a digitális hangfeldolgozás szintén külön tudományágnak tekinthető. A program ebből a nagy tudományágból egy kis részt ragad ki, ezzel kíván foglalkozni, mégpedig hogy hogyan lehet kinyerni egy audiofájlból a zeneileg fontos információkat, valamint, hogy ezekkel az információkkal mit lehet kezdeni, hogyan lehet feldolgozni ezeket. A program elsősorban otthoni használatra készült, a célcsoportjába olyan kreatív, alkotni vágyó emberek tartoznak, akiknek van minimális zenei ismeretük, tudják értelmezni, amit a képernyőn látnak, tehát tisztában vannak a hangmagasságokkal, az akkordokkal. Ez utóbbinak a hiánya viszont nem jelenthet nagy akadályt, hiszen ez hamar pótolható, például [Kesztler, 2000] könyvéből vagy a [Muszty és Dobay, 2005] könyvből. Az első, az alkotni vágyás, az nem szerezhető be sajnos könyvekből. Egy másik potenciális célcsoportba tartoznak a már komolyabb zenei ismeretekkel rendelkező emberek, akik a hangjukat szeretnék képezni. De ha valaki ezekből egyikre sem akarja használni, akkor akár metronómként is használható, vagy egyszerűen hangfelvevésre, illetve lejátszására. A programnak nem célja, hogy a zeneszerzők munkáját elvegye, inkább pályakezdőknek, amatőröknek kedvcsináló, hogy szorgalmazza az alkotást. Nem tudja helyettesíteni a zenetanárt, aki megmondja, hogyan formáljuk a hangot, tehát ez a program segédeszköz lehet az alkotáshoz, de önmagában nem garancia sem a fejlődésre, sem az igazi, egyedi zene készítésére. 2.2. Motiváció A program megírásául szolgáló fő motiváció talán az volt, hogy elkezdtem gitározni tanulni, így elkerülhetetlenül, ezzel párhuzamosan, elkezdtem gondolkodni azon, hogyan lehetne elősegíteni, megkönnyíteni számítógép segítségével akár a tanulást, akár a zenealkotást. Ennek eredményeként született meg ez a program is. A megírás másik mozgatórugója az volt, hogy hasonló program jelenleg a piacon nem túl sok van, és ezek közül, ami ingyenes, az nem versenyképes, ami meg versenyképes, annak 40$ körüli ára van. 8
2. FEJEZET: ALKALMAZÁSI TERÜLET Egy hasonló programot említenék meg: a Microsoftnak a SongSmith nevű programját. A SongSmithszel véleményem szerint az a legnagyobb baj, hogy azért az árért, amiért árulják, viszonylag keveset nyújt, akinek csak azok a funkciók kellenek, amiket a SongSmith nyújt, az nem feltétlenül fog kifizetni érte 40$-t. Aki viszont zenével keresi a kenyerét, tehát megéri neki, hogy belefektessen, annak nem nyújt eleget a program. A programnak a kinézete is azt sugallja, hogy inkább egy játék, mint komoly alkalmazás. Egy ilyen jellegű programnál a minimális elvárás, hogy tudja felvenni a hangokat mikrofonon keresztül, tudja lementeni azt, tudja lejátszani, és hogy ajánljon akkordokat a felvett éneknek a függvényében. A program ezeken az alapfunkciókon kívül még képes más programban felvett audiofájloknak a megnyitására is 1 és ezt ugyanúgy tudja kezelni megnyitás után, mintha most vettük volna fel. Valamint nemcsak akkordokat ajánl a felvett hangok függvényében, hanem még ki is írja, hogy milyen hangokat énekeltünk. Ez a funkció szerintem nagyon lényeges, hiszen így nyomon tudjuk követni, hogy tényleg azt énekeltük-e amit szerettünk volna, vagy elcsúsztunk egy félhanggal, netán egy egész hanggal, és akkor tudjuk, hogy a hangunkon még van, amit csiszolni. 1. Amennyiben a megfelelő audioformátumban volt lementve. 9
3. fejezet Technológiák, API-k Összefoglaló: Ebben a fejezetben a programban használt API kerül bemutatásra, illetve a hangmagasság detektálásra használt FFT. 3.1. A Java TM Sound API A program, mivel hangokkal dolgozik, fel kell vennie a hangokat, le kell játszania a hangokat. Ezt a Java TM Sound API-nak a használatával valósítottam meg. A Java TM Sound API alsó szintű támogatást nyújt audio és MIDI adatok lejátszásához, felvevéséhez és feldolgozásához.[oracle, 2001] Az alapimplementáció támogatja: Az AIFF, AU és WAV audiofájl formátumokat, ezekből a programban a WAV fájlformátum van használva. A lineáris, az a-law és a mu-law kódolásait a fent felsorolt fájlformátumoknak. Az RMF, MIDI 0 és 1-es típusú zenefájl formátumokat. A 8 és 16 bites, a mono és sztereó, 8000 Hz és 48000 Hz közötti mintavételezési frekvenciájú hangformátumokat. A MIDI hardverekhez való hozzáférést. Hangszintézist szoftverből. A program szempontjából az API-nak 2 csomagja érdekes (ezeken kívül még kettő van, de ezek az API-nak a kibővítésére szolgálnak): javax.sound.sampled javax.sound.midi 3.1.1. javax.sound.sampled Ahhoz, hogy a Java TM Sound API segítségével letudjunk játszani, vagy fel tudjunk venni egy hangot legalább három dologra van szükségünk: formázott audioadatra, keverőre és egy sávra. A formázott audioadatot nem szabad összekeverni az audiofájlnak a formátumával. Az audioadat formátuma tartalmazza az összes információt, ami az audioadatnak a lejátszásához, vagy rögzítéséhez szükséges. Ezek az információk: 10
3. FEJEZET: TECHNOLÓGIÁK, API-K encoding: lineáris, vagy valamelyik nemlineáris kvantálási algoritmus volt használva (lineáris: PCM, nemlineáris: a-law, mu-law) samplerate: mintavételezési frekvencia samplesizeinbits: hány bites egy minta channels: mono vagy sztereó hang framesize: általában: chanels samplesizeinbytes, de tartalmazhat plusz információkat is, ilyenkor másképpen kell számolni framerate: ez általában egyenlő a samplerate-el, de ha a frame tartalmaz más információt akkor nem bigendian: big-endian vagy little-endian sorrendben vannak egy mintán belül a byte-ok, csak ha nagyobb a minta mint 8 bit akkor releváns A keverő (mixer) lényegileg hasonlít a fizikai keverőkhöz, amiket koncerteken, hangosításoknál használnak. A Java TM Sound API-ban minden fizikai audio eszköznek (pl.: hangkártya) megfelel egy keverő, valamint fordítva: több bemenetet szétválasztani, vagy összekeverni audiofolyamokba. A sávot (line) egy fizikai keverőnek a ki és bemeneti csatlakozóihoz lehet hasonlítani. A sávok segítségével küldhetünk adatokat a keverőnek, vagy kaphat adatokat a keverőből. Leegyszerűsítve a hang lejátszása így néz ki a Java TM Sound API segítségével: 1 public void play(audioinputstream playbackinputstream) { AudioFormat format = playbackinputstream.getformat(); DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info); line.open(format, bufsize); 6 byte[] data = new byte[bufferlengthinbytes]; int numbytesread = 0; line.start(); while (true) { if ((numbytesread = playbackinputstream.read(data)) == 1) { 11 break; } int numbytesremaining = numbytesread; while (numbytesremaining > 0) { numbytesremaining = line.write(data, 0, numbytesremaining); 16 } } line.drain(); line.stop(); line.close(); 21 } 3.1.2. javax.sound.midi A MIDI (Musical Instrument Digital Interface) a számítógépek és az elektronikus hangszerek közti kommunikációra fogalmaz meg egy protokollt. A program szempontjából ez annyiban érdekes, hogy a segítségével könnyedén tudjuk utánozni majdnem bármilyen hangszernek a hangját. Ehhez a csomagból fontos: 11
3. FEJEZET: TECHNOLÓGIÁK, API-K Synthesizer: a csomagnak ez az objektuma állítja elő (szintetizálja) a hangszereknek a hangját. midiüzenetek (ShortMessages, SysexMessages, MetaMessages) segítségével lehet kommunikálni vele. Az objektum audioadattá alakítja a midiüzeneteket. programchange(): ennek a metódusnak a segítségével adhatjuk meg, hogy milyen hangszernek a hangján szeretnék utánozni. noteon(int notenumber, int velocity): ez egy ShortMessages, ennek a metódusnak a segítségével mondhatjuk meg a Synthesizernek, hogy melyik hangot, és milyen hangerővel szeretnénk lejátszani. Analógia állítható fel a metódus között és a zongorának a billentyűi között: note megfelel a lenyomott billentyűnek, a velocity a lenyomásnak a gyorsaságával 3.1. noteoff(int notenumber, int velocity): hasonló a noteon-hoz, csak ez elhallgattat egy hangot. 3.1. ábra. MIDI, zongora analógia. http://en.wikipedia.org/wiki/musical_instrument_digital_interface Egy hangnak a lejátszása a Java TM Sound API segítségével: public void playmidi(int note, int volume, int duration) throws Exception{ Synthesizer synth = MidiSystem.getSynthesizer(); synth.open(); 4 Soundbank soundbank = synth.getdefaultsoundbank(); synth.loadallinstruments(soundbank); MidiChannel[] channels = synth.getchannels(); MidiChannel channel = channels[0]; channel.programchange(46); //Hárfa 9 channel.noteon(note, volume); Thread.currentThread().sleep(duration); channel.noteoff(note, volume); } Bővebben lehet olvasni a Java TM Sound API-ról a [Oracle, 2001] weboldalán. 3.2. Fast fourier Transzformáció (FFT) Ezt nem tudom, hogy ide kéne-e írjam, vagy a fontosabb algoritmusok bemutatásához... 12
4. fejezet Dokumentáció amíg jobb cím nem jut az eszembe... Összefoglaló: Ebben a fejezetben a projektnek a specifikációja kerül tárgyalásra, illetve még néhány fontosabb dokumentum. 4.1. Célok A projekt fő célja egy olyan platformfüggetlen, ingyenes szoftvernek az elkészítése, amely zenei kíséretet készít a felhasználó énekére. 4.1.1. Felhasználói követelmények Biztosítson lehetőséget a felhasználónak, hogy egy mikrofon segítségével fel tudjon venni egy éneket. Biztosítson metronómot a felvételhez. A metronómnak lehessen állítani a tempót és az ütemet. A felvételt lehessen lementeni, illetve betölteni. A szoftver jelenítse meg a felvételt hanghullám formájában. A hanghullámon jelenítse meg az ütemeket. Minden ütemre ajánljon egy akkordot (kíséretet), amit a hanghullám fölött jelenítsen meg. Adjon lehetőséget a kíséret stílusának a megválasztására. Adjon lehetőséget a stílus, tempó és az ütemnek utólagos módosítására. 13
Irodalomjegyzék Hayes, M. H. Schaum s Outline of Theory and Problems of Digital Signal Processing. Schaum s Outline series. The McGraw-Hill Companies, 1999. Kesztler, L. Zenei alapismeretek. Lyceum könyvek. Atheneum 2000 Kiadó, 2 edition, 2000. Muszty, B. és Dobay, A. Új Gitáriskola és daloskönyv. Muszty-Dobay Bt., 2005. Oracle,. Java tm sound programmer guide. http://download.oracle.com/javase/1.5.0/docs/guide/ sound/programmer_guide/, October 2001. Proakis, J. G. és Manolakis, D. G.. Digital Signal Processing - Principles, Algorithmi, Applications. PRENTICE-HALLINTERNATIONAL, 3 edition, 1995. Smith, S. W. The Scientist and Engineer s Guide to Digital Signal Processing. California Technical Publishing, 1997. Zölzer, U. Digital Audio Signal Processing. John Wiley & Sons, 2 edition, 2008. 14