• Ei tuloksia

Digitaalisen äänenkäsittelyn perusteet 8.12.2006

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Digitaalisen äänenkäsittelyn perusteet 8.12.2006"

Copied!
4
0
0

Kokoteksti

(1)

Digitaalisen äänenkäsittelyn perusteet 8.12.2006

(c) 2002-2006 Jouni Smed 1

Kohdedatalinjan käyttö

„

„

varataan puskuriksi varataan puskuriksi byte byte- -taulukko taulukko

„

„

puskurin koon vaikutus kuten puskurin koon vaikutus kuten lähdedatalinjassa

lähdedatalinjassa

„„

read read- -metodin kutsu lukee puskuriin dataa metodin kutsu lukee puskuriin dataa ja palauttaa sen määrän tavuina

ja palauttaa sen määrän tavuina

„

„

drain drain- -metodi odottaa, kunnes mikserissä metodi odottaa, kunnes mikserissä oleva data tulee luetuksi

oleva data tulee luetuksi

„„

flush flush- -metodi poistaa lukemista odottavan metodi poistaa lukemista odottavan datan (muuten se jää odottamaan mikseriin) datan (muuten se jää odottamaan mikseriin)

Karaoke.java 1(2)

DDataLineataLine..InfoInfo infoTarget = infoTarget = newnew DataLine

DataLine..InfoInfo((TargetDataLineTargetDataLine.class, format);.class, format);

DataLine

DataLine..InfoInfo infoSource = infoSource = newnew DataLine

DataLine..InfoInfo((SourceDataLineSourceDataLine.class, format);.class, format);

if

if ((AudioSystemAudioSystem.isLineSupported(infoTarget) .isLineSupported(infoTarget)

&

& AudioSystemAudioSystem.isLineSupported(infoSource) .isLineSupported(infoSource) {{ trytry{ {

TargetDataLine

TargetDataLinelineTarget = (TargetDataLinelineTarget = (TargetDataLine)) AudioSystem

AudioSystem.getLine(infoTarget);.getLine(infoTarget);

SourceDataLine

SourceDataLinelineSource = (SourceDataLinelineSource = (SourceDataLine)) AudioSystem

AudioSystem.getLine(infoSource);.getLine(infoSource);

int int bufferSize = (bufferSize = (intint)(bufferLength)(bufferLength**

format.getFrameSize() * format.getFrameRate());

format.getFrameSize() * format.getFrameRate());

byte

byte[] buffer = [] buffer = newnewbytebyte[bufferSize];[bufferSize];

Karaoke.java 2(2)

lineTarget.open(format, bufferSize);

lineTarget.open(format, bufferSize);

lineSource.open(format);

lineSource.open(format);

lineTarget.start();

lineTarget.start();

lineSource.start();

lineSource.start();

while while(true(true) {) {

int dataSize = int dataSize =

lineTarget.read(buffer, 0, bufferSize);

lineTarget.read(buffer, 0, bufferSize);

// T

// Täässssääkohtaa puskurissa olevalle kohtaa puskurissa olevalle äääänellenelle // voisi

// voisi tehdtehdääjotain jäjotain jäynynääää...

lineSource.write(buffer, 0, dataSize);

lineSource.write(buffer, 0, dataSize);

} }

Linjan säätimet (controls)

„„

Control- Control -luokasta periytyy neljä säädintyyppiä: luokasta periytyy neljä säädintyyppiä:

‹

‹

BooleanControl: katkaisin BooleanControl : katkaisin





esim. mykistys ( esim. mykistys (mute mute) )

‹

‹

FloatControl: säätökytkin FloatControl : säätökytkin



esim. vahvistus, panorointi esim. vahvistus, panorointi

‹‹

EnumControl: valintakytkin EnumControl : valintakytkin





esim. kaiunnan esivalinnat esim. kaiunnan esivalinnat

‹

‹

CompoundControl: säädinkokoelma CompoundControl : säädinkokoelma





esim. taajuuskorjain voi olla kokoelma esim. taajuuskorjain voi olla kokoelma FloatControl

FloatControl- -tyyppisiä säätökytkimiä tyyppisiä säätökytkimiä

Säädinten luokkahierarkia

Control Control

BooleanControl

BooleanControl FloatControlFloatControl EnumControlEnumControl CompoundControlCompoundControl

Linjan säädinten haku

„

„

getControls- getControls -metodi palauttaa taulukon metodi palauttaa taulukon linjan tarjoamista säätimistä

linjan tarjoamista säätimistä

„

„

isControlSupported- isControlSupported -metodi palauttaa metodi palauttaa onko halutun tyyppistä säädintä tarjolla onko halutun tyyppistä säädintä tarjolla

„

„

getControl- getControl -metodi palauttaa pyydetyn metodi palauttaa pyydetyn tyyppisen säätimen

tyyppisen säätimen

(2)

Digitaalisen äänenkäsittelyn perusteet 8.12.2006

(c) 2002-2006 Jouni Smed 2

Säädintyyppejä

„

„

BooleanControl BooleanControl. .Type Type.MUTE .MUTE

„

„

EnumControl EnumControl. .Type Type.REVERB .REVERB

„„

FloatControl FloatControl. .Type Type.MASTER_GAIN .MASTER_GAIN

„„

FloatControl FloatControl. .Type Type.PAN .PAN

„

„

FloatControl FloatControl. .Type Type.SAMPLE_RATE .SAMPLE_RATE

FloatControl-luokan metodeja

„

„

float float getValue() getValue()

„„

void void setValue(float setValue( float newValue) newValue)

„„

float float getMaximum() getMaximum()

„„

float float getMinimum() getMinimum()

„

„

float float getPrecision() getPrecision()

„

„

String String getMaxLabel() getMaxLabel()

„

„

String String getMidLabel() getMidLabel()

„

„

String String getMinLabel() getMinLabel()

„

„

String String getUnits() getUnits()

ControlPlayer.java 1(3)

boolean

boolean gain = gain = falsefalse, , pan = pan = falsefalse,, rate =

rate = falsefalse, , mute = mute = falsefalse;; if

if (args.length >= 1) {(args.length >= 1) {

gain = args[1].equals("gain");

gain = args[1].equals("gain");

pan = args[1].equals("pan");

pan = args[1].equals("pan");

rate = args[1].equals("rate");

rate = args[1].equals("rate");

mute = args[1].equals("mute");

mute = args[1].equals("mute");

} } float

float parameter = 0.0f;parameter = 0.0f;

if

if (args.length == 3)(args.length == 3){{ try

try{{ parameter =

parameter = FloatFloat.parseFloat(args[2]);.parseFloat(args[2]);

} catch} catch ((NumberFormatExceptionNumberFormatExceptione) { ... }e) { ... } }

}

ControlPlayer.java 2(3)

clip.open(source);

clip.open(source);

clip.start();

clip.start();

if if (gain && (gain && clip.isControlSupported( clip.isControlSupported(

FloatControl

FloatControl. .Type Type.MASTER_GAIN)) .MASTER_GAIN)) { { FloatControl

FloatControl gainCtrl = gainCtrl =

(FloatControl ( FloatControl)clip.getControl( )clip.getControl(

FloatControl

FloatControl. .Type Type.MASTER_GAIN); .MASTER_GAIN);

gainCtrl.setValue(parameter);

gainCtrl.setValue(parameter);

} }

ControlPlayer.java 3(3)

if

if (mute &&(mute && clip.isControlSupported(clip.isControlSupported(

BooleanControl

BooleanControl..TypeType.MUTE)) {.MUTE)) { BooleanControl

BooleanControlmuteCtrl =muteCtrl = (

(BooleanControlBooleanControl)clip.getControl()clip.getControl(

BooleanControl

BooleanControl..TypeType.MUTE);.MUTE);

muteCtrl.setValue(

muteCtrl.setValue(truetrue););

} }// if// if Control

Control[] ctrl = clip.getControls();[] ctrl = clip.getControls();

for

for ((int int i = 0; i < ctrl.length; i++)i = 0; i < ctrl.length; i++) System

System.out.println(ctrl[i]);.out.println(ctrl[i]);

Ääniominaisuuksien käyttöoikeudet

„

„

määritelty AudioPermission määritelty AudioPermission- -luokassa: luokassa:

‹

‹

toisto toisto

‹‹

äänitys äänitys

„

„

appletti: saa toistaa muttei äänittää appletti: saa toistaa muttei äänittää

„

„

sovellus: saa toistaa ja äänittää sovellus: saa toistaa ja äänittää

„„

ohjelmien oikeuksia voidaan muuttaa Policy ohjelmien oikeuksia voidaan muuttaa Policy Tool

Tool - -ohjelmalla ohjelmalla

(3)

Digitaalisen äänenkäsittelyn perusteet 8.12.2006

(c) 2002-2006 Jouni Smed 3

Mitä käsiteltiin? 1(3)

1.1.

Perusteita Perusteita

1.1.

Äänen fysiikkaa Äänen fysiikkaa

2.

2.

Psykoakustiikka Psykoakustiikka

3.

3.

Äänen syntetisointi Äänen syntetisointi

4.

4.

Samplaus ja kvantisointi Samplaus ja kvantisointi

5.5.

Tiedostoformaatit Tiedostoformaatit

Mitä käsiteltiin? 2(3)

2.2.

Äänenkäsittelyoperaatiot Äänenkäsittelyoperaatiot

1.1.

Voimakkuus Voimakkuus

2.

2.

Taajuus Taajuus

3.

3.

Aika Aika

4.

4.

Aaltomuoto Aaltomuoto

5.5.

Operaatioiden ketjuttaminen Operaatioiden ketjuttaminen

Mitä käsiteltiin? 3(3)

3.3.

Javan ääniohjelmointi Javan ääniohjelmointi

1.

1.

java.applet java.applet

2.2.

javax.sound.sampled javax.sound.sampled

Mitkä olivat tavoitteet?

„

„

teoreettinen: ymmärtää äänenkäsittelyyn teoreettinen: ymmärtää äänenkäsittelyyn liittyviä käsitteitä

liittyviä käsitteitä

→ mitä mitä voidaan voidaan tehdä tehdä

„

„

käytännöllinen: ymmärtää operaatioiden käytännöllinen: ymmärtää operaatioiden vaikutus ääneen

vaikutus ääneen

→ mitä mitä pitää pitää tehdä tehdä

Kurssin hyväksytty suoritus =

1. 1. Ilmoittautuminen 13.11 menness Ilmoittautuminen 13.11 mennessä ä

2.

2. Hyv Hyvä äksytty harjoitusty ksytty harjoitustyö ö

‹‹

työ palautettava 31.12.2006 mennessä työ palautettava 31.12.2006 mennessä 3.

3. Hyv Hyvä äksytty tentti ksytty tentti

Tentit

„

„

tenttipäivät tenttipäivät

1.1.

15.12.2006, sali 15.12.2006, sali β β, , klo 10:00 klo 10:00– –12:00 12:00 (luentotentti)

(luentotentti)

2.2.

15.1.2007 15.1.2007

3.3.

12.2.2007 12.2.2007

„

„

varmista tenttiaika ja - varmista tenttiaika ja -paikka paikka http://www.it.utu.fi/opetus/tentit/

http://www.it.utu.fi/opetus/tentit/

„

„

muista ilmoittautua ajoissa! muista ilmoittautua ajoissa!

(4)

Digitaalisen äänenkäsittelyn perusteet 8.12.2006

(c) 2002-2006 Jouni Smed 4

Tie tästä eteenpäin

DÄPDÄP

MIDI MIDI

sekvensserit sekvensserit moniraitaohjelmat moniraitaohjelmat äänittäminen

äänittäminen

säveltäminen säveltäminen signaaliprosessointi

signaaliprosessointi FFT FFT tiivistäminen

tiivistäminen

tiedostoformaatit tiedostoformaatit MPEG MPEG

akustiikka akustiikka

kompleksiluvut kompleksiluvut äänentoisto

äänentoisto AD

AD--muunnosmuunnos DA DA--muunnosmuunnos

olet tässä olet tässä

Viittaukset

LIITTYVÄT TIEDOSTOT

Ratkaisun kehittäminen Tehtyjen valintojen perusteella ja etenemis- suunnitelman mukaisesti edetään ratkaisun luomiseen.

Ekodesign-sprintin myötä pyritään alustavaan suunnitteluun esimerkkikohteen uusiutuvan energian pientuotannon lisäämiseksi?. Ratkaisun kehittämisessä tulisi huomioida

Aiheen hahmottaminen Ideoiden luonnostelu Valintojen tekeminen Ratkaisun kehittäminen Testaus. Done Done Done

Siksi siihen tulisi kiinnittää kriittistä huomiota siitä huolimatta, että itsen kehittämisen tai toteuttamisen diskurssista on työelämässä tullut, kuten Julkunen (2008, 126)

Luulisin, että Mägisten muistiinmerkinnässä voi olla muutama virhe, esim.. diftongit ovat voineet olla

Eläin- oikeudet ovat toistaiseksi niin ei-käytännöllinen argumentaatioperusta, että sitä on vaikea käyttää poliittisena tai lainsäädännöllisenä välineenä?.

[r]

‹ vastaanottamisen (esim. äänitys) vastaanottamisen (esim. vahvistus tai kaiunta) käsittelyn