Connectant aplicacions MidiShare: síntesi

De wikijoan
Salta a la navegació Salta a la cerca
Aplicacions midishare.png

Objectiu

Vull fer una síntesi aclaridora per veure com funcionen les diferents aplicacions midishare i, sobre tot, què fer per sentir so. Com a conclusió, dir que per fer tot el desenvolupament es pot treballar perfectament amb el fluidsynth (síntesi de so) i el virtual keyboard (controlador de teclat), i que no cal tenir connectada la targeta de so ni el hardware corresponent. Per tant, amb el portàtil n'hi ha prou per al desenvolupament d'aplicacions.

Procediment

Les aplicacions que s'instal.len amb el midishare es troben a /usr/src/midishare/src/linux/applications/ i, entre d'altres, les més útils són les aque aquí es veuen:

  • msdisplay: és una aplicació destí que visualitza els events MIDI que li arriben
  • mscontrol: és una aplicació origen que genera events MIDI quan moc els sliders
  • msconnect: em serveix per connectar les aplicacions entre si.

Arrenco aquestes aplicacions:

$ /usr/src/midishare/src/linux/applications/msdisplay/msdisplay &
$ /usr/src/midishare/src/linux/applications/msconnect/msconnect &
$ /usr/src/midishare/src/linux/applications/mscontrol/mscontrol &

Si vull sentir so, necessito, per exemple, el fluidsynth (sintetitzador de veu). Com a driver midi escullo midishare, i té l'avantatge que així serà una aplicació nadiua midishare, que vol dir, que quan arranqui el msconnect em quedarà llistada automàticament.

$ fluidsynth -a alsa -m midishare /home/joan/Escritorio/AltosaxJan.SF2

Ara anem a fer sonar: vull que quan jugui amb el mscontrol pugui sentir el so. Per fer-ho, fixar-se amb el gràfic. He de connectar l'aplicació mscontrol al fluidsynth (i també al msdisplay per veure què passa). Així de senzill. Per fer-ho, és important centrar-se en la columna del mig (Aplicacions) i connectar el msdisplay i el fluidsynth que estan a la dreta (destins). Utilitzo el cursor i la tecla Ctrl.

Un cop connectats ja puc veure que la connexió funciona: sento el so de l'instrument que hagi escollit segons el meu banc de sons (fitxer .sf2) i el msdisplay es va omplint d'events MIDI.

Alternativament, ara clico sobre l'aplicació msdisplay i miro quins origens té: efectivament, mscontrol Faig el mateix per a fluidsynth i veig que el seu origen és mscontrol. Així doncs, en comptes de connectar una aplicació a un destí, també hagués pogut connectar l'origen mscontrol a les aplicacions msdisplay i fluidsynth, i tot funcionaria igual. S'entén, no?

Ara anem a afegir un altre controlador midi: el Virtual Midi keyboard.

$ vkeybd &

$ aconnect -i -o
cliente 129: 'Virtual Keyboard' [tipo=usuario]
    0 'Virtual Keyboard'

Veig que té la referència 129. Aquí és important destacar que si tenim la targeta de so connectada (EDIROL UA-25EX), també veurem quina és la referència de la EDIROL. En aquests moments, el vkeybd és una aplicació ALSA, però no és una aplicació midishare (no està llistada en el msconnect). Per tal de fer-ho, connectem el virutal keyboard a midishare mitjançant msAlsaSeq:

$ msAlsaSeq vkeybd -i 129:0/0

Connecting input "Virtual Keyboard" (129:0) to MidiShare port 0.
MidiShare ALSA driver anchored on "vkeybd" is running.
Type 'q' to quit.

Posem -i perquè és una aplicació origen. Podríem llegir: connectem (msAlsaSeq, veure man msAlsaSeq) l'aplicació origen (-i) 129:0 a (/) l'aplicació 0 (que representa MidiShare). Per veure que està ben connectat, només cal veure msconnect. Ara, igual que abans, puc connectar l'aplicació vkeybd a msdisplay i a fluidsynth. Si ara selecciono l'aplicació msdisplay veig que té dos origens: mscontrol i vkeybd.

Funciona tot bé: toco el vkeybd i sona el fluidsynth i mostra missatges el msdisplay.

fluidsynth amb midi driver alsa_seq

una altra possibilitat és:

$ fluidsynth -a alsa -m alsa_seq /home/joan/Escritorio/AltosaxJan.SF2

$ aconnect -i -o

cliente 129: 'Virtual Keyboard' [tipo=usuario]
    0 'Virtual Keyboard'
cliente 130: 'FLUID Synth (11777)' [tipo=usuario]
    0 'Synth input port (11777:0)'

$ msAlsaSeq fluidsynth -o 130:0/0

fluidsynth, que ara ja no és una aplicació nadiua midishare, l'he de connectar a midishare, i aleshores tot funciona com abans.

Programació JAVA

Quan jo estigui programant amb JAVA amb la llibreria midishare, recordar que la meva aplicació podrà enviar events MIDI (igual que fa mscontrol) i els podrà rebre (igual que fa msdisplay), i que jo hauré de connectar en temps d'execució la meva aplicació a les altres aplicacions (per exemple, fluidsynth si vull escoltar, vkeybd si vull rebre events MIDI)

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

creat per Joan Quintana Compte, abril 2009