Muusika MIDI faili mahamängimine ... on lihtne, sest vastavad vahendid on küllaltki valmiskujul kättesaadavad. Kui arvutis on MIDI väljund (helikaardi kaudu) kõlaritesse või kõrvaklappidesse saadetud ning muusikafail ilusti kettal olemas, siis peaks all näha oleva nelja käsu abil olema võimalik etteantud nimega failist muusikat kuulata. Klassi MidiSystem käsk getSecuence võimaldab sekventsi lugeda failist (või mõnest muust voost). Kui avatud sekventser määrata vastavat sekventsi mängima, siis võimegi kuulata, mis faili salvestatud on. import javax.sound.midi.*; public class Midimangija1 { public static void main(String argumendid[]) throws Exception{ Sequencer sekventser=MidiSystem.getSequencer(); sekventser.open(); sekventser.setSequence(MidiSystem.getSequence(new java.io.File("koduke.mid"))); sekventser.start(); } } MIDI failis paiknevate andmete kohta võib muudki teada saada: andmete pikkust mikrosekundites ning tiksudes, radade arvu ning teated ükshaaval radade kaupa. Rajalt saab käsuga get kätte järjekorranumbri järgi MidiEvent'i. Sealt edasi getMessage väljastab teate sisu ning getTick tiksu (ajahetke), millal vastav teade süntesaatorile saadetakse. Tuleb vaadata, millist tüüpi teatega on tegemist ning vastavalt käituda. Helidega seotud teated on tüübist ShortMessage. Iga teate juures on täisarvuna kirjas kanal, käsklus ning kaks teatebaiti. Nende baitide interpretatsioon sõltub sellest, millise käsuga on tegemist. import javax.sound.midi.*; import java.util.*; public class Midimangija2 { public static void main(String argumendid[]) throws Exception{ Sequence sekvents=MidiSystem.getSequence(new java.io.File("koduke.mid")); System.out.println(sekvents.getDivisionType()+" pikkus: "+sekvents.getMicrosecondLength()/1000000.0+ " sekundit, "+sekvents.getTickLength()+" tiksu"); Track[] rajad=sekvents.getTracks(); System.out.println(rajad.length+" rada"); for(int nr=0; nr> 8 & 0xFF); //eelviimane bait Ning näide ise: import javax.sound.sampled.*; import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Piiks3Rakend extends Applet implements ActionListener, Runnable{ Button nupp=new Button("Piiksu"); Checkbox korda=new Checkbox("Korda"); public Piiks3Rakend(){ setLayout(new BorderLayout()); add(nupp); add(korda, BorderLayout.SOUTH); korda.setState(true); nupp.addActionListener(this); } public void actionPerformed(ActionEvent e){ new Thread(this).start(); } public void run(){ try{ int kandesagedus =44100; int sagedus=400; int mitmeBitineHeli=16; int kanaliteArv=1; int valjus=7000; //max 32767 int nr=0; byte[] andmed=new byte[5*kandesagedus*mitmeBitineHeli/8]; //5 sekundit while(nr> 8 & 0xFF); //eelviimane bait } AudioFormat formaat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, kandesagedus, mitmeBitineHeli, kanaliteArv, kanaliteArv*mitmeBitineHeli/8, kandesagedus, false); SourceDataLine line = (SourceDataLine) AudioSystem.getLine( new DataLine.Info(SourceDataLine.class, formaat, AudioSystem.NOT_SPECIFIED) ); line.open(formaat); line.start(); do{ line.write(andmed, 0, andmed.length); }while(korda.getState()); line.close(); }catch(Exception ex){ex.printStackTrace();} } public static void main(String[] argumendid){ Frame f=new Frame("Piiks"); Piiks3Rakend p=new Piiks3Rakend(); f.add(p); f.setSize(200, 100); f.setVisible(true); p.actionPerformed(null); } } Kokkuvõte Java muusikavõimalused on tasapisi laienenud ning alates versioonist 1.3 õnnestub nii MIDI vahenditega orkestrilugusid kokku panna kui ise digitaalhelisid luua ja töödelda. Nagu mujal, nii ka siin pole programmeerimiskeel imevahend, selle kaudu lihtsalt õnnestub arvuti vastavatele seadmetele ligi pääseda ning soovitud helisid salvestada või kuuldavale tuua. Muusikalised ja matemaatilised tagamaad tuleb ikka enesel läbi mõelda ning pärast esmavahenditega tutvumist tulebki rakenduse loomisel enam sellele pühenduda. Lugudele saate koostamisel tuleb mõelda harmoonia ning taustalõikude peale neid sobivasse helistikku paigutades. Olenevalt muusikastiilist saab sageli kolme põhiduuriga enamikuga soovitust toime ning alles ilustuste ja kaunistuste juures tuleb muud oskused ja vahendid meelde tuletada ning arvutile selgeks teha. Olemasolevat noodifaili muutes tuleb arvestada, millistel radadel asuvate häältega me mida ette võtta soovime. Digitaalhelis tuleb helilaine kuju ise välja arvutada. Nõnda kulub küll juba lihtsate häälte tekitamiseks paras kogus matemaatikat ning vähegi ilusamate helide loomiseks tuleb hulga arvutada ning tarkadest raamatutestki tarkust juurde ammutada, kuid põhimõtteliselt on võimalik luua või olemasolevatest kokku panna pea iga heli, mis vähegi ettekujutatav võiks olla.