Info Draft Processing suomeksi

Äänet

Äänentoisto

Lähtökohtaisesti Processing on kuvan luomiseen tarkoitettu ympäristö. Sitä ei suunniteltu soittamaan ääntä ja vielä vähemmän kehittämään ääniaaltoja. Tätä varten on esimerkiksi Pure Data. Monet ulkoiset kirjastot on luotu juurikin laajentamaan äänenkäsittelymahdollisuuksia, ja voit liittää milloin tahansa nämä ulkoiset kirjastot ohjelmiisi: syntetisaattoreita, samplereita, audioliittymiä, MIDI-sekvenssereitä jne. Mutta tämä ei kuitenkaan ole Processingin perustarkoitus, joka on erilaisten visuaalisten muotojen luominen.

Kuitenkin ääni on olennainen osa interaktiivisuutta, ja on vaikea kuvitella tehokasta interaktiivisuustyökalua ilman ääntä.

Minim

Processingin jakeluversioon päätettiin liittää Minim -äänikirjasto, joka soittaa ääntä ja osaa tallentaa mikrofonista tulevan äänen. Tämä kirjasto on jo asennettu koneellesi. Tarkastaaksesi sen asennuksen ja liittääksesi sen ohjelmaasi mene hakemistoon Sketch > Import Library ... > Minim audio.

menu_import_minim

Riippuen alustasta ja versiosta, Processing lisää tähän toimintoon enemmän tai vähemmän koodirivejä ohjelmasi alkuun. Tässä tapauksessa tarvitaan ainakin seuraava komento: 

processing_importer

import ddf.minim.*;

Tämä komento tuo kaikki Minim-kirjaston toiminnot ohjelmamme käytettäväksi. Tämän ddf.minim.* -kirjaston avulla soitamme äänetä ohjelmassamme. 

Minim-asetukset

Kun ajamme ohjelmamme Run-napin avulla, meidän täytyy aktivoida äänikone Minim. Tämän esimerkin pitäisi pyytää pääsyä äänikorttiin käyttöjärjestelmän kautta, jotta ohjelma voi soittaa ääniä. Tämä merkitsee, että ohjelman lopussa voimme myös sulkea Minim-kirjaston.

Ei haittaa, vaikka et vielä ymmärtäisi kaikkea sanomaamme. Olennaista on se, että jokaisen Minimiä käyttävän ohjelman alussa tulee olla seuraava koodi:

import ddf.minim.*;

Minim minim;

void setup() {
  minim = new Minim(this);
}

Ohjelman loppuun tulee myös kirjoittaa muutama rivi:

void stop() {
  minim.stop();
  super.stop();
}

Mikä sana "this" on ohjelmassamme? Sana "this" tarkoittaa tätä ohjelmaa. Minimin täytyy tietää tämän ohjelman osoite, jotta se voi kommunikoida ohjelman ja äänikortin kanssa. Tätä ei tarvitse ymmärtää vielä. Nämä ovat vain taikasanoja, jotka täytyy sanoa jokaisen ääntä käyttävän ohjelman alussa ja lopussa. 

Äänen tuominen

Tuomme kuvan ohjelmaamme aivan kuin kuvan tai kirjasintyypin. Kannattaa tallentaa ohjelma ennen tätä askelta.


Ääni voi tulla monesta eri lähteestä: ne voidaan ladata netistä, tehdä Audacityllä, ja on jopa ääniä, jotka voivat olla osa käyttöjärjestelmääsi.

Etsi nyt äänitiedosto ja vedä se suoraan Processing-ikkunaan: 

Tämä toiminto laittaa äänitiedoston hakemistoon "data" ohjelmassasi. Jos tahdot nähdä tämän tiedoston, paina ctrl-k (Windows / Linux) tai cmd-k (Mac), muuten voit valita valikosta Sketch > Show Sketch Folder.

Äänitiedostot

Voit käyttää kolmea ääniformaattia Minimin kanssa: WAV, AIFF ja MP3. Kaksi ensimmäistä formaattia voidaan viedä oletusarvoisesti ilmaisella ohjelmalla, kuten Audacityllä. Kolmas formaatti vaatii lisäosan Audacityssä, mutta se on melko helppo asentaa. 


Kuten kuvien tapauksessa, eri formaateilla on etunsa ja haittansa.

  1. WAV ja AIFF -tiedostot ovat melkein identtisiä ja molemmat formaatit ovat pakkaamattomia. Niitä Minim voi lukea ilman suurempia hankaluuksia, koska niitä ei tarvitse purkaa. Niitä käytetään usein lyhyisiin ääniin, kuten ääniefekteihin. Molemmat formaatit ovat paljon isompia kuin vastaavan pituiset MP3-tiedostot.
  2. MP3-formaatti on pakattu formaatti. Se on usein paljon lyhempi kuin WAV ja AIFF. MP3-toisto vaatii enemmän tietokojenkäsittelytehoja koneelta, koska tiedosto täytyy purkaa, kun se soitetaan.

 

Kello

Tässä on yksinkertainen ohjelma, joka näyttää ellipsin tietokoneesi kellon sekunneilla. Käytämme tätä ohjelmaa pohjana luodaksemme kelloäänen, joka soi joka minuutti. Koska minuutin odottelu on pitkä aika, esitämme sekuntien kulumisen ellipsillä, joka kasvaa kuvan keskellä. 

 

sketch_son_seconds

void draw() {
  background(255);
  ellipse(50,50,second(),second());
}

Tehdäksemme kellomme käytämme yksinkertaisesti järjestelmän kellon sekunteja asettaaksemme ellipsin parametrit (korkeus, leveys). Jos sekuntiarvo on 42, meillä on 42 x 42 kokoinen ellipsi. Jos sekunnit ovat 2, meidän ellipsimme on 2 x 2 pikseliä.

Voisimme lisätä uuden ehdon, jolla osoitamme minuuttien muutoksen aina kun sekunnit ovat nollassa. Tällöin ruutu on punainen.

void draw() {

  if (second() == 0) {
    background(255,0,0);
  } else {
 background(255); }

  ellipse(50,50,second(),second());
}

Ehto if (second () == 0) {} vertailee jälkimmäistä arvoon 0. Jos molemmat vastaavat toisiaan, tausta on punainen, muuten tausta on valkoinen. 

Kellon ääni

Meillä on nyt ohjelmassa ääni, joka toistetaan aina kellon sekuntien ollessa kohdassa 0.

Aloittaaksemme piirrämme kellon draw () -metodissa. Kaikki ääneen tarvittavat metodit ovat tässä osassa.

import ddf.minim.*;

Minim minim;
AudioSnippet ping;

void setup() {
  minim = new Minim(this);
  ping = minim.loadSnippet("ping.wav");
}

void draw() {

  if (second() == 0) {

    if (ping.isPlaying() == false){
      ping.play();
    }

    background(255,0,0);

  } else {
    background(255);
  }

  ellipse(50,50,second(),second());
}

void stop() {
  ping.close();
  minim.stop();
  super.stop();
}

 

Tämä ohjelma vaatii monta askelta toimiakseen:

  1.    Tuodaan Minim ohjelmaan.
  2.    Luodaan kaksi muuttujaa, joista toinen sisältää Minim-koneen ja toinen äänidataa.
  3.    Käynnistetään kone Minimin alettua.
  4.    Kopioidaan data muuttujaan äänitiedostosta.
  5.    Ehdollisesti soitetaan ääni ja näytetään punainen ruutu, kun sekunnit ovat nollassa (tarkastetaan ettei ääni ole jo soimassa).
  6.    Piirretään ellipsi kellon sekuntien pohjalta.
  7.    Lopetetaan ääni ohjelman lopussa.
  8.    Lopetataan Minim ohjelman lopussa.


Olemme jo selittäneet Minim-koneen käynnistämisen ja lopettamisen. Tässä tulee kiinnittää huomio ohjelman osiin 2, 4 ja 5, jotka kuvaavat tuonnin ja toiston.

Ensin luomme muuttujan tyyppiä AudioSnippet. AudioSnippet -tyyppi on muuttuja, joka on määritelty Minimin koodissa. Muistutamme, että jokaisen muuttujan tapauksessa kaava on tyyppiä (tyyppi)(muuttujan nimi) = (muuttujan arvot). Jos on esimerkiksi mahdollista tuoda Processingiin söpö pieni lintu, riittää kirjoittaa PikkuLintu loadLintu = ("lintu.bird"). Kirjoitamme ensin olion tyypin, sen nimen, ja lopulta sen arvon. Tässä arvo annetaan funktiolle loadSnippet(), joka hakee wave-äänitiedoston arvot ja tuo ne muuttujaan nimeltä "ping".

Lisätietoa muuttujista ja erilaisista muuttujatyypeistä saat aiheelle omistetusta luvusta.

Kun muuttujaan on ladattu ääni, voit vain toistaa sen. AudioSnippetin soittamiseksi kutsutaan komentoa play().  Tässä voidaan myös kysyä onko ääni jo toistettavana, jolloin komento isplaying kertoo meille toistuuko ääni jo (true) vai eikö toistu (false). Jos tämä komento unohdetaan, komento laukaistaan monta kertaa metodin second() ollessa nollassa. 

AudioSnippet, AudioSample, AudioPlayer

Minimin dokumentaation mukaan Processingissa on monta tapaa soittaa ääniä. Periaatteessa valintasi perustuu äänen rooliin ohjelmassasi. Minimin dokumentaation mukaan AudioSnippetiä käytetään lyhyen äänen soittoon, AudioSamplea nopeaan toistuvan äänen lukemiseen, esimerkiksi rumpukoneen äänen, ja AudioPlayer on käytössä pidempien äänien (usein MP3) tapauksessa. Nämä pidemmät äänet toistetaan suoraan kovalevyltä, jotta vältetään ohjelman sisäisen muistin käyttöä. Tässä on esimerkki, joka käyttää kaikkia kolmea toistotapaa. 

 

import ddf.minim.*;

Minim minim;
AudioSample ping;
AudioSnippet pop;
AudioPlayer song;

void setup() {
  minim = new Minim(this);
  ping = minim.loadSample("ping.aiff");
  pop = minim.loadSnippet("pop.aiff");
  song = minim.loadFile("song.mp3");
}

void draw() {

}

void keyPressed() {
  if (key == 'a') ping.trigger();
  if (key == 'b') {
    pop.rewind();
    pop.play();
  }
  if (key == 'c') song.play();
}

void stop() {
  ping.close();
  pop.close();
  song.close();
  minim.stop();
  super.stop();
}

Huomaa, että AudioPlayer ja AudioSample käyttävät molemmat play()-metodia, koska niiden lukema on aina ainutlaatuinen (yksi ääni kerrallaan). AudioSample vaatii monen samanaikaisen äänen lukemista ja käyttää komentoa trigger äänen laukaisemiseen. Englanniksi sana "trigger" tarkoittaa liipaisinta. 

Dokumentaatio

Minimistä löytyy lisää tietoa sivulta http://code.compartmental.net/tools/Min/ ja vaikeampaa teknistä dokumentaatiota sivulta http://code.compartmental.net/minim/javadoc/ddf/minim/package-tree.html.