Projecte Proj12

De Wikijoan
Dreceres ràpides: navegació, cerca

Contingut

Introducció

A partir del tros d'escorça que vaig trobar a Sant Quirze de Pedret, al costat del Pont de Pedret, vull fer un instrument de percussió, que tingui d'entrada tres veus.

L'escorça l'he vernissat amb vernís de iot, i li he donat un aspecte brillant com es pot apreciar a la fotografia. Li enganxo tres piezoelèctrics a la part de darrera. Aquí s'ha de tenir diferents consideracions. Evidentment, la vibració es transmet per tota la fusta i es pot disparar més d'un parxe. Per evitar això al màxim, he d'escollir molt bé les posicions. La manera d'enganxar els parxes ha estat problemàtica. Ho he enganxat amb una silicona que tenia, però no és lo ideal, perquè no queda rígid i segur que amortigua molt el cop. Per tant, és més aviat una solució molt dolenta i s'haurà de buscar una goma que sigui ben rígida, alguna mena de pegamento epoxi. Però de moment el resultat és més que correcte. Per tal d'evitar que es disparin els parxes no desitjats faré passar els missatges midi a través de l'ordinador i filtrar aquells que no siguin prou forts.

Solució hardware amb Alesis DM5

A la meva bateria orgàgina li vull donar un so de fustes. Anem a veure com configuro el Alesis DM-5.

parxe A (Ext Trig 1) Nota 46 (Bb) Prc/98 Wood Hi
parxe B (Ext Trig 2) Nota 38 (D) Prc/100 Block Hi
parxe C (Ext Trig 3) Nota 36 (C) Prc/103 Temple Lo

Ara ja puc tocar una mica, però recordem que podem tenir cops que facin sonar dues notes, i cops (fluixos) que no facin sonar cap nota. El volum és proporcional a la força del cop de mà.

Solució software MidiShare

Fent passar els missatges MIDI per dins l'ordinador vull aconseguir vàries coses.

Per treballar amb sons de fusta escullo el soundfont HS_Acoustic_Percussion.sf2

$ fluidsynth -a jack -m alsa_seq /home/joan/soundfonts/percussion_drumkit/HS_Acoustic_Percussion.sf2

Escullo el canal 0, back 0 i preset 0 Per representar els sons de fusta escullo les següents notes: 38, 41, 46

manualment faig (recordem que això ho puc automatitzar amb un script)

/usr/src/midishare/src/linux/applications/msconnect/msconnect &
/usr/src/midishare/src/linux/applications/msdisplay/msdisplay &
/usr/src/midishare/src/linux/applications/mscontrol/mscontrol &
fluidsynth -a alsa -m midishare -l /home/joan/soundfonts/percussion_drumkit/HS_Acoustic_Percussion.sf2
/usr/local/bin/msAlsaSeq "ALSA_MS_bridge" -i "UA-25EX":0

