4. Tentti 2(2)
kurssi on myös mahdollista suorittaa sähköisenä
tenttinä
tenttiluokka PharmaCityssä (1. krs)
avoinna arkipäivisin klo 8–20
tenttiaika 4 h (kuten normaalissa tentissä)
ajanvaraus max 30 vrk etukäteen verkoitse
DÄP-tentti avoinna 29.11.2010–4.3.2011
lisätiedot ja varaukset: https://tenttis.utu.fi
6. Harjoitustyö 2(2)
tehtävissä Audacity-ohjelmistolla
saatavana vapaasti
http://audacity.sourceforge.net/
alustana Windows, Mac OS X tai
Linux/Unix
tai muulla vastaavalla äänityökalulla
esim. SoundForge, AdobeAudition…
7. Kurssin luentoaikataulu
Luento Pvm.
Aihe
1. 2.11 ti
Johdanto 1(2)
2. 4.11 to
Johdanto 2(2)
3. 9.11 ti
Voimakkuuteen kohdistuvat operaatiot 1(2)
4. 11.11 to Voimakkuuteen kohdistuvat operaatiot 2(2)
5. 16.11 ti
Taajuuteen kohdistuvat operaatiot
6. 18.11 to Aikaan ja aaltomuotoon kohdistuvat operaatiot
7. 23.11 ti
Javan ääniohjelmointi 1(2)
8. 25.11 ti
Javan ääniohjelmointi 2(2)
14. Lähde- ja lisämateriaalia
Curtis Roads: The Computer Music
Tutorial, The MIT Press, 2000
Esa Blomberg & Ari Lepoluoto: Audiokirja,
Tapiolan viestintäsuunnittelu, 1991
J. Pekka Mäkelä: Kotistudio, 2. painos,
Like-kustannus, 2003
15. 1.1. Äänen fysiikkaa
ääni = väliaineessa etenevä mekaaninen
värähtely (aaltoliike), joka saa aikaan
kuuloaistimuksen
äänilähde
väliaine
havaitsija
22. Äänen nopeus
v=f
riippuu:
väliaineesta
lämpötilasta
ilmassa:
−10ºC: 325 m/s
+10ºC: 337 m/s
+20ºC: 343 m/s
eri väliaineissa:
vesi: 1480 m/s
lasi: 5200 m/s
teräs: 5000–5900
m/s
puu: 3000–4000
m/s
CO2: 259 m/s
He: 965 m/s
23. Äänen mittayksiköitä
ääniteho, P
watti, W
mittaetäisyys 1 m
äänen intensiteetti, I = P/A
teho pinta-alayksikköä kohti
äänenpaine, p = F/A:
pascal, Pa = N/m2
mittaetäisyys 1 m
24. Desibeli (dB)
ilmaisee:
kahden suureen keskinäistä suuruutta
suureen arvoa suhteessa johonkin
vertailutasoon
kahden äänitehon tai intensiteetin suhde:
L = 10 log10(I1/I0) dB
missä I0 on viitetaso
huom! mitta-asteikko on logaritminen
25. Desibeli äänen mittana
usein viitetasona käytetään ihmisen
kuulokynnystä: I0 = 10−12 W/m2
ihmisen kuuloaistimus on logaritminen
3 dB:n muutos on havaittavissa
10 dB:n muutos kuulostaa
äänenvoimakkuuden
kaksinkertaistumiselta tai puolittumiselta
30. Äänenpainetasoja
dB
suihkukone (5 m)
klassinen musiikki fff
paineilmapora (15 m)
televisio (3 m)
luento (3 m)
keskustelu (3 m)
klassinen musiikki ppp
kuiskaus (3 m)
lehtien havina
150
140
130
120
110
100
90
80
70
60
50
40
30
20
10
0
kipuraja
meluisa tehdas
meluisa katu
henkilöauton sisällä
myymälä
asumalähiö yöllä
hiljainen talo
kaiuton huone
kuulokynnys
31. Aivojen äänihavainto
tarkka äänimuisti on erittäin lyhyt: 1–2 s
on helppo kuulla sitä mitä haluaa
on helppo olla kuulematta epätärkeinä pidettyjä
ääniä
Haasin ilmiö: useita yhtäläisiä äänilähteitä
kuunnellessa lähin määrää havaitun äänensuunnan
kriittiset taajuuskaistat: ei havaita yksittäisiä
taajuuksia vaan taajuuskaistoja, joissa voimakas
ääni voi peittää kaistan hiljaisemmat äänet
32. Sävelkorkeus (musical pitch)
nuotin sävelkorkeus:
suhteessa taajuuteen
voimakkuus voi vaikuttaa madaltavasti
standardi sävelkorkeus: 440 Hz = A
oktaavi (octave) = taajuuden kaksinkertaistus
siis 220 Hz = A, 880 Hz = A jne.
puolisävelaskeleen (semitone) taajuussuhde =
12 2:1
1,06:1
46. AD-muunnos
hetkellä t mikrofonin
kalvon poikkeama on
x(t)
kaksi ongelmaa:
t:n diskretisointi:
samplaus
x(t):n diskretisointi:
kvantisointi
kaksi
approksimaatiota!
x(t)
i0, i1, i2,..., im
51. Kvantisointi ja dynamiikka
digitaalisen tallennuksen dynamiikka:
toistoalue dB:einä ≈ bittien määrä × 6,11
8-bittinen kvantisointi: 48 dB
16-bittinen kvantisointi: 96 dB
20-bittinen kvantisointi: 120 dB
52. 1.5. Tiedostoformaatit
itsensä kuvaavat (self-describing)
hierarkinen rakenne
sisältää tietoa esim.
samplaustaajuudesta
kanavien lukumäärästä
käytetty koodauksesta
tekijänoikeuksista
raa’at (raw)
laiteparametrit ja koodaus kiinnitetty
sisältää pelkkää dataa
68. 2.1.6. Kompressointi eli
dynamiikan rajoittaminen
engl. compressing
kun tulosignaalin voimakkuus ylittää
annetun kynnystason, tulosignaalin nousu
aiheuttaa lähtösignaalissa pienemmän
nousun
äänten keskinäinen voimakkusero pienenee
huom! compressing ≠ compression
kyse ei ole siis äänidatan tiivistämisestä!
69. Perusparametreja
kompressiosuhde (compression ratio):
tulosignaalin nousu:lähtösignaalin nousu
esim. 3:1 = 3 dB:n nousu tulosignaalissa
nostaa 1 dB lähtösignaalia
kynnystaso (threshold level): taso jonka
yläpuolella kompressointi alkaa vaikuttaa
71. Lisäparametreja
tartunta-aika (attack time): aika joka kuluu
kynnystason ylityksestä täyteen
kompressointiin
päästöaika (release time): aika jossa
kynnystason alitus palauttaa signaalin
normaaliksi
73. Käyttötapoja
instrumentin (esim. basso)
”tukevoittaminen”, jolloin se saadaan
helpommin esiin muiden äänten seasta
kompressoitu taustamusiikki voidaan
miksata voimakkaammaksi ilman että se
peittäisi puhetta
kohinan peitto (esim. radiolähetyksissä tai
tallennuksessa)
74. 2.1.7. Limitointi eli tason
rajoittaminen
engl. limiting
estää signaalin voimakkuuden nousun
annettua tasoa suuremmaksi
kompressoinnin erikoistapaus:
kompressiosuhde :1
76. 2.1.9. Ekspandointi eli dynamiikan
laajentaminen
engl. expanding
kun tulosignaalin voimakkuus alittaa
annetun kynnystason, tulosignaalin lasku
aiheuttaa lähtösignaalissa suuremman
laskun
77. Parametreja
ekspansiosuhde (expansion ratio):
tulosignaalin lasku:lähtösignaalin lasku
esim. 1:3 = 1 dB:n lasku tulosignaalissa laskee
3 dB lähtösignaalia
kynnystaso (threshold level): taso jonka
alapuolella ekspandointi alkaa vaikuttaa
tartunta-aika (attack time): aika jossa kynnystason
ylitys palauttaa signaalin normaaliksi
päästöaika (release time): aika joka kuluu
kynnystason alituksesta täyteen ekspandointiin
84. Parametreja
kynnystaso (threshold level): taso jonka
alapuolella kohinaportti sulkeutuu
tartunta-aika (attack time): aika joka kuluu
kynnystason ylityksestä kohinaportin
avautumiseen
pitoaika (hold time): aika jonka kohinaportti
pysyy auki kynnystason alituksen jälkeen
päästöaika (release time): aika jossa
kohinaportti sulkeutuu
85. portti täysin auki
portti pysyy auki
kunnes pitoaika on
kulunut
pitoaika
signaalitaso
Parametrisoidun kohinaportin
toiminta
kynnystaso
kohinaa
portti alkaa aueta
signaali on alle
portti sulkeutuu
kynnystason
t
92. Modulointitaajuus
< 8 Hz vibraatto
> 20 Hz äänenvärin muutos
sivukaistat (sidebands), c = kantoaallon
taajuus, m = modulointitaajuus:
A
m
c - 4m
c - 3m
c - 2m
c-m
m
c
c+m
c + 2m c + 3m c + 4m
f
97. Graafinen taajuuskorjain
taajuuskaista jaettu kiinteisiin osiin, joita
voidaan korostaa tai vaimentaa
korjainten tiheys:
oktaavisuodatin (octave filter):
fn = 2 · fn-1
terssisuodatin (third octave filter):
oktaavin kolmasosa
myös muita jakoja ja eri jakojen
yhdistelmiä
103. Vinkkejä
keskitaajuudet tärkein alue
taustan keskitaajuuksia vaimentamalla
ihmisääni nousee paremmin esiin
vaimentaminen on usein parempaa kuin
vahvistaminen ( särö)
huminan poisto: vaimenna pois 50 Hz:n
taajuusalue
”päällekkäisten” instrumenttien erottelu:
yhtäsuuret mutta vastakkaiset vahvistukset
104. 2.2.4. Taajuussuodatus
engl. band filtering
vaimentaa osan tai osia taajuusalueesta
suodatintyyppejä:
alipäästösuodatin (low pass filter)
ylipäästösuodatin (high pass filter)
kaistanestosuodatin (band rejection filter)
imusuodatin eli kapea kaistanestosuodatin
(notch filter)
kaistanpäästösuodatin (band pass filter)
122. Parametreja 1(2)
ensiheijastusten voimakkuus ja viive
voimakkuus: heijastuspinnan materiaali
viive: tilan koko
< 5 ms: pieni huone
10–20 ms: konserttisali
ensiheijastusten määrä ja tiheys (diffusion)
mitä enemmän heijastavia pintoja, sitä
enemmän diffuusiota
123. Parametreja 2(2)
korkeiden taajuuksien vaimeneminen
riippuu heijastuspintojen materiaalista
jälkikaiunta-aika (reverberation time, RT)
RT60: aika jossa jälkikaiunta on
vaimentunut 60 dB
huonetiloissa lyhyt (1–3 s)
käytävissä ja luolissa pitkä (5–10 s)
126. 2.3.5. Nopeutus ja hidastus
engl. time scaling, time strecth
menetelmät samoja kuin keston
säilyttävässä äänenkorkeuden muutoksessa
eri algoritmeja erityyppisille äänille
75–115 %:n keston muutokset melko
häiriöttömiä
suuret muutokset alttiita häiriöille (esim.
kaiku, pätkintä)
138. 2.4.7. Miksaus
miksaus (mixing)
kahden äänilähteen yhdistäminen
ristivaihto (crossfade)
yhden äänilähteen (lineaarinen) vaihto
toiseksi
139. 2.5. Operaatioiden ketjuttaminen
operaatioiden suoritusjärjestys vaikuttaa
lopputulokseen, esim.
kompressointi saattaa nostaa esiin muiden
operaatioiden luomaa kohinaa
kaiunta muuttaa sekä taajuusjakaumaa että dynamiikkaa
yleisohje: kompressointi taajuuskorjaus särö
taajuuskorjaus kuoroefekti kohinaportti
kaiunta
parasta kuitenkin pitää korvat auki ja tehdä
operaatiot siinä järjestyksessä mikä kuulostaa
parhaalta
145. 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ä
154. 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
155. AudioApplet.java 1(6)
base = getCodeBase() + "sounds/";
for (int i = 0; i < sounds.length; i++) {
String fileName = getParameter("SOUND"
+ i);
if (fileName != null) {
AudioLoader audioLoader =
new AudioLoader(fileName, i);
audioLoader.start();
} // if
156. AudioApplet.java 2(6)
for (int i = 0; i < sounds.length; i++) {
Button button =
new Button("Sound " + i);
button.addActionListener(
new ButtonPress(i));
add(button);
} // for
157. AudioApplet.java 3(6)
public void stop() {
for (int i = 0; i < sounds.length; i++)
if (sounds[i] != null)
sounds[i].stop();
} // stop()
158. AudioApplet.java 4(6)
private class AudioLoader
extends Thread {
private String fileName;
private int finger;
public AudioLoader(String n, int f) {
setDaemon(true);
fileName = n;
finger = f;
} // constructor
164. Applet-metodien käyttö
sovelluksissa
staattinen metodi newAudioClip
palauttaa AudioClip-olion
huom. parametriksi annetaan URL-olio
eikä esim. tiedostokahva
vinkki: sovelluksen oletushakemiston
polun saa metodikutsulla
System.getProperty("user.dir")
saatua AudioClip-oliota voidaan käyttää
normaalisti
165. AudioApplication.java 1(3)
public class AudioApplication {
public static void
main(String[] args) {
AudioClip[] sounds =
new AudioClip[args.length];
String base = "file:" +
System.getProperty("user.dir") + "/";
166. AudioApplication.java 2(3)
for (int i = 0; i < args.length; i++) {
try {
sounds[i] = Applet.newAudioClip(
new URL(base + args[i]));
} catch (MalformedURLException e) {
throw new RuntimeException(
"Cannot load audio file "
+ args[i] + ".");
} // try
} // for
168. 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
170. 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
171. Äänidatan käsittelytavat
puskuroitu (buffered)
virta (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)
äänidata sijaitsee (kokonaisuudessaan)
muistissa
monipuolisempi toisto: silmukointi,
aloituspaikan valinta
172. Äänidatan formaatit 1(2)
dataformaatti
kertoo kuinka sarja tavuja eli ”raaka”
samplattu äänidata pitää tulkita
AudioFormat-luokka
tiedostoformaatti
määrittelee äänitiedoston rakenteen
AudioFileFormat-luokka
173. Ää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
174. AudioFormat-luokka
koodaustekniikka (esim. PCM, a-law tai -law)
kanavien määrä (1 = mono, 2 = stereo jne.)
samplaustaajuus
kvantisointitaso (so. käytettyjen bittien määrä)
kehystaajuus (frame rate)
kehys (frame) = kaikki tiettyyn hetkeen
kuuluva data; (esim. kanavien nykyiset
näytearvot)
kehyksen koko tavuina
tavujärjestys: big-endian tai little-endian
181. Mikseri (mixer)
abstrahoi äänilaitetta (audio device), esim.
äänikortti
saa syötteenä yhden tai useamman äänivirran ja
antaa tulokseksi yhden tai useamman äänivirran
esim. miksaa kaksi ääntä (syöte) yhdeksi
ääneksi (tulos)
voi tukea äänten synkronointia
voi edustaa fyysistä laittetta tai sen ominaisuutta
voi edustaa kokonaan ohjelmistolla toteutettua
ominaisuutta
183. Linja (line)
johtaa joko sisään äänijärjestelmään (tai mikseriin)
tai siitä ulos
voi sisältää rinnakkaisia kanavia (mono, stereo)
tila: avoin tai suljettu
tapahtumat
viestien välitys rekisteröityneille kuuntelijoille
voi sisältää säätöjä, esim.
vahvistus, panorointi, kaiunta, toistotaajuus, mykis
tys
mikserit ja portit ovat linjoja periytyminen
187. Datalinja
assosioi linjan tiettyyn ääniformaattiin
puskuroitu: tavuvektori
käynnistys ja pysäytys
nykyinen sijainti (media position)
taso (level): tämänhetkisen signaalin amplitudi
tyhjennys (flush): poistaa prosessoimattoman
datan puskuri
valutus (drain): odottaa kunnes kaikki
prosessoimaton data on saatu käsiteltyä
aktiivisuus: onko linjassa signaalia
189. Kohdedatalinja
linja josta voidaan lukea dataa
mikseri voi toimittaa linjaan dataa esim.
mikrofonista äänitys
huom. linja on kohde (target) mikserin
näkökulmasta
192. Lähdedatalinja
linja johon voidaan kirjoittaa dataa
mikseri voi toimittaa kirjoitetun datan esim.
kaiuttimiin toisto
huom. linja on lähde (source) mikserin
näkökulmasta
194. Pätkä (clip)
linja johon voidaan ladata dataa ennen
toistoa
äänidatan pituus tunnetaan ennen toistoa
aloituspaikka voidaan valita vapaasti
toistoa voidaan silmukoida
197. Mikserin haku
Mixer.Info-olio sisältää mikserin
kuvauksen
pyydetään äänijärjestelmältä lista
mikserikuvauksia getMixerInfometodilla
valitaan listasta sopiva ja pyydetään sitä
getMixer-metodilla
198. Linjan haku
Line.Info-olio sisältää linjan kuvauksen
pyydetään äänijärjestelmältä tai mikserilta
annettua kuvausta vastaava linja getLinemetodilla
käsiteltävä poikkeus
LineUnavailableException
porttia tai datalinjaa pyydetään vastaavalla
tavalla Port.Info- ja
DataLine.Info-olioilla
199. AudioSystemTest.java 1(2)
import javax.sound.sampled.*;
public class AudioSystemTest {
public static void main(String[] args) {
Mixer.Info[] mi = AudioSystem.getMixerInfo();
for (int i = 0; i < mi.length; i++) {
System.out.println(mi[i]);
Mixer m = AudioSystem.getMixer(mi[i]);
207. Linjan kuuntelija
kuuntelija toteuttaa LineListenerrajapinnan
kuuntelija liitetään linjaan
addLineListener-metodilla
rajapinnan update-metodi saa parametrina
LineEvent-olion, jolta voi tiedustella
tapahtuman tyyppiä
LineEvent.Type-tapahtumatyyppejä:
OPEN, CLOSE, START, STOP
208. RandomSequencePlayer.java
1(5)
public class RandomSequencePlayer {
private Random random = new Random();
private Clip[] clips;
public RandomSequencePlayer(File[] files) {
try {
AudioInputStream[] sources =
new AudioInputStream[files.length];
AudioFormat[] formats =
new AudioFormat[files.length];
DataLine.Info[] infos =
new DataLine.Info[files.length];
209. RandomSequencePlayer.java
2(5)
for (int 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 sopivaa linjaa.");
System.exit(1);
} // if
} // for
210. RandomSequencePlayer.java
3(5)
try {
clips = new Clip[sources.length];
for (int i = 0; i < clips.length; i++) {
clips[i] =
(Clip)AudioSystem.getLine(infos[i]);
clips[i].addLineListener(new Changer());
clips[i].open(sources[i]);
}
} catch (LineUnavailableException e) {
System.err.println("Linjaa ei voi käyttää.");
}
211. RandomSequencePlayer.java
4(5)
public void startRandomClip() {
int finger = random.nextInt(clips.length);
clips[finger].setFramePosition(0);
clips[finger].start();
}
public static void main(String[] args) {
File[] files = new File[args.length];
for (int i = 0; i < files.length; i++)
files[i] = new File(args[i]);
RandomSequencePlayer rsp =
new RandomSequencePlayer(files);
rsp.startRandomClip();
}
212. RandomSequencePlayer.java
5(5)
private class Changer implements LineListener {
public void update(LineEvent e) {
if (e.getType().equals(LineEvent.Type.START))
System.out.println("New clip started.");
if (e.getType().equals(LineEvent.Type.STOP))
startRandomClip();
}
}
213. Lähdedatalinjan käyttö
varataan puskuriksi byte-taulukko
puskurin koko
lyhyt: nopeampi vaste, katkosten riski
pitkä: hitaampi vaste, sietää katkoksia
write-metodin kutsu aloittaa toiston (mm.
lähettää kuuntelijalle aloitusviestin)
drain-metodi odottaa, kunnes kaikki kirjoitettu
data on toistettu
flush-metodi poistaa kirjoitetun datan
214. SynthPlayer.java 1(5)
import java.io.*;
import java.util.*;
import javax.sound.sampled.*;
public class SynthPlayer {
public static void main(String[] args) {
float sampleFreq = 44100.0f;
int bitsInQuantization = 8;
int channels = 1;
boolean signed = true;
boolean bigEndian = true;
AudioFormat format = new AudioFormat(
sampleFreq, bitsInQuantization,
channels, signed, bigEndian);
215. SynthPlayer.java 2(5)
DataLine.Info info = new DataLine.Info(
SourceDataLine.class, format);
if (AudioSystem.isLineSupported(info)) {
try {
SourceDataLine line =
(SourceDataLine)AudioSystem.getLine(info);
int bufferSize = 6 * (int)sampleFrequency;
byte[] buffer = new byte[bufferSize];
int twoSecMarker = 2 * (int)sampleFrequency;
int fourSecMarker = 4 * (int)sampleFrequency;
216. SynthPlayer.java 3(5)
Random random = new Random();
for (int i = 0; i < twoSecMarker; i++)
buffer[i] = (byte)random.nextInt();
int waveLength = (int)sampleFrequency / 440;
for (int i = twoSecMarker;
i <= (fourSecMarker - waveLength);
i += waveLength) {
for (int j = i; j < i + waveLength / 2; j++)
buffer[j] = Byte.MAX_VALUE;
for (int j = i + waveLength / 2;
j < i + waveLength; j++)
buffer[j] = Byte.MIN_VALUE;
} // for
217. SynthPlayer.java 4(5)
for (int i = fourSecMarker;
i <= (bufferSize - waveLength);
i += waveLength) {
for (int j = i; j < i + waveLength; j++)
buffer[j] = (byte)(127.0 * Math.sin(
(double)j / waveLength * 2 * Math.PI));
} // for
218. SynthPlayer.java 5(5)
// 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();
219. Kohdedatalinjan käyttö
varataan puskuriksi byte-taulukko
puskurin koon vaikutus kuten
lähdedatalinjassa
read-metodin kutsu lukee puskuriin dataa
ja palauttaa sen määrän tavuina
drain-metodi odottaa, kunnes mikserissä
oleva data tulee luetuksi
flush-metodi poistaa lukemista odottavan
datan (muuten se jää odottamaan mikseriin)
220. Karaoke.java 1(2)
DataLine.Info infoTarget = new
DataLine.Info(TargetDataLine.class, format);
DataLine.Info infoSource = new
DataLine.Info(SourceDataLine.class, format);
if (AudioSystem.isLineSupported(infoTarget)
& AudioSystem.isLineSupported(infoSource) {
try {
TargetDataLine lineTarget = (TargetDataLine)
AudioSystem.getLine(infoTarget);
SourceDataLine lineSource = (SourceDataLine)
AudioSystem.getLine(infoSource);
int bufferSize = (int)(bufferLength *
format.getFrameSize() * format.getFrameRate());
byte[] buffer = new byte[bufferSize];
222. Linjan säätimet (controls)
Control-luokasta periytyy neljä säädintyyppiä:
BooleanControl: katkaisin
esim. mykistys (mute)
FloatControl: säätökytkin
esim. vahvistus, panorointi
EnumControl: valintakytkin
esim. kaiunnan esivalinnat
CompoundControl: säädinkokoelma
esim. taajuuskorjain voi olla kokoelma
FloatControl-tyyppisiä säätökytkimiä
224. Linjan säädinten haku
getControls-metodi palauttaa taulukon
linjan tarjoamista säätimistä
isControlSupported-metodi palauttaa
onko halutun tyyppistä säädintä tarjolla
getControl-metodi palauttaa pyydetyn
tyyppisen säätimen
234. Mitkä olivat tavoitteet?
teoreettinen: ymmärtää äänenkäsittelyyn
liittyviä käsitteitä
mitä voidaan tehdä
käytännöllinen: ymmärtää operaatioiden
vaikutus ääneen
mitä pitää tehdä
235. Tentit
varmista tenttiaika ja -paikka
http://www.it.utu.fi/opiskelu/tentit/
muista ilmoittautua ajoissa!
huomaa myös mahdollisuus sähköiseen
tenttimiseen
https://tenttis.utu.fi