Arxiu de la categoria: GNU/Linux

50 ways… #5. Com fer un soundfont per a acordió

La meva filla està aprenent a tocar l’acordió diatònic. Es tracta d’un acordió de botons de la marca Castagnari model Studio, amb dues files de botons a la mà dreta (afinades en Sol i Do), i els 8 botons de la mà esquerra són els baixos, dividits en 4 baixos i 4 acords. Aquest és el tipus d’acordions que sonaven en les festes majors dels petits pobles del Pirineu. Quan encara no hi havia carreteres per arribar a aquests pobles, en el segle XIX i fins entrat el segle XX, els músics havien de pujar als pobles a peu o a mula. Per tant era necessari instruments transportables. Moltes vegades un acordió i un violí animaven el ball de la plaça del poble.

En aquesta ocasió, ja que disposo d’un instrument nou per mi, vull fer la pràctica de crear un soundfont des del principi, i d’aquesta manera podré utilitzar el so d’aquest instrument en diferents projectes. Evidentment, s’ha de començar mostrejant totes les notes. Per fer-ho s’utiltizarà un micròfon d’una qualitat òptima, intentant que no hi hagi sorolls de fons. Es gravarà a un volum adequat, notes llargues, i sense produir saturació, en un sol canal. Les mostres es van gravant de forma ordenada i utiltizant el nom del fitxer adequat de manera que no hi hagi confusió. Per gravar les mostres he utilitzat un Ubuntu 12.04 32 bits, interfície Edirol UA-25EX i un microfon Beyerdynamic TG I52d. S’ha utiltizat la següent comanda:

arecord -r 44100 -f cd -t wav -D plughw:UA25EX accordion_C4.wav

A l’hora de fer la gravació tindrem molt de compte amb els baixos i els acords, que són botons especials. Un cop tenim totes les mostres, amb el Audacity editem els fitxers d’ona. Agafem una part significativa de la mostra samplejada, intentant que l’envolvent sigui periòdica, i evidentment que no agafi els extrems del fitxer d’ona. Ens assegurem de què la mostra no té saturació, i amplifiquem la mostra a un nivell raonable, de manera que totes les mostres tinguin un volum similar. El resultat de les mostres és el següent:

Samples Accordion Castagnari Studio by joanillo

Samples Accordion Castagnari Studio (Bass and chords) by joanillo

Aleshores ja podem començar a utiltizar el Polyphone, que serà l’entorn gràfic que s’utilitzarà per construir el soundfont. El primer que farem és importar totes les mostres, i diem quina és la nota arrel de cada nota, de manera que ja li estem assignant una freqüència. Aleshores creem un instrument nou (per ex Accordion), que serà l’únic instrument que contindrà aquest soundfont. Ara és quan hem d’associar cada mostra a una nota midi de l’instrument que estem editant. Per exemple, per a la mostra accordion_C4.wav ficarem:

    \t

  • root key = 60
  • \t

  • key range = 60-60
  • \t

  • attack = 0,2s
  • \t

  • release = 0,2 s

Les notes dels baixos que es fan amb la mà esquerra es corresponen a les següents notes midi:

    \t

  • Baix C = 36 (C2)
  • \t

  • Baix D = 38 (D2)
  • \t

  • Baix E = 40 (E2)
  • \t

  • Baix F = 41 (F2)
  • \t

  • Baix G = 43 (G2)
  • \t

  • Baix A = 45 (A2)

I un cas especial són els acords que es fan amb la mà esquerra, que s’associen per conveni a les següents notes midi.

    \t

  • Acord CM = 24 (C1)
  • \t

  • Acord DM = 26 (D1)
  • \t

  • Acord EM = 28 (E1)
  • \t

  • Acord FM = 29 (F1)
  • \t

  • Acord GM = 31 (G1)
  • \t

  • Acord Am = 33 (A1)

I és important recalcar que aquesta associació és un conveni. Quan toqui la nota midi 24 es dispararà el so samplejat corresponent a l’acord CM.

