Se intenta utilizar un controlador midi AKAI MPK mini mk3 en OpenBSD 7.1 (-current).
Detección
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:
- man umidi(4): indica que este driver es accesible a través del driver
midi
. - man midi(4): indica que el dispositivo corresponde a dos puertos midi, uno
de solo lectura y otro de solo escritura y que solo un proceso podrá abrir
el dispositivo a la vez. Se indica que el dispositivo midi se accede bajo
/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.
Uso - fluidsynth
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
Uso - qsynth
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:
- en la pestaña MIDI, en MIDI Device utilizar el valor
midi/0
- en la pestaña Soundfonts, presionar Open y elegir el archivo
/usr/local/share/generaluser-gs/GeneralUser_GS.sf2
.
Uso - lmms
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.
Conclusiones
- ¡Funciona el controlador AKAI MPK mini mk3 con OpenBSD!
- TODO: entender mejor el midithru
- Me dió la sensación de que fué más sencillo de configurar el uso de qsynth con
OpenBSD que en debian. Quizás porque ya tenía más práctica (lo hice
previamente en linux), pero también porque en OpenBSD solo utilicé
sndiod(8) y en linux utilicé
alsa -> pulseaudio -> jack
.