AudioSystemTest.java. import javax.sound.sampled.*;

Samankaltaiset tiedostot
Mikseri (mixer) AudioSystem-luokan metodeita. Linja (line) Mixer-rajapinnan metodeita. Portti (port) Line-rajapinnan metodeja

Java Sound -perusosat. Perusrakenne. Analogia: miksauspöytä. Äänijärjestelmä (audio system) Mikseri (mixer) AudioSystem-luokan metodeita

3.1. java.applet. 3. Javan ääniohjelmointi. Muita esille tulevia Appletmetodeja. Applet-luokan äänimetodeja. URL-luokka. AudioClip-rajapinta

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

Java-kielen perusteet

12. Javan toistorakenteet 12.1

Java-kielen perusteita

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Ohjelmointi 2 / 2010 Välikoe / 26.3

12. Javan toistorakenteet 12.1

14. Poikkeukset 14.1

Sisältö. 2. Taulukot. Yleistä. Yleistä

Ohjelmointityö 3. Mikko Laamanen

Rajapinta (interface)

17. Javan omat luokat 17.1

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

Olio-ohjelmointi Javalla

13. Loogiset operaatiot 13.1

Sisältö. 22. Taulukot. Yleistä. Yleistä

11. Javan toistorakenteet 11.1

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

14. Poikkeukset 14.1

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

Java ja grafiikka. Ville Sundberg

Metodien tekeminen Javalla

11. Javan valintarakenteet 11.1

13. Loogiset operaatiot 13.1

Listarakenne (ArrayList-luokka)

Javan GUI Scratchaajalle

3.1. java.applet. 3. Javan ääniohjelmointi. Muita esille tulevia Appletmetodeja. Applet-luokan äänimetodeja. AudioClip-rajapinta.

Poikkeustenkäsittely

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

public static void main (String [] args)

Tietokannat II -kurssin harjoitustyö

Taulukoiden käsittely Javalla

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Muuttujat ja kontrolli. Ville Sundberg

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luokan sisällä on lista

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Mitä poikkeuskäsittely tarkoittaa?

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

10 Lock Lock-lause

Ohjelmointityö 65 Tekstinmuotoilu ohjelma. Dokumentaatio. Aki Heikkinen (155394)

Ohjelmoinnin perusteet, kurssikoe

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Java-kielen perusteita

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

LUKU 17 MUUTAMIA JAVA FX -SOVELLUKSIA. Tässä dokumentissa esitellään muutamia Java FX -sovelluksia.

Rinnakkaisohjelmointi, Syksy 2006

1 Tehtävän kuvaus ja analysointi

Olio-ohjelmointi Käyttöliittymä

Tietorakenteet. JAVA-OHJELMOINTI Osa 5: Tietorakenteita. Sisällys. Merkkijonot (String) Luokka String. Metodeja (public)

17. Javan omat luokat 17.1

Java-API, rajapinnat, poikkeukset, UML,...

Java-kielen perusteet

Mikä yhteyssuhde on?

16. Javan omat luokat 16.1

Sisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat

Ohjelmoinnin perusteet Y Python

Ohjelmointi 2 / 2011 Välikoe / 25.3

Tietorakenteet, laskuharjoitus 4,

HSMT TCP- ja UDP-soketeista

11. Javan valintarakenteet 11.1

Java-kielen perusteita

Ohjelmoinnin jatkokurssi, kurssikoe

1. Kun käyttäjä antaa nollan, niin ei tulosteta enää tuloa 2. Hyväksy käyttäjältä luku vain joltain tietyltä väliltä (esim tai )

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Luokan muodostimet (Constructors)

812341A Olio-ohjelmointi, Olio-ohjelmoinnin peruskäsitteet ja Java-kieli

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

7. Näytölle tulostaminen 7.1

8. Näppäimistöltä lukeminen 8.1

Ohjelmoinnin perusteet Y Python

9. Periytyminen Javassa 9.1

Tietorakenteet, laskuharjoitus 4,

Taulukot. Taulukon käsittely. Tämän osan sisältö. Esimerkki. Taulukon esittely ja luonti. Taulukon alustaminen. Taulukon koko

Testivetoinen ohjelmistokehitys

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Periytyminen (inheritance)

13. Hyvä ohjelmointitapa (osa 1) 13.1

Transkriptio:

AudioSystemTest.java public class AudioSystemTest // Haetaan järjestelmään asennetut mikserit. Mixer.Info[] mi = AudioSystem.getMixerInfo(); // Käydään läpi löydetyt mikserit. i = 0; i < mi.length; i++) System.out.println(mi[i]); Mixer m = AudioSystem.getMixer(mi[i]); // Haetaan mikserin lähdelinjat. Line.Info[] sli = m.getsourcelineinfo(); j = 0; j < sli.length; j++) System.out.println("source: " + sli[j]); // Haetaan mikserin kohdelinjat. Line.Info[] tli = m.gettargetlineinfo(); j = 0; j < tli.length; j++) System.out.println("target: " + tli[j]); System.out.println(); SimplePlayer.java import java.io.*; public class SimplePlayer // Komentoriviargumenttien käsittelyä. if (args.length == 0) System.exit(0); File file = new File(args[0]); int loopcount = 0; if (args.length > 1 && args[1].equals("loop")) if (args.length > 2) 1