Per als baixos i acords s’ha fixat els valors d’attack i release a 0,6s.

Per acabar de definir el soundfont hem de crear un nou preset associat a aquest instrument, de manera que el so d’acordió el tindrem en el banc=0 i canal=0 (000:000). Finalment ja puc guardar el soundfont, castagnari.sf2, i ja el puc testejar, en aquest cas amb fluidsynth, fent sonar la meva cançó preferida: Una Plata d’Enciam, tocada a la manera com es faria amb l’acompanyament de diatònic: la melodia amb la mà dreta, i alternant els baixos i acords amb la mà esquerra.

/usr/bin/fluidsynth -s -l -j -a jack -m jack ./accordion_castagnari_studio.sf2 ./una_plata_denciam.midi

Una Plata d’Enciam by joanillo

En el següent post explicarem com s’ha generat el fitxer midi que acabem de tocar a partir de l’editor de partitures lilypond. Tenia ganes de fer un post sobre lilypond, i concretament ara que la meva filla està aprenent el diatònic, com es pot fer servir el lilypond per a la notació d’acordió.

Referències:

Solució portàtil per a un saxo electrònic: Raspberry PI + soft o hard sinte

EWI-USB and Raspberry Pi

EWI-USB and Raspberry Pi

Per tocar el controlador de vent EWI-USB normalment em connecto al portàtil. Faig córrer el fluidsynth o qualsevol altre soft synth. Per tant, la solució per practicar és EWI-USB + portàtil + auriculars. Existeix una solució més portable i autònoma? Definitivament sí utilitzant la Raspberry Pi, buscant una solució purament consola i totalment desatesa: enxufar i tocar. En aquesta ocasió no utilitzo JACK, és una solució purament ALSA. Es tracta d’instal·lar el fluidsynth, algun soundfont que soni bé i que no pesi massa, configurar l’usuari pi amb prioritat realtime, i desinstal·lar qualsevol servei que no hagi de fer servir.

Amb un script a /etc/udev/rules.d/ewiusb.rules aconseguim que en el moment que connecto el EWI-USB pel port USB s’executin les comandes que em permetran tocar automàticament: executar fluidsynth i connectar la sortida midi del EWI-USB a l’entrada midi del fluidsynth. He tingut bastants problemes per tal de no tenir latència, però el script que es dóna més avall a mi em funciona bé sense latència.

A més, amb una mica d’electrònica senzilla i utilitzant els pins GPIO es podria canviar fàcilment el programa midi i poder triar entre diferents instruments: saxo, midi, flauta,…

Una altra possibilitat, com es veu a la fotografia, és utilitzar un sinte hardware com ara el Roland JV-1010. Com que l’entrada del JV-1010 és purament midi es necessita un cable conversor USB2MIDI (per ex, http://www.amazon.com/dp/B0017H4EBG), que mostra els seus ports a ALSA. Amb aquesta solució no has de témer per la latència, és una magnífica experiència d’usuari, i podem triar entre centenars de sons.

/etc/udev/rules.d/ewiusb.rules

#/etc/udev/rules.d/ewiusb.rules
ACTION==”add”, SUBSYSTEMS==”usb”, ATTRS{product}==”EWI-USB”, RUN+=”/home/pi/ewiscript.sh”

/home/pi/ewiscript.sh

#!/bin/sh
#/home/pi/ewiscript.sh
#script que s’ha d’executar quan connectem el EWI-USB. Dos casos: a) synth hardware (roland); b) synth software (fluidsynth)

#mirem si tenim connectat el cable usb-midi
if [ -z `/usr/bin/aconnect -iol | grep USB2.0-MIDI | awk ‘/client/{print $1}’` ]; then

#no està connectat: b) synth software (fluidsynth)
if [ -z `pidof -s fluidsynth` ]; then
screen -d -m -S fluidsynth -t “fluidsynth” /usr/bin/fluidsynth -a alsa -m alsa_seq -g 1 -c 4 -z 256 -r 48000 /home/pi/Natural_Oboe.sf2
/bin/sleep 3
/usr/bin/amixer set Master 40%+ > /dev/null
/bin/sleep 2
FLUIDSYNTH=$(/usr/bin/aconnect -o -l | awk ‘/FLUID/{print $2.”0″}’)
/bin/sleep 2
#echo $FLUIDSYNTH
EWIUSB=$(/usr/bin/aconnect -o -l | awk ‘/client/’ | awk ‘/EWI-USB/{print $2.”0″}’)
/bin/sleep 2
/usr/bin/aconnect $EWIUSB $FLUIDSYNTH
/bin/sleep 2
fi
else
#a) synth hardware (roland)
USBMIDI=$(/usr/bin/aconnect -o -l | awk ‘/client/’ | awk ‘/USB2.0/{print $2.”0″}’)
/usr/bin/aconnect EWI-USB:0 $USBMIDI
/bin/sleep 2
fi

Més informació a la wiki

RPIJERS: Raspberry Pi Internet Jazz European Radio Stations


Vols escoltar jazz tot el sant dia? A Internet tens bastant per escollir, per exemple, http://www.listenlive.eu/jazz.html. En aquest projecte hem indexat totes aquestes estacions de radio per escoltar-les d’una forma simple i amb una interfície mínima. I això ho hem aconseguit amb la Blackberry Pi. Només necessitem alimentar-la, endollar-la a un cable de xarxa, connectar-la a un amplificador, i un botó que ens serveix per arrencar el servei mpd (Music Player Daemon) i per seleccionar fins a 40 canals.

Pots descarregar-te de la wiki (http://wiki.joanillo.org/index.php/Raspberry_Pi:_Internet_Ràdio) el bash script i el fitxer amb la llista de totes les emissores. Si vols que el sistema funcioni de forma totalment desatesa has de fer que el script arrenqui en l’inici del sistema. L’electrònica necessària és mínima, crec que en el video queden clares les connexions, i si no a la wiki hi ha més informació (encara que en català).

Us desitjo un feliç 2013 i molt de jazz! Aquí va el vídeo:

Interfície Wii Rockband drumset

L’altre dia vaig comprar al Cash Converter, per 18e, una bateria Wii de segona mà, amb la idea de fer-la sonar en el meu Ubuntu. Aquestes bateries van sortir al mercat el 2007, ara ja fa cinc anys. Evidentment hi ha altra gent que ha portat aquestes consoles a l’entorn Linux, i m’he beneficiat del codi que he trobat per aquí i per allà. Tanmateix, el codi que he trobat no era per al meu model (també existeixen versions per a PS2, PS3 i X360), així que he hagut d’esbrinar els codis que envia el drumset (amb la dificultat que quan toques les dues baquetes a l’hora, o les dues baquetes i el bombo, s’envien d’altres codis). No tenia experiència prèvia en la programació de la llibreria libusb. Utilitzant aquesta llibreria ha estat la única manera possible de detectar la força amb que colpeges la baqueta, i per tant fer una mica de control de volum, encara que amb poca resolució.

Per tal de fer sonar la bateria es necessita generar missatges MIDI i enviar-los a un sintetitzador. He utilitzat Hydrogen com a sintetitzador de sons de bateria. He programat quatre presets diferents que s’accedeixen amb els botons de la consola (els típics botons 1, 2, A i B de la Wii). S’ha fet dues versions del codi, una que utilitza ALSA de forma nadiua, i una altra per al servidor d’audio JACK. Pots descarregar-te el codi del projecte:
projecte jrbdrum

Stop motion: puzzle de 1000 peces

Només hi ha una època en la vida on fer puzzles és interessant: quan ets nen. Com el Pere, que disfruta fent el puzzle de pirates de 40 peces. Quan ets adult fer puzzles és una autèntica pèdua de temps. Dit això, jo tenia l’espina clavada doncs en el seu dia no vaig poder acabar un puzzle que corria per casa de 750 peces. M’ho devia. Així que un dia que vaig entrar al Cash&Converter vaig agafar un puzzle per 5 euros (no vaig poder triar la foto, però m’era ben bé igual), i em vaig posar a fer el puzzle a estones, igual que un nen.

Stop motion. Quantes fotos s’han de fer a mida que desmunto el puzzle? Quantes peces trec entre foto i foto? Anem a fer el petit càlcul. Si el puzzle és de 1000 peces i trec dues peces entre foto i foto són 500 fotos, que seran 500 frames del video. Si vull muntar un video a 20 fps (20 frames cada segon), sortirà un vídeo de 500f/20fps = 25 segons.

Amb un script es pot muntar el video. Primer de tot es renombren les fotos de manera que la primera passi a ser la última, i la última la primera. De manera que la última és la foto que es diu 99999.JPG. Després es tornen a renombrar de manera que la primera passi a ser la 00000.JPG, etc. I seguidament es munta el video concatenant totes les fotos. Finalment, amb l’editor de video Open Shot es posa la portada, la contraportada, la música i es fan les foses.

#!/bin/bash
#rename files in reverse
START=99999 #allows for an hour of jpegs
i=$START
for f in *.JPG
do
mv $f $i.JPG
i=$(($i -1))
echo $i
done

c=0;
for i in *.JPG;
do mv “$i” “`printf %05d $c`.JPG”;
c=$((c+1));
done

ffmpeg -r 20 -sameq -i %05d.JPG output.mp4

El resultat final:

Cançó de bressol (del meu pare als seus néts)


Una altra cançó de bressol del meu pare. Dedicada als seus néts (els 10 que té, el que vindrà, i els que poden venir). Entre ells la Maria i el Pere, els meus. Una cançó dolça i de melodia senzilla, sense sobresalts, com es correspon a una cançó que té per objectiu fer venir la son, cosa a vegades no gens fàcil.

Dorm, infantó, la dolça son.
noneta non canta la mare;
somnis de pau t’envoltaran;
noneta non, dins del bressol,
noneta non, canta l’amor.

Canco bressol 2 (lullabye) by joanillo

Descarrega la partitura: canco_bressol (dedicada als meus néts) (JM Quintana, 2012)

Jugant amb la FFT

>Fa ja molt de temps (realment molt de temps) que estudiava la Transformada de Fourier (http://en.wikipedia.org/wiki/Fourier_transform) a la facultat, i fins i tot vaig utilitzar l’algorisme de la FFT (Fast Fourier Transform, http://en.wikipedia.org/wiki/Fast_Fourier_transform) en un aplicatiu escrit amb C per a processament digital d’imatges. Des d’aleshores ençà que no m’havia preocupat de la FFT i realment ho tenia molt oblidat.

Aquests dies he tornat a la càrrega amb la FFT doncs, amb la idea d’aprendre les tècniques de programació d’aplicacions d’audio, volia fer o un afinador o un analitzador de la potència espectral d’un senyal, que fos compatible amb JACK.

Primer de tot he mirat quin algorisme de FFT es podria utilitzar, amb llicència GPL, i ràpidament he vist que la tria seria FFTW (http://www.fftw.org/):

FFTW is a C subroutine library for computing the discrete Fourier transform (DFT) in one or more dimensions, of arbitrary input size, and of both real and complex data (as well as of even/odd data, i.e. the discrete cosine/sine transforms or DCT/DST). We believe that FFTW, which is free software, should become the FFT library of choice for most applications.

M’he posat a compilar uns quants exemples i familiaritzar-me amb els càlculs. En definitiva jo el que vull és calcular la potència espectral d’un senyal d’audio, per tant el senyal d’entrada seran unes mostres reals (una sola dimensió). La sortida de la FFT seran uns valors complexos, i he de tenir en compte tant la part real com la part imaginària per tal de calcular la potència espectral.

fftPlan = fftwf_plan_dft_r2c_1d(fftSize, fftIn, fftOut, FFTW_MEASURE); //r2c_1d: real to complex, one dimension

Mirant si hi ha algun afinador de codi lliure, que treballi per la consola, i compatible amb JACK, m’he trobat amb aquests dos projectes, que precisament utilitzen la llibreria FFTW:

i també m’ha sigut últil per fer el meu propi codi el projecte capture_client:

He dividit el problema en dues parts:

  • Primer de tot capturo el senyal que prové del micròfon, i com a resultat obtinc dos fitxers: el fitxer de so wav i un fitxer de text on fico un número suficient de mostres.
  • Segon: obro el fitxer de mostres, aplico una finestra de Hanning a les mostres com és habitual, calculo la FFT, calculo la potència espectral del senyal, i obtinc un fitxer de sortida per a ser processat amb la utilitat de creació de gràfics gnuplot (http://www.gnuplot.info/).

No havia treballat mai amb gnuplot, que seria l’equivalent a Matlab per al món Linux. Veient la demo de gnuplot que es distribueix amb el codi font, i que mostra de forma ràpida totes les possibilitats de gnuplot, m’he quedat realment sorprès. En el meu cas dibuixar el gràfic és molt fàcil:

$ gnuplot
gnuplot> plot “data_440_trumpet_output.txt”

La prova que presento s’ha gravat amb mini teclat Casio SK-8, un mini-teclat dels anys 80, escollint el so de trompeta, i obtinc el següent resultat.

Casio SK-8 440Hz (A) trumpet, 44100 fps by joanillo

Ara vull comparar el resultat dels meus càlculs amb els obtinguts amb Audacity i Ardour, per comprovar que els càlculs són correctes:

Els meus càlculs i Gnuplot Audacity Ardour

Perfecte! L’he clavat!

jcapture: gravar el so del micro a un fitxer wav

jcapture és un petit programa desenvolupat amb C++ que capta el senyal del micròfon i escriu un fitxer d’audio amb format wav. Bàsicament és un client de JACK que es connecta automàticament a system:capture_1, que és el port físic que representa l’entrada del micro de la targeta de so, i mitjançant la llibreria libsndfile va escribint les dades del micro en el buffer del fitxer d’audio.

A més, mostra el nivell del senyal d’entrada de forma gràfica en la consola (doncs és un programa que funciona per la consola, no té interfície gràfica). Si t’interessa la programació de l’API de JACK pots descarregar jcapture:

jplay-sndfile: una aplicació educativa per a Processament Digital del Senyal

jplay-sndfile és una aplicació que he estat programant la última setmana i que té un caràcter didàctic. Bàsicament és un reproductor de fitxers d’àudio, que a més pot aplicar un canvi de freqüència, i també pot fer un escombrat continu de freqüències sobre la mostra d’àudio. És un client de JACK (el servidor d’audio de Linux), i està basat com a punt de partida en sndfile-jackplay que es troba dins les utilitats de la llibreria libsndfile (http://www.mega-nerd.com/libsndfile/tools/#jackplay).

Per tothom és sabut que quan es reprodueix un fitxer d’àudio al doble de la freqüència dura la meitat de temps. Seria equivalent a agafar una mostra de cada dues, i reproduir-les a la mateixa freqüència de mostreig original.

Ara anem a fer el cas contrari, volem dividir la freqüència per dos, i el temps que durarà la reproducció hauria de ser el doble. Per fer-ho, el més fàcil és doblar cada mostra en dues, i reproduir-ho a la freqüència de mostreig original.

Aquests dos casos especials, multiplicar per dos i dividir per dos, són els casos fàcils i més evidents. Un anàlisi d’aquests casos i estudiar el codi proporcionat pot aclarir molts conceptes per als estudiants del Processament Digital del Senyal. Ara bé, més difícil és fer freqüències intermitges entre 0.5 i 2; i més difícil encara és fer un escombrat continu de freqüencies en un rang determinat. Tot això és el que es pot veure i es pot estudiar en aquesta aplicació que té un caràcter didàctic.

La sortida de l’ajuda del programa proporciona la següent informació:

$ jplay-sndfile -h

jplay-sndfile 1.00
Created by Joan Quintana Compte (joanillo)
joanqc arroba gmail.com – www.joanillo.org
Licensed under GPL v.3

jplay-sndfile is a JACK client intended for playing audio files (wav) and pitch shifting, written basically for learning, testing and educational purposes, and the first stage for future developments. A part of playing an audio file, you can change the pitch (between *0.5 and *2) of your audio file, you can play the audio file combing the pitch between two ranges. For testing is useful a sine wave, but remember that you can use any mono (one channel) audio files.
This Jack Audio client connects automatically to system:playback_1 and system:playback_2

usage: jplay-sndfile [-h] [[pitch-shift] | [pitch-shift-start pitch-shift-end]] wav-file

\t-h –help: this usage information
\t[pitch-shift] (0.5,2): shifting pitch
\t[pitch-shift-start] (0.5,2): shifting pitch start range
\t[pitch-shift-end] (0.5,2): shifting pitch end range
\twav file: mono channel audio file
\t

\tExamples:
\t./jplay_sndfile samples/hellosine.wav
\t./jplay_sndfile 0.65 samples/hellosine.wav
\t./jplay_sndfile 0.5 2 samples/hellosine.wav

La mostra d’audio que es presenta vol ser un compendi de què pot fer jplay-sndfile, i contempla els següents casos:

  • ./jplay_sndfile samples/test_44100.wav
  • ./jplay_sndfile .5 samples/test_44100.wav
  • ./jplay_sndfile .8 samples/test_44100.wav
  • ./jplay_sndfile 1.4 samples/test_44100.wav
  • ./jplay_sndfile 2 samples/test_44100.wav
  • ./jplay_sndfile .5 2 samples/test_44100x3.wav
  • ./jplay_sndfile samples/sine_440_44100.wav
  • ./jplay_sndfile .5 1 samples/square_440_44100.wav
  • ./jplay_sndfile 1 2 samples/saw_440_44100.wav
  • ./jplay_sndfile .5 samples/waves.wav
  • ./jplay_sndfile 2 samples/waves.wav

jplay-sndfile-examples by joanillo

Una de les coses més interessants és estudiar la funció callback de la API de JACK, que ha quedat bastant petita, i on està tot el moll de l’os de l’aplicació. Bàsicament la funció callback() la crida el servidor d’àudio cada vegada que la interfície d’àudio (la targeta de so hardware) necessita omplir el seu buffer amb dades.

static int process (jack_nframes_t nframes, void * arg)
{

\tjack_default_audio_sample_t buf ;
\tunsigned int i;
\touts = (jack_default_audio_sample_t *)jack_port_get_buffer (output_port, nframes) ;

\tinfo_t *info = (info_t *) arg;
\t
\tmemcpy (outs_original, buffer2 + frames_counter_original, sizeof (jack_default_audio_sample_t) * nframes * DOUBLE_SAMPLES * 2);

\tint k=0;
\tfloat k2;
\tk2 = nframes/info->shift_pitch;
\tfloat var, var2 = 0;
\tint part_entera = 0;
\tvar = 1/info->shift_pitch – 1;

\tfor (i = 0 ; i < nframes ; i++)
\t{\t

\t\tif (info->shift_pitch < 1) {
\t\t\tif (frames_counter + i >= info->numFrames / shift_pitch_equivalent) { // shift_pitch_equivalent = info.shift_pitch quan no faig un escombrat
\t\t\tinfo->play_done=1;
\t\t\treturn 0;
\t\t\t}
\t\t} else { // >= 1
\t\t\tif (frames_counter_original + i >= info->numFrames * DOUBLE_SAMPLES) {
\t\t\tinfo->play_done=1;
\t\t\treturn 0;
\t\t\t}
\t\t}
\t\t
\t\tif (info->shift_pitch > 1) {
\t\t\tk=(int)(i*DOUBLE_SAMPLES*info->shift_pitch + .5);
\t\t\touts[i] = outs_original[k];\t
\t\t} else if (info->shift_pitch <= 1) {
\t\t\touts[k] = outs_original[i*DOUBLE_SAMPLES];
\t\t\tif ((int)var2 != part_entera) {
\t\t\t\touts[k+1] = outs_original[i*DOUBLE_SAMPLES+1];
\t\tpart_entera = int(var2);
\t\tk++;
\t\t\t}
\t\t\tvar2 = var2 + var;
\t\t\tk++;\t\t\t
\t\t}

\t}
\tframes_counter += nframes;
\tframes_counter_original += nframes * DOUBLE_SAMPLES * info->shift_pitch ;
\t
\treturn 0 ;
} /* process */

I per a què serveix tot això? És una aplicació didàctica, serveix sobretot per aprendre:

  • per aprendre: teoria del Processamet del Senyal
  • per aprendre: API de libsndfile
  • per aprendre: API de JACK, exemple de com funciona la funció de callback

però a part d’aprendre, s’ha desenvolupat amb una idea en ment, que ha de ser el següent projecte: utilitzar una tauleta gràfica Wacom, les que fan servir els dissenyadors gràfics, per produir sons realístics, sensibles al moviment i a la pressió del llapis, però això serà el següent projecte: Reconeixement real de gestos amb la wacom i Síntesi d’àudio

Wacom Theremin

El Theremin és un instrument inventat per Léon Theremin el 1918 que té la particularitat de què es toca amb els gestos de les mans. Està considerat un dels primers instruments electrònics, i el seu so sintètic i característic s’ha utilitzat moltes vegades per a pel·lícules de ciència ficció i efectes especials.

En aquest projecte s’implementa la manera de tocar i el so d’un theremin amb un controlador poc convencional: una tauleta gràfica Wacom de les que fan servir els dissenyadors gràfics. Si saps com es toca un theremin la implementació és evident: amb l’eix x canvies el to (Pitch Bend amb terminologia MIDI; amb l’eix y canvies el volum; i clar: apretar el llapis produeix el so de la nota (missatge MIDI NoteOn) i aixecar el llapis apaga la nota (NoteOff). A més de la posició XY, la tecnologia wacom proporciona altres sensors que donen informació com és la pressió i la inclinació. Encara que no s’ha fet en aquest projecte, es podria haver associat la pressió i la inclinació a altres missatges MIDI CC (Continuous Controller) com ara la modulació (efecte de vibrato).

S’ha utilitzat un sintetitzador Roland JV-2080 per tal de produir un so de Theremin, tot i que no estic molt content amb el resultat obtingut. Allò bo del JV-2080 és que té un espai de memòria per guardar els patch d’usuari i motls paràmetres, oscil·ladors i efectes per poder anar jugant si tens suficient temps. I el que és millor del JV-2080 és que pots configurar el pitch bend (variació del to) amb una amplitud molt gran, també configurable, cosa que normalment no passa en altres sintes (sobretot els sintes software).

Una de les coses que m’ha agradat més del projecte és la integració de l’aplicació desenvolupada amb llenguatge C (hi ha l’enllaç per descarregar el codi més avall) amb Gimp (l’editor d’imatges i fotos de referència en el món Linux). Això dóna peu a múltiples possibilitats i idees per fer projectes que combinin Gimp amb efectes sonors i interactius.

Evidentment, la idea no és nova, hi ha altra gent que ha fet Theremins amb wacom’s i altres controladors com la Wii, però en el projecte 50 Ways to Play Una Plata d’Enciam no podia faltar un Wacom Theremin fet exclusivament amb eines de Codi Lliure.