web-dev-qa-db-fra.com

Comment envoyer des données brutes MIDI à un nœud d'appareil MIDI?

Contexte et expériences

J'ai un périphérique virtuel MIDI, comme la carte # 1, nommé VirMIDI. Il y a des clients séquenceurs ALSA associés (pas du MIDI brut), comme Virtual Raw MIDI 1-0 à Virtual Raw MIDI 1-3. Il existe des nœuds de périphérique /dev/snd/midiC1D0 à /dev/snd/midiC1D3.

Un logiciel MIDI est connecté à Virtual Raw MIDI 1-0 et un synthétiseur de polices sonores est connecté à hw:VirMIDI,0.

Quand je joue sur le clavier du logiciel, il y a des sons (juste pour vérifier que c'est OK).

Je peux cat le nœud de l'appareil: si je le fais cat /dev/snd/midiC1D0 >data.bin et jouez sur le clavier du logiciel, le fichier data.bin est rempli de bruts MIDI et le synthétiseur jouent des sons (lui et cat reçoivent les événements).

Cependant, si je fais plus tard cat data.bin >/dev/snd/midiC1D0 rien ne se passe: pas d'erreurs ni de sons, le synthétiseur ne reçoit aucun événement MIDI.

Il semble que cela fonctionne uniquement avec un accès en lecture, bien que l'écriture ne déclenche pas d'erreur et semble ne rien faire.

Si jamais cela importe, bien qu'il ne s'agisse pas d'un accès au nœud de périphérique proprement dit, amidi -p hw:1,0 -s data.bin ne fait rien non plus, tandis que amidi -p hw:1,0 -r data.bin se comporte comme prévu.

Question

Comment écrire sur un nœud de périphérique MIDI comme /dev/snd/midiCnDn, avec les effets attendus, de la même manière que l'on peut lire à partir du même nœud de périphérique MIDI? Ou est-il destiné à être lu uniquement?

1
Hibou57

Le pilote VirMIDI est conçu comme une interface entre les programmes qui accèdent aux périphériques RawMIDI (en fait, les périphériques OSS /dev/midi*) et les clients séquenceurs ALSA.
Tout ce qui a été reçu sur le périphérique brut MIDI (hw:1,* ou /dev/*) est envoyé au port séquenceur.
Tout ce qui est reçu sur le port du séquenceur (Virtual Raw MIDI 1-*) est envoyé au périphérique brut MIDI.

Pour connecter plusieurs périphériques raw MIDI, vous devez passer par plusieurs ports séquenceurs:

+-------+       +--------+----------------------+
| synth |  <--  | hw:1,0 | Virtual Raw MIDI 1-0 |  <-+
+-------+       +--------+----------------------+    |
                                                     |aconnect
+-----+         +--------+----------------------+    |
| cat |    -->  | hw:1,1 | Virtual Raw MIDI 1-1 |  --+
+-----+         +--------+----------------------+
1
CL.