Publicado 2022-07-05.
Palabras clave: openbsd midi controller akai mpk mini mk3
Se intenta utilizar un controlador midi AKAI MPK mini mk3 en OpenBSD 7.1 (-current).
Se busca verificar que el teclado funciona con OpenBSD, o sea, que es detectado por el kernel.
Para ello se enchufa el teclado y se usa dmesg
para ver si el kernel generó
algún evento:
$ dmesg
...
uhidev0 at uhub0 port 1 configuration 1 interface 0 "AKAI MPK mini 3" rev 2.00/2.00 addr 5
uhidev0: iclass 3/0
uhid0 at uhidev0: input=32, output=32, feature=0
umidi0 at uhub0 port 1 configuration 1 interface 2 "AKAI MPK mini 3" rev 2.00/2.00 addr 5
umidi0: (genuine USB-MIDI)
umidi0: out=1, in=1
midi0 at umidi0: <USB MIDI I/F>
ugen2 at uhub0 port 1 configuration 1 "AKAI MPK mini 3" rev 2.00/2.00 addr
De la salida anterior vemos que reconoce una interfaz umidi
y midi
.
Buscando en las páginas del manual se encuentra:
midi
./dev/rmidi*
y se muestran ejemplos que utilizaremos para verificar que
se lee información del teclado.Para leer información del controlador midi revisamos primero los permisos del
dispositivo, que por la salida de dmesg
sabemos que es umidi0
:
$ ls -lh /dev/rmidi0
crw-rw---- 1 root _sndiop 52, 0 Jun 28 08:41 /dev/rmidi0
Verificando los permisos con groups
se encuentra que el usuario no tiene
permisos para acceder al dispositivo. Esto se soluciona agregando al usuario
al grupo _sndiop
:
$ doas usermod -G _sndiop jmpc
Aquí hay que abrir una nueva sesión, por ejemplo, haciendo login
en una
terminal y verificar que en la lista de grupos esta _sndiop
.
Una vez que tenemos los permisos probamos leer el dispositivo y presionar algunas teclas del controlador:
$ cat -u /dev/rmidi0 | hexdump -v -e '/1 "%02X\n"'
90
30
50
80
30
00
99
2A
69
89
2A
00
B0
4A
07
B0
4A
08
También se puede utilizar midicat(1):
$ midicat -d -i /dev/rmidi0
96 3e 37
86 3e 00
96 3e 32
86 3e 00
96 3e 30
86 3e 00
con lo que ya comprobamos que OpenBSD recibe información del controlador.
Una característica de un controlador midi es que este solo genera eventos, los que luego deben ser procesados por otro sistema para que se genere el sonido.
Se elegirá fluidsynth para que sintetice el sonido y un conjunto de soundfonts disponibles en el sistema:
$ doas pkg_add fluidsynth generaluser-gs-soundfont
Siguiendo las indicaciones en la wiki de fluidsynth, probamos
usar una soundfont con un archivo midi. Por suerte podemos encontrar todo esto
en el contenido del paquete generaluser-gs-soundfont
:
$ fluidsynth /usr/local/share/generaluser-gs/GeneralUser_GS.sf2 /usr/local/share/examples/generaluser-gs/GUTest.mid
Ahora nos queda "enganchar" el teclado midi a fluidsynth. Esto lo hacemos siguiendo en la FAQ Multimedia de OpenBSD la indicación del uso de instrumentos midi.
Se ejecuta en una consola fluidsynth:
$ fluidsynth /usr/local/share/generaluser-gs/GeneralUser_GS.sf2
y en otra consola se utiliza midicat(1) para enviar los
eventos desde midi/0
(el controlador) hacia midithru/0
(ver sndio(7)):
$ midicat -q midi/0 -q midithru/0
Con esto al presionar las teclas del controlador midi ya podemos escuchar notas.
Para utilizar directamente midi/0
en lugar de midithru/0
creada por defecto
por sndio:
$ fluidsynth -o midi.sndio.device=midi/0 /usr/local/share/generaluser-gs/GeneralUser_GS.sf2
Una alternativa a usar fluidsynth es utilizar la interfaz gráfica qsynth:
$ doas pkg_add qsynth
Al ejecutar la aplicación ir a Setup y:
midi/0
/usr/local/share/generaluser-gs/GeneralUser_GS.sf2
.Ya envalentonados vamos por todas... lmms.
Para instalar:
$ doas pkg_add lmms zynaddsubfx
Al ejecutar lmms
por primera vez se elige sndio MIDI en MIDI Settings y se
vuelve a reiniciar el programa para que se tomen los settings.
Para probar que funcionara el teclado seguí el video software - LMMS - recording your MIDI device (im using a MIDI keyboard) que pude reproducir y obtener los sonidos del teclado.
Nota: hay que ejecutar en otra consola
$ midicat -q midi/0 -q midithru/0
para que lmms reciba los eventos midi.
alsa -> pulseaudio -> jack
.