Info Draft Processing suomeksi

Mikrofoni

Mikrofonin sisääntulo

Äänilähteet ovat helppo tapa lisätä interaktiivisuutta näppäimistön ja hiiren lisäksi. Ne tarjoavat käyttäjälle alkuperäisen lähteen, jota voi käyttää interaktiivisuuteen, ja joka tarjoaa erilaisen suhteen tietokoneeseen ja ohjelmaan. Käyttäjä voi olla fyysisemmin mukana ja käyttää ohjelmaasi epätavallisella tavalla. Mikrofonista tuleva ääni voidaan soittaa ja äänenvoimakkuutta ja muita muuttujia voidaan analysoida. 


Processing voi käyttää kirjastoa Minim sound.

Minim

Jossain vaiheessa Processingin jakeluversioon liitettiin Minim-äänikirjasto, joka soittaa ääntä ja kaappaa mikrofonista tulevat äänet. Tämä kirjasto on jo asennettu Processingiisi. Tarkasta sen olemassaolo hakemistosta Sketch menu> Import Library > ... > Minim audio.

 

menu_import_minim

Riippuen alustasta ja ohjelmaversiosta Processing lisää tätä toimintoa varten ohjelman alkuun enemmän tai vähemmän koodirivejä. Tässä tapauksessa tarvitsemme ainakin seuraavan komennon: 

processing_importer

import ddf.minim.*;

Tämä on komento, jolla voit tuoda kaikki Minim-kirjaston ominaisuudet ohjelmaasi. Tämän tuontilauseen ddf.minim.* avulla voimme soittaa ohjelmassamme ääntä. 

Minimin asetukset

Kun laukaisemme ohjelman Run-napilla, äänikirjasto Minim käynnistyy. Tämä esimerkki voi vaatia pääsyä äänikortille käyttöjärjestelmässä, jotta ääniaaltoja voidaan luoda. Tämä merkitsee, että ohjelman lopussa Minim pitää ottaa pois päältä.


Ei haittaa, vaikka et vielä ymmärrä kaikkea sanomaamme. Tämä ei ole liian vakavaa. Tiedä vain, että seuraava koodi tarvitaan jokaisen Minimiä käyttävän ohjelman alkuun: 

import ddf.minim.*;

Minim minim;

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

Huomaa myös, että tämä koodi tarvitaan jokaisen Minimiä käyttävän ohjelman loppuun: 

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

Lisää äänilähde

Lisätäksesi mikrofonin sisääntulon meidän täytyy luoda ääniobjekti, joka pääsee mikrofonin tuottamaan ääneen. 

import ddf.minim.*;

Minim minim;
AudioInput in;

void setup() {
  minim = new Minim(this);
  in = minim.getLineIn(Minim.STEREO, 512);
}

Sen täytyy myös lopettaa äänen kaappaus ja Minim-kirjasto ohjelman lopussa. Me käytämme metodia stop ().

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

Katso ääntä

Aiomme muuttaa ohjelmamme taustaväriä. Kun ääni on voimakkaampi, taustaväri (background) muuttuu valkoisemmaksi. Käytämme äänen sisääntuloa (in). Sillä on kolme aliobjektia: left, right ja mix. Stereomikrofonin tapauksessa ne merkitsevät vasenta kanavaa, oikeaa kanavaa ja niiden välimuotoa. Näillä kanavilla voimme käyttää metodia level(), joka palauttaa äänen.

 void draw() {
  background(in.mix.level()*2550);
}

Kuvakaappaus ohjelmasta keskimääräisellä äänenvoimakkuudella: 

sourcesnor

Pieni peli

Meidän pitää nyt näyttää, kuinka voimme luoda hyvin yksinkertaisen pelin, jossa ohjaukseen käytetään mikrofonia. Peli koostuu pallosta, joka on ruudun oikealla puolella. Se menee hitaasti mutta varmasti vasemmalle. Pelaajan ääni painaa palloa takaisin oikealle. Tavoitteena on päästä ääriviivan yli.

Aluksi muutamme ruudun kokoa, laitamme smoothin päälle, ja määrittelemme ääriviivat valkoisiksi. 

void setup() {
  size(600, 100);
  smooth();
  stroke(255);

  minim = new Minim(this);
  in    = minim.getLineIn(Minim.STEREO, 512);
}

Voimme luoda muuttujan, joka tallentaa pallon sijainnin. Se julistetaan ohjelman alussa, jolloin se on saatavilla kaikkialla. Laitamme sille arvon 0. 

float ballX = 0;

void setup() {
...

Metodissa draw() määrittelemme mustan taustan ja piirrämme pallon, joka reagoi ääneen. Jokaisessa draw() -metodin kutsussa lisäämme mikrofonin äänitason pallon x-koordinaattiin. Se alkaa liikkua vähitellen, kun teemme ääntä. 

void draw() {
  background(0);

  ballX = ballX + in.mix.level()*20;

  ellipse(25 + ballX, height - 25, 50, 50);
}

soundGame

Estääksesi palloa lähtemästä ruudulta lisäämme kaksi ehtoa, jotka korjaavat tilanteen, jos muuttuja ballX on pienempi kuin 0 tai suurempi kuin ruudun leveys. 

 void draw() {
  background(0);

  ballX = ballX + in.mix.level()*20;

  if (ballX < 0) {
    ballX = 0;
  }

  if (ballX > width-25) {
    ballX = width-25;
  }

  ellipse(25+ballX, height-25, 50, 50);
}

 

Lisäämme ehdon, jonka mukaan pallon väri muuttuu, jos se menee rajan yli. 

void draw() {
  background(0);

  ballX = ballX + in.mix.level()*20;

  if (ballX < 0) {
    ballX = 0;
  }

  if (ballX > width-25) {
    ballX = width-25;
  }

  if (ballX > 500) {
    fill(255, 0, 0);
  } else {
    fill(255);
  }

  line(500, 0, 500, 100);
  ellipse(25+ballX, height-25, 50, 50);
}
 

Jotta pelistä tehtäisiin monimutkaisempi, teemme ehdon, jolla pallo menee takaisin pysyvästi. Jokaisella komennon draw() kutsulla pienennämme hievan sen sijaintia x-akselilla. 

void draw() {
  background(0);

  ballX = ballX - 0.5;   ballX = ballX + in.mix.level()*20;

  if (ballX < 0) {
    ballX = 0;
  }

  if (ballX > width - 25) {
    ballX = width - 25;
  }

  if (ballX > 500) {
    fill(255, 0, 0);
  } else {
    fill(255);
  }

  line(500, 0, 500, 100);
  ellipse(25 + ballX, height - 25, 50, 50);
}

Nyt voit kuvitella muita tapoja käyttää ääntä projekteissasi. Voit analysoida äänen taajuutta, tehdä synteesin, luoda ääniefektejä mittausta varten, ja monta muuta asiaa.