// Silmukoiden lukumäärä. loopcount = Integer.parseInt(args[2]) - 1; catch (NumberFormatException e) System.err.println("Ei kokonaisluku: " + args[2]); System.exit(1); else // Ikisilmukka. loopcount = Clip.LOOP_CONTINUOUSLY; // Haetaan tiedostovirta ja sen ääniformaatti. AudioInputStream source = AudioSystem.getAudioInputStream(file); AudioFormat format = source.getformat(); // Luodaan Clip-tyyppinen linja ääniformaatille. DataLine.Info info = new DataLine.Info(Clip.class, format); // Onko järjestelmässä pyydetyn laista linjaa? if (!AudioSystem.isLineSupported(info)) System.err.println("Ei löydy sopivaa linjaa."); System.exit(1); // Pyydetään järjestelmältä linja. Clip clip = (Clip)AudioSystem.getLine(info); // Luetaan tiedosto. clip.open(source); // Soitetaanko vain kerran vai silmukoidaanko? if (loopcount == 0) clip.start(); else clip.loop(loopcount); catch (LineUnavailableException e) System.err.println("Linjaa ei voi käyttää."); // 2

catch (IOException e) System.err.println("Virhe tiedoston luvussa."); catch (UnsupportedAudioFileException e) System.err.println("Tuntematon tiedostoformaatti."); // main() // class RandomSequencePlayer.java import java.io.*; import java.util.*; public class RandomSequencePlayer private Random random = new Random(); private Clip[] clips; public RandomSequencePlayer(File[] files) // Haetaan tiedostovirrat ja formaatit ja varataan linjat. AudioInputStream[] sources = new AudioInputStream[files.length]; AudioFormat[] formats = new AudioFormat[files.length]; DataLine.Info[] infos = new DataLine.Info[files.length]; i = 0; i < sources.length; i++) sources[i] = AudioSystem.getAudioInputStream(files[i]); formats[i] = sources[i].getformat(); infos[i] = new DataLine.Info(Clip.class, formats[i]); if (!AudioSystem.isLineSupported(infos[i])) System.err.println("Ei löydy sopivaa linjaa."); System.exit(1); // if // for // Luetaan tiedostot. clips = new Clip[sources.length]; i = 0; i < clips.length; i++) clips[i] = (Clip)AudioSystem.getLine(infos[i]); // Lisätään linjalle tapahtumia kuunteleva olio. clips[i].addlinelistener(new new Changer()); 3

clips[i].open(sources[i]); catch (LineUnavailableException e) System.err.println("Linjaa ei voi käyttää."); // catch (IOException e) System.err.println("Virhe tiedoston luvussa."); catch (UnsupportedAudioFileException e) System.err.println("Tuntematon tiedostoformaatti."); // constructor public void startrandomclip() // Arvotaan ääni, siirretään osoitin sen alkuun // ja soitetaan se. int finger = random.nextint(clips.length); clips[finger].setframeposition(0); clips[finger].start(); // Parsitaan komentorivi ja käynnistetään sovellus. File[] files = new File[args.length]; i = 0; i < files.length; i++) files[i] = new File(args[i]); RandomSequencePlayer rsp = new RandomSequencePlayer(files); rsp.startrandomclip(); // Linjan tapahtumien kuuntelija. private class Changer implements LineListener public void update(lineevent e) // Jos soitto alkoi, raportoi. if (e.gettype().equals(lineevent.type.start)) System.out.println("New clip started."); // Jos soitto loppui, käynnistä uusi ääni. if (e.gettype().equals(lineevent.type.stop)) startrandomclip(); // class 4

SynthPlayer.java import java.io.*; import java.util.*; public class SynthPlayer float samplefrequency = 44100.0f; int bitsinquantization = 8; int numberofchannels = 1; boolean signedvalues = true; boolean bigendianvalues = true; // Luodaan ääniformaatti. AudioFormat format = new AudioFormat(sampleFrequency, bitsinquantization, numberofchannels, signedvalues, bigendianvalues); DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); if (AudioSystem.isLineSupported(info)) SourceDataLine line = (SourceDataLine)AudioSystem.getLine(info); // Kuuden sekunnin mittainen puskuri. int buffersize = 6 * (int)samplefrequency; byte[] buffer = new byte[buffersize]; int twosecondmarker = 2 * (int)samplefrequency; int foursecondmarker = 4 * (int)samplefrequency; // Kaksi sekuntia kohinaa. Random random = new Random(); i = 0; i < twosecondmarker; i++) buffer[i] = (byte)random.nextint(); // Kaksi sekuntia 440 Hz:n kanttiaaltoa. int wavelength = (int)samplefrequency / 440; i = twosecondmarker; i <= (foursecondmarker - wavelength); i += wavelength) j = i; j < i + wavelength / 2; j++) buffer[j] = Byte.MAX_VALUE; j = i + wavelength / 2; j < i + wavelength; j++) buffer[j] = Byte.MIN_VALUE; 5

// Kaksi sekuntia 440 Hz:n siniaaltoa. i = foursecondmarker; i <= (buffersize - wavelength); i += wavelength) j = i; j < i + wavelength; j++) buffer[j] = (byte)(127.0 * Math.sin((double)j / wavelength * 2 * Math.PI)); // Avataan linja ja aloitetaan toisto. line.open(format); line.start(); // Kirjoitetaan puskuri linjalle. line.write(buffer, 0, buffersize); // Odotetaan linjan tyhjentymistä ennen kuin lopetetaan. line.drain(); line.stop(); line.close(); catch (LineUnavailableException e) System.err.println("Linjaa ei voi käyttää."); else System.err.println("Ei löydy sopivaa linjaa."); Karaoke.java import java.io.*; public class Karaoke // Puskurin pituus sekunneissa. private static final float bufferlength = 0.5f; AudioFormat format = new AudioFormat(44100.0f, 16, 1, true, true); DataLine.Info infotarget = new DataLine.Info(TargetDataLine.class, format); DataLine.Info infosource = new DataLine.Info(SourceDataLine.class, format); 6

if (AudioSystem.isLineSupported(infoTarget) & AudioSystem.isLineSupported(infoSource)) // Pyydetään linjat. TargetDataLine linetarget = (TargetDataLine)AudioSystem.getLine(infoTarget); SourceDataLine linesource = (SourceDataLine)AudioSystem.getLine(infoSource); // Varataan tilaa puskurille. int buffersize = (int)(bufferlength * format.getframesize() * format.getframerate()); byte[] buffer = new byte[buffersize]; // Linjat auki ja käyntiin. linetarget.open(format, buffersize); linesource.open(format); linetarget.start(); linesource.start(); // Ikisilmukka (rumaa...) while (true) // Luetaan dataa puskuriin. int datasize = linetarget.read(buffer, 0, buffersize); // Tässä kohtaa puskurissa olevalle äänelle voisi // tehdä jotain jäynää... // Kirjoitetaan puskurissa oleva data. linesource.write(buffer, 0, datasize); catch (LineUnavailableException e) System.err.println("Linja ei ole käytettävissä."); else System.err.println("Pyydettyä linjaa ei löydy."); 7

ControlPlayer.java import java.io.*; public class ControlPlayer // Komentoriviargumenttien käsittelyä. if (args.length == 0) System.exit(0); File file = new File(args[0]); boolean gain = false; boolean pan = false; boolean rate = false; boolean mute = false; if (args.length >= 1) gain = args[1].equals("gain"); pan = args[1].equals("pan"); rate = args[1].equals("rate"); mute = args[1].equals("mute"); float parameter = 0.0f; if (args.length == 3) parameter = Float.parseFloat(args[2]); catch (NumberFormatException e) System.err.println("Ei liukuluku: " + args[2]); System.exit(1); // Haetaan tiedostovirta ja sen ääniformaatti. AudioInputStream source = AudioSystem.getAudioInputStream(file); AudioFormat format = source.getformat(); // Luodaan Clip-tyyppinen linja ääniformaatille. DataLine.Info info = new DataLine.Info(Clip.class, format); // Onko järjestelmässä pyydetyn laista linjaa? if (!AudioSystem.isLineSupported(info)) System.err.println("Ei löydy sopivaa linjaa."); System.exit(1); 8

// Pyydetään järjestelmältä linja. Clip clip = (Clip)AudioSystem.getLine(info); // Luetaan tiedosto ja soitetaan se. clip.open(source); clip.start(); // Vahvistus. if (gain && clip.iscontrolsupported(floatcontrol.type.master_gain)) FloatControl gainctrl = (FloatControl)clip.getControl( FloatControl.Type.MASTER_GAIN); gainctrl.setvalue(parameter); // Panorointi. if (pan && clip.iscontrolsupported(floatcontrol.type.pan)) FloatControl panctrl = (FloatControl)clip.getControl( FloatControl.Type.PAN); panctrl.setvalue(parameter); // Taajuuden muutos. if (rate && clip.iscontrolsupported(floatcontrol.type.sample_rate)) FloatControl ratectrl = (FloatControl)clip.getControl( FloatControl.Type.SAMPLE_RATE); ratectrl.setvalue(parameter); // Mykistys. if (mute && clip.iscontrolsupported(booleancontrol.type.mute)) BooleanControl mutectrl = (BooleanControl)clip.getControl( BooleanControl.Type.MUTE); mutectrl.setvalue(true); // Tulostetaan säätimet. Control[] ctrl = clip.getcontrols(); i = 0; i < ctrl.length; i++) System.out.println(ctrl[i]); catch (LineUnavailableException e) 9

System.err.println("Linjaa ei voi käyttää."); // catch (IOException e) System.err.println("Virhe tiedoston luvussa."); catch (UnsupportedAudioFileException e) System.err.println("Tuntematon tiedostoformaatti."); // main() // class 10