i en el codi Java connecto el proj12 amb el fluidsynth per una banda i amb el ALSA_MS_bridge per l'altra (que està connectat amb l'Edirol, que alhora està connectat amb el Alesis DM-5). També connecto el mscontrol, que em serveix de comprovació.

            //em connecto a fluidsynth
            int ref_fluidsynth;
            if ((ref_fluidsynth = Midi.GetNamedAppl("fluidsynth")) > 0) Midi.Connect (this.refnum,ref_fluidsynth, 1);
            
            //em connecto al ALSA_MS_bridge
            int ref_alsa_ms_bridge;
            if ((ref_alsa_ms_bridge = Midi.GetNamedAppl("ALSA_MS_bridge")) >          //em connecto al ALSA_MS_bridge
            int ref_alsa_ms_bridge;
            if ((ref_alsa_ms_bridge = Midi.GetNamedAppl("ALSA_MS_bridge")) > 0) Midi.Connect (ref_alsa_ms_bridge,this.refnum, 1);

            //em connecto al mscontrol
            int ref_mscontrol;
            if ((ref_mscontrol = Midi.GetNamedAppl("mscontrol")) > 0) Midi.Connect (ref_mscontrol,this.refnum, 1);

Quan començo a tocar al tió, tinc missatges del següent tipus.

Tipus event: 1 (0=typeNote; 1=typeKeyOn; 2=typeKeyOff)
Canal: 0
Data0: 38 (altura en el cas de Note On/Off)
Data1: 13 (velocitat en el cas de Note On/Off)
MidiShareInput, received typeKeyOn


Tipus event: 1 (0=typeNote; 1=typeKeyOn; 2=typeKeyOff)
Canal: 0
Data0: 38 (altura en el cas de Note On/Off)
Data1: 0 (velocitat en el cas de Note On/Off)
MidiShareInput, received typeKeyOn

No sento res, i això és degut a dues causes.

Per tant, retocaré el codi subsanant aquests fets.

    public void ReceiveAlarm(int ev) {

    	System.out.println("\n");
    	System.out.println("Tipus event: " + Midi.GetType(ev) + " (0=typeNote; 1=typeKeyOn; 2=typeKeyOff)");
    	System.out.println("Canal: " + Midi.GetChan(ev));
    	System.out.println("Data0: " + Midi.GetData0(ev) + " (altura en el cas de Note On/Off)");
    	System.out.println("Data1: " + Midi.GetData1(ev) + " (velocitat en el cas de Note On/Off)");
  
    	if (!(Midi.GetType(ev)==1 & Midi.GetData1(ev)==0)){ //no faig cas al typeKeyOff
    		Midi.SetType(ev, 0); //converteixo el typeKeyOn a typeNote
    		Midi.SetData1(ev, 127); //normalitzo tots els sons al mateix volum, o no
    		Midi.SetData2(ev, 250); //durada
    		Midi.SendIm(this.refnum, ev);
    	}
    }

Hi ha un problema evident de latència, però això ara no és el que toca. (ara mateix no estic utilitzant kernel RT). En aquesta versió 1 no tinc en compte el problema de què un cop dispara dos piezos. De totes maneres, si el tió està ben dissenyat i els piezos col.locats en el lloc correcte, això no hauria de ser un problema.

Faig les proves amb el array de pads de 3x3, i ara no tinc els problemes amb els piezos que tinc amb la tió orgànic. Aquest array de 3x3 forats em dóna uns senyals de volume de 50-100 que està bé, i en aquest cas puc eliminar la normalització de volum a 127 per software.

Vull fer-ho sonar pel Alesis DM-5

apago el fluidsynth i connecto el ALSA_MS_bridge i la Edirol en l'altra direcció:

/usr/local/bin/msAlsaSeq "ALSA_MS_bridge" -i "UA-25EX":0 -o "UA-25EX":0

en el codi Java comento les línies del fluidsynth i em connecto al ALSA_MS_bridge en les dues direccions:

          //em connecto al ALSA_MS_bridge
            int ref_alsa_ms_bridge;
            if ((ref_alsa_ms_bridge = Midi.GetNamedAppl("ALSA_MS_bridge")) > 0) Midi.Connect (ref_alsa_ms_bridge,this.refnum, 1);
            if ((ref_alsa_ms_bridge = Midi.GetNamedAppl("ALSA_MS_bridge")) > 0) Midi.Connect (this.refnum, ref_alsa_ms_bridge, 1);

No oblidar-se de posar l'altre cable MIDI. En la configuració MIDI del Alesis DM-5, ficar Local=Off per tal que els pads no sonin directament, sinó que només soni allò que ve de l'ordinador. Efectivament, amb aquesta configuració no tinc latència, la qual cosa confirma el que ja sabia: en el cas de què no tingui una bona configuració RT del kernel, una solució hardware dóna bons resultats. Fluidsynth és el coll de botella que em dóna una latència dolenta.


creat per Joan Quintana Compte, juliol 2009

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
Institut Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines