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

Samankaltaiset tiedostot
<applet code="simpleaudioapplet.class" width=300 height=300>

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

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

Mikä yhteyssuhde on?

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

Java ja grafiikka. Ville Sundberg

Luokat ja oliot. Ville Sundberg

JAVA-OHJELMOINTI 3 op A274615

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

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

Ohjelmointi 2 / 2010 Välikoe / 26.3

Rajapinta (interface)

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Metodien tekeminen Javalla

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

Ohjelmoinnin jatkokurssi, kurssikoe

Olio-ohjelmointi Javalla

Harjoitustyö (TKO_2023)

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Olio-ohjelmointi Virhetilanteiden käsittely

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

1 Tehtävän kuvaus ja analysointi

Ohjelmistojen mallintaminen, sekvenssikaaviot

JAVA on ohjelmointikieli, mikä on kieliopiltaan hyvin samankaltainen, jopa identtinen mm. C++

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

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

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

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Tietorakenneluokkia 2: HashMap, TreeMap

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

20. Javan omat luokat 20.1

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

4. Luokan testaus ja käyttö olion kautta 4.1

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

5. HelloWorld-ohjelma 5.1

14. Poikkeukset 14.1

Luokan sisällä on lista

812347A Olio-ohjelmointi, X Reflektiivisyys

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

16. Javan omat luokat 16.1

public static void main (String [] args)

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

9. Periytyminen Javassa 9.1

Rinnakkaisohjelmointi, Syksy 2006

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

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

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

Pakkauksen kokoaminen

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

Poikkeustenkäsittely

15. Ohjelmoinnin tekniikkaa 15.1

Javan perusteita. Janne Käki

Pakkauksen kokoaminen

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

14. Poikkeukset 14.1

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

17. Javan omat luokat 17.1

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

9. Periytyminen Javassa 9.1

T Henkilökohtainen harjoitus: FASTAXON

Ohjelmointi 2 / 2011 Välikoe / 25.3

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

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 15.3

YHTEYSSUHDE (assosiation)

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

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

Sisällys. 11. Rajapinnat. Johdanto. Johdanto

Ohjelmoinnin perusteet, kurssikoe

Olio-ohjelmointi Käyttöliittymä

Oliot viestivät metodeja kutsuen

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

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

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

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

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

Listarakenne (ArrayList-luokka)

7. Oliot ja viitteet 7.1

1. Olio-ohjelmointi 1.1

12. Näppäimistöltä lukeminen 12.1

Lohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3

58131 Tietorakenteet ja algoritmit (syksy 2015)

2. Olio-ohjelmoinista lyhyesti 2.1

Tietorakenteet, laskuharjoitus 7,

Java kahdessa tunnissa. Jyry Suvilehto

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

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

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

5. HelloWorld-ohjelma 5.1

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

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 )

11. Javan valintarakenteet 11.1

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

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

Transkriptio:

3. Javan ääniohjelmointi 1. java.applet 2. javax.sound.sampled 3.1. java.applet tarjoaa yleisen, yksinkertaisen ja laitteistoriippumattoman äänipalvelun käytettävissä: appleteissa (JDK 1.0) sovelluksissa (JDK 1.2) tukee ääniformaatteja AIFF, AU, WAV, MIDI, RMF Applet-luokan äänimetodeja void play(url url) void play(url url, String name) AudioClip getaudioclip(url url) AudioClip getaudioclip(url url, String name) static AudioClip newaudioclip(url url) Muita esille tulevia Appletmetodeja void init() void start() void stop() URL getcodebase() void showstatus(string String msg) String getparameter(string name) AudioClip-rajapinta metodit yksittäistoistoon, silmukointiin ja pysäyttämiseen interface AudioClip { public void play(); public void loop(); public void stop(); } URL-luokka sijaitsee pakkauksessa java.net getcodebase-metodilla saadaan appletin perusosoite, johon lisätään äänitiedoston nimi osoite luodaan URL-luokan konstruktorilla public URL(String spec) throws MalformedURLException poikkeus on käsiteltävä (c) 2002-2006 Jouni Smed 1

SimpleAudioApplet.java 1(3) import java.applet.*; import java.net.*; public class SimpleAudioApplet extends Applet { private AudioClip sound = null; SimpleAudioApplet.java 2(3) public void init() { URL sf = new URL(getCodeBase() + "sound" sound.wav"); sound = getaudioclip(sf sf); showstatus("cannot load the " + "audio file."); } // init() SimpleAudioApplet.java 3(3) public void start() { if (sound!= null) sound.play(); } // start() SimpleAudioApplet.html <applet code="simpleaudioapplet.class" width=300 height=300 =300> Your browser doesn't support applets. Appletin elinkaari applettiolio luodaan appletti alustetaan kutsumalla init-metodia appletin suoritus aloitetaan kutsumalla start- metodia jos appletista poistutaan (esim. vaihdetaan sivua, minimoidaan selain), kutsutaan stop-metodia kun applettiin palataan takaisin, kutsutaan start- metodia appettioliota poistettaessa kutsutaan finalize- metodia BackgroundMusicApplet.java 1(2) public void init() { String name = getparameter("bg_music USIC"); String base = getcodebase() + "snd/"; sound = getaudioclip(new URL(base + name)); showstatus("cannot load audio file + name + "."); } // init() (c) 2002-2006 Jouni Smed 2

BackgroundMusicApplet.java 2(2) public void start() { if (sound!= null) sound.loop(); } // start() public void stop() { if (sound!= null) sound.stop(); } // stop() BackgroundMusicApplet.html <applet code="backgroundmusicapplet.class" width=300 height=300 =300> <param name="bg_music" muzak.wav" ="muzak.wav"> Your browser doesn't support applets. Säikeistä jos äänitiedostot ovat pitkiä, niiden lataaminen kannattaa siirtää taustalle omaan säikeeseen appletti voi aloittaa suorituksensa heti, eikä sen tarvitse odottaa äänitiedostojen latautumista säieolio periytyy joko Thread-luokasta tai se toteuttaa Runnable-rajapinnan AudioApplet.java 1(6) base = getcodebase() + "sounds/"; i = 0; i < sounds.length; i++) { String filename = getparameter("sound" + i); if (filename!= null) { AudioLoader audioloader = new AudioLoader(fileName, i); audioloader.start(); } // if AudioApplet.java 2(6) i = 0; i < sounds.length; i++) { Button button = new Button("Sound " + i); button.addactionlistener( new ButtonPress(i)); add(button); } // for AudioApplet.java 3(6) public void stop() { i = 0; i < sounds.length; i++) if (sounds[i]!= null) sounds[i].stop(); } // stop() (c) 2002-2006 Jouni Smed 3

AudioApplet.java 4(6) private class AudioLoader extends Thread { private String filename; private int finger; public AudioLoader(String n, int f) { setdaemon(true true); filename = n; finger = f; } // constructor AudioApplet.java 5(6) public void run() { sounds[finger] = getaudioclip( new URL(base + filename)); showstatus("cannot load file " + filename + "."); } // run() AudioApplet.java 6(6) private class ButtonPress implements ActionListener { private int soundnumber; public ButtonPress(int s) { soundnumber = s; } // constructor public void actionperformed(actionevent AudioClip sound = sounds[soundnumber]; if (sound!= null) ) sound.play(); } // actionperformed() AudioApplet.html <applet code="audioapplet.class" width=500 height=100 =100> <param name="sound0" ="music0.wav" 0.wav"> <param name="sound1" ="music1.wav" 1.wav"> <param name="sound2" ="music2.wav" 2.wav"> <param name="sound5" ="music5.wav" 5.wav"> Your browser doesn't support applets. Jar-tiedostot useista luokkatiedostoista koostuvat appletit on syytä koota yhdeksi jar-tiedostoksi vältetään n useiden pienten tiedostojen lataaminen esim. jar cvf AudioApplet.jar *.class JarredAudioApplet.html <applet code="audioapplet.class" archive="audioapplet.jar" width=500 height=100 =100> <param name="sound0" ="music0.wav" 0.wav"> <param name="sound5" ="music5.wav" 5.wav"> Your browser doesn't support applets. (c) 2002-2006 Jouni Smed 4

Applet-metodien käyttö sovelluksissa staattinen metodi newaudioclip palauttaa AudioClip-olion olion huom. parametriksi annetaan URL-olio eikä esim. tiedostokahva vinkki: sovelluksen oletushakemiston polun saa metodikutsulla System.getProperty("user.dir") saatua AudioClip-oliota oliota voidaan käyttää normaalisti AudioApplication.java 1(3) public class AudioApplication { public static void main(string String[] args) { AudioClip[] sounds = new AudioClip[args.length]; String base = "file:" + System.getProperty("user.dir") + "/"; AudioApplication.java 2(3) i = 0; i < args.length; i++) { sounds[i] = Applet.newAudioClip( new URL(base + args[i])); throw new RuntimeException( "Cannot load audio file " + args[i] + "."); } // for AudioApplication.java 3(3) i = 0; i < sounds.length; i++) { sounds[i].loop(); } // for } // main() 3.2. javax.sound.sampled mukana JDK-versiosta 1.3 alkaen tarjoaa matalan tason liittymän alustan äänilaitteistoon (myös havainnointi) pyrkii silti olemaan alustariippumaton ja yleistettävissä oleva rakennelma mahdollistaa äänisignaalin vastaanottamisen (esim. äänitys) käsittelyn (esim. vahvistus tai kaiunta) toistamisen Pakkaukset javax.sound.sampled rajapintoja ja luokkia samplatun äänisignaalin tallennukseen, muokkaamiseen ja toistoon javax.sound.midi rajapintoja ja luokkia MIDI-käyttöön javax.sound.sampled.spi javax.sound.midi.spi ulkopuolisille palveluntarjoajille (service( providers) ) tarkoitettuja apuluokkia (c) 2002-2006 Jouni Smed 5

Piirteitä pähkinänkuoressa: äänidataa sisältävien tavujen lukua, kirjoitusta ja operointia liittymät syöttö- (esim. mikrofoni tai tiedosto) ja tuloslaitteisiin (esim. kaiutin tai tiedosto) äänidatan puskurointi (esim. reaaliaikainen äänivirta) äänisignaaleiden yhdistäminen käyttäjän komennot: aloita, pysäytä, jatka, lopeta Äänidatan käsittelytavat puskuroitu (buffered( buffered) virta (streaming( streaming): reaaliaikaisen äänidatan käsittelyä operoitava (esim. äänitettävä tai käsiteltävä) tavuja likimain samassa tahdissa kuin missä niitä lähetetään puskuroimaton (unbuffered( unbuffered) äänidata sijaitsee (kokonaisuudessaan) muistissa monipuolisempi toisto: silmukointi, aloituspaikan valinta Äänidatan formaatit 1(2) dataformaatti kertoo kuinka sarja tavuja eli raaka samplattu äänidata pitää tulkita AudioFormat-luokka tiedostoformaatti määrittelee äänitiedoston rakenteen AudioFileFormat-luokka luokka Äänidatan formaatit 2(2) vaikka tarjolla on metodeja erilaisten ääniformaattien muuttamiseen yleisten tiedostoformaattien lukemiseen ja tallentamiseen kyse ei silti ole kaikenkattavasta äänityökalusta palveluntarjoajilta tukea ja täydennystä valikoimaan AudioFormat-luokka koodaustekniikka (esim. PCM, a-law a tai µ-law) kanavien määrä (1 = mono, 2 = stereo jne.) samplaustaajuus kvantisointitaso (so. käytettyjen bittien määrä) kehystaajuus (frame( rate) kehys (frame( frame) ) = kaikki tiettyyn hetkeen kuuluva data; (esim. kanavien nykyiset näytearvot) kehyksen koko tavuina tavujärjestys: big-endian tai little-endian endian AudioFileFormat-luokka tiedostotyyppi (esim. WAVE, AIFF) tiedoston pituus tavuina äänidatan pituus kehyksinä AudioFormat-olio, olio, joka määrittelee tiedoston sisältämän äänidatan muodon (c) 2002-2006 Jouni Smed 6

Java Sound -perusosat Perusrakenne äänijärjestelmä: AudioSystem mikseri: Mixer linja: Line portti: Port AudioSystem mikserit kohdelinjat Mixer kohdelinjat lähdelinjat Line lähdelinjat Analogia: miksauspöytä Äänijärjestelmä (audio system) tulosignaalin säätö taajuuskorjaus kaiunnan lähtö panorointi vahvistus tulosignaalit kaiunta- laite lähtösignaali kaiunnan paluu lähtösignaalin vahvistus kokoaa yhteen kaikki laitteiston ja ohjelmiston tarjoamat äänipalvelut: mikserit linjat portit äänivirrat tiedostoformaatit ääniformaatit (c) 2002-2006 Jouni Smed 7