Ääni vuorovaikutuskeinona
Viime vuosina äänentunnistusteknologia on kehittynyt huimasti koneoppimis- ja tekoälyteknologian myötä. Mobiililaitteiden suorituskyvyn kasvaessa äänentunnistus on tulllut kiinteäksi osaksi mobiilisovelluksia. Esimerkiksi Android ja iOS-käyttöjärjestelmiin on integroitu äänentunnistus osaksi käyttöliittymää.
Ääni-teksti muunnoksen lisäksi, ääni voi olla mielenkiintoinen tapa ohjata esimerkiksi peliä tai taideinstallaatiota. Esimerkiksi muutaman vuoden takaiseen Flappy Bird -peliin tulee aivan uusi ulottuvuus, jos linnun lentorataa ohjaa vaikkapa huutamalla lujempaa ja hiljempaa.
Tässä kappaleessa käydään läpi, miten lisäät ohjelmaasi ulkopuolisen kirjaston ja miten pääset käsiksi tietokoneen mikrofonin tarjoamaan dataan.
Ulkopuolinen kirjasto
Kun kirjoitat Processing-ohjelmaasi vaikkapa komennon
ellipse(0,0,50,50)
, Processing kutsuu ellipse-metodia alla olevasta
Processing core -kirjastosta (voit vilkaista Processing lähdekoodia
täältä). Olet koko kurssin
ajan käyttänyt apunasi Processing core -kirjastoa. Processingin core
-kirjastossa on vain rajattu määrä toiminnallisuuksia, joten usein
tiettyä toiminnallisuutta varten tulee asentaa ulkopuolinen kirjasto.
Onneksi Processing IDE:ssä on kätevä toiminto tähän tarkoitukseen. Saat
valikon auki kohdasta Sketch > Import Library... > Add Library...
Etsi kirjastoa hakusanalla sound ja asenna Sound-niminen kirjasto. Kirjasto asennetaan klikkaamalla Install-painiketta.
Kirjaston dokumentaatio löytyy täältä: https://processing.org/reference/libraries/sound/. Kirjaston avulla voit soittaa, analysoida sekä syntetisoida ääntä. Seuraavan sivun esimerkissä sound-kirjastoa käytetään äänen analysointiin ja rudulle piirrettävien elementtien ohjaamiseen.
Sound-kirjaston käyttö
Sound-kirjastolla voit toistaa, analysoida ja syntetisoida ääntä. Seuraavassa esimerkissä käytät sound-kirjastoa tietokoneen mikrofonin vastaanottaman äänen analysoimiseen. Esimerkissä ohjataan ruudulle piirrettävieä elementtejä analysoidun äänen perusteella.
Jotta pääset käsiksi sound-kirjaston toiminnallisuuksiin, kirjasto tulee lisätä ohjelmaan import-komennolla:
import processing.sound.*;
Yllä olevan komennon merkki "*" lisää kaikki processing.sound paketissa olevat luokat ohjelmaan. Luokkiin ja luokista luotaviin olioihin tutustutaan luvussa 5, mutta nyt voit luottaa siihen, että kaikki sound-kirjaston referenssissä esitellyt toiminnallisuudet ovat käytössäsi.
Seuraavaksi pitäisi päästä käsiksi tietokoneen mikrofoniin. Referenssistä löytyy luokka AudioIn. Dokumentaation referenssistä löytyy avuksi esimerkki.
import processing.sound.*;
AudioIn in;
void setup() {
size(640, 360);
background(255);
// Create the Input stream
in = new AudioIn(this, 0);
in.start(); // Start the audio stream
}
void draw() {
}
Koodinpätkä luo AudioIn-tyyppisen muuttujan in
, jonka arvoksi
asetetaan setup-metodissa new AudioIn(this, 0)
. new AudioIn(this, 0)
luo uuden AudioIn-olion (olioista lisää kappaleessa 5), joka kuuntelee
äänilähdettä 0. Jos sinulla on käytössäsi useita sisääntulokanavia
äänelle, voit valita lähteen muuttamalla parametria. Nyt sinulla on
käytössäsi muuttuja in
, jolle voit kutsua referenssistä löytyviä
parametreja start()
, play()
, set()
, amp()
, add()
, pan()
ja stop()
.
Seuraavaksi tarvitset keinon analysoida siisään tulevan äänen voimakkuutta eli amplitudia. Referenssistä löytyy analysis-otsikon alta luokka Amplitude. Referenssin esimerkkien avulla voit muokata ohjelmaa seuraavasti:
import processing.sound.*;
AudioIn in;
Amplitude amp;
void setup() {
size(640, 360);
background(255);
// Create an Input stream which is routed into the Amplitude analyzer
in = new AudioIn(this, 0);
amp = new Amplitude(this);
in.start(); // Start the audio stream
amp.input(in); // Start analysing audio stream
}
void draw() {
println(amp.analyze());
}
Lisäsit ohjelman alkuun globaalin Amplitude-tyyppisen muuttujan amp,
jonka arvoksi asetetaan setup-metodissa uusi Amplitude-olio.
Amp-muuttujalle asetetaan setup-metodissa analysoitava äänilähde
input-metodin avulla (amp.input(in)
) ja äänenvoimakkuus tulostetaan
konsoliin draw-metodissa analyze-metodin avulla. amp.analyze() palauttaa
arvon välillä 0-1. Piirrä seuraavaksi draw-metodissa ympyrä, jonka
y-koordinaatti määräytyy äänenvoimakkuuden perusteella:
import processing.sound.*;
AudioIn in;
Amplitude amp;
void setup() {
size(640, 360);
// Create an Input stream which is routed into the Amplitude analyzer
in = new AudioIn(this, 0);
amp = new Amplitude(this);
in.start(); // Start the audio stream
amp.input(in); // Start analysing audio stream
}
void draw() {
background(255);
float posY = height - amp.analyze() * height;
ellipse(width/2, posY, 40, 40);
}
Loistavaa! Jos haluat kehittää ohjelmaa edelleen voit esimerkiksi tutkia Processingin esimerkeistä löytyvää BouncingBall-esimerkkiä ja muokata velocity-muuttujan arvon määrittymään äänenvoimakkuuden perusteella.