Mon filtre MIDI ultime sur mesure

Published: Mon 30 October 2023
Updated: Thu 27 June 2024 by Ludo In Music
tags: midi dawless midi sysex verselab midi controller raspberry Translations: en

Lorsque vous jouez de l'électro en live, vous avez besoin de contrôle et vous atteignez rapidement les limites des contrôleurs MIDI existants. Comment pouvez-vous obtenir plus de contrôle sur votre set live, par exemple en envoyant du MIDI Sysex avec n'importe quelle surface? En filtrant et en fusionnant plusieurs contrôleurs MIDI avec différents synthés ? Voici ma solution avec un Raspberry PI Zero.

Si vous êtes en mode dawless, les possibilités de contrôle ou de filtrage MIDI sont assez limitées, limites qui n'existent pas si tous vos synthés sont connectés à une DAW comme Ableton.

Je voulais quelque chose de vraiment flexible et compact. Je n'ai pas peur de la programmation, j'ai donc choisi d'utiliser un Raspberry PI Zero W comme base de mon contrôleur MIDI.

Quelle interface MIDI pour le Raspberry PI Zero ?

Pour un MIDI DIN standard sur le Raspberry, vous pourriez utiliser un câble midi usb basique, mais je ne trouve pas cela très élégant, d'autant plus qu'il n'y a pas beaucoup de ports USB sur le PI Zero, et qu'il faudrait donc ajouter un hub.

Mais j'ai trouvé cette interface Slim MIDI Adapter sur Domoshop, qui se connecte au port d'extension 40 broches du PI et s'intègre au PI avec un petit boîtier en plexi. Il faut ajouter 2 câbles TRS-DIN type A, mais je trouve que c'est un hat MIDI vraiment sympa (qui devrait évoluer puisqu'on voit sur la photo qu'une puce pour gérer les encodeurs pourrait être ajoutée).

MIDI Raspberry PI

Une fois que la configuration WIFI de base du raspberry a été effectuée (il existe de nombreux tutoriels sur le sujet), tout ce que vous avez à faire est d'installer le programme 'ttymidi' avec ce paquet .deb afin que les ports MIDI soient reconnus au niveau du système. J'ai "forké" un ancien code ttymidi pour faciliter l'installation sur le RPI Zero :

$ wget https://github.com/ldrolez/ttymidi-sysex/releases/download/v0.20240907/ttymidi-rpi_0.20240907_armhf.deb
$ sudo apt-get install ttymidi-rpi*.deb

ttymidi pour RPi

Il y a quelques détails supplémentaires sur le blog de Domoshop. Notez que sur mon PI Zero, j'ai du supprimer la ligne 'enable_uart=1' du fichier /boot/config.txt.

Trouver un boitier pour le hat MIDI du Raspberry PI zero

J'ai testé plusieurs boîtiers, et le plus simple est de commencer par de simples plaques en plexiglas, et de prendre en sandwich le hat et le PI avec des entretoises en nylon. Ce serait bien de pouvoir utiliser un étui officiel, mais il faudrait redessiner la partie supérieure et l'imprimer à la maison.

Un autre compromis consiste à utiliser cette boite trouvée sur Aliexpress, qui a les dimensions exactes ! Tout ce que vous avez à faire, c'est de percer deux trous pour les fiches TRS. Comme vous pouvez le voir ci-dessous, je n'ai pas les bons outils pour faire des trous propres 😅

Slim MIDI et Raspberry PI zero dans le boitier transparent

Exemple de convertisseur MIDI CC vers Sysex pour mon Verselab MV-1

La première chose que je souhaite faire avec ce filtre MIDI est de pouvoir envoyer des sysex MIDI complexes depuis mon Launchpad Pro mk3 vers mon Verselab MV-1, afin de pouvoir contrôler en direct certains des paramètres cachés des MFX du Verselab.

On peut tenter de programmer un script Python avec MIDO, une bibliothèque MIDI sympa. $ sudo apt-get install python3-mido python3-rtmidi pour obtenir ce module Python.

Voici le script :

import mido

inport = mido.open_input('MIDI In')
outport = mido.open_output('MIDI Out')

for msg in inport:
  # filter out clock messages
  if msg.type != "clock":
    if msg.type == "control_change":
      # I want to convert CC81 from channel 7 to Sysex
      if msg.channel == 6 and msg.control == 81:
        sysx = mido.Message('sysex')
        # Roland SYSEX 
        sysx.data = [ 0x41, 0x10, 0x00, 0x00, 0x00, 0x6F, 0x12 ]
        # Parameter chosen
        sysx.data += [ 0x10, 0x00, 0x18, 0x14, 0x08, 0x00 ]
        # convert CC value to Roland Sysex
        sysx.data += [ int(msg.value / 16) , int(msg.value & 15) ]
        # checksum that is not checked :)
        sysx.data += [ 55 ]
        # send the Sysex data
        outport.send(sysx)
        # debug
        # print(sysx.hex())
      else:
        outport.send(msg)
        # print(msg)
    else:
      outport.send(msg)

Charger le script MIDI

C'est assez simple à comprendre, la seule partie exotique étant les codes SYSEX Roland, documentés dans mon autre article.

Avec ce script, en utilisant le slider virtuel CC81 sur mon Launchpad, j'enverrai un code Sysex à mon Verselab pour moduler l'effet global du synthé.

Si vous préférez utiliser un Python Virtual Env, assurez-vous d'installer python-rtmidi, et non le paquet rtmidi !

Aller plus loin avec ce contrôleur MIDI

L'étape suivante serait de pouvoir éditer des scripts MIDI depuis le navigateur d'un téléphone ou d'une tablette, parce que SSH c'est bien mais un peu trop geek.

J'ai donc installé jupyter-notebook (apt-get install jupyter-notebook) et pour le lancer automatiquement au boot, j'ai d'abord défini un mot de passe :

$ jupyter notebook password
Enter password:
Verify password:

Créez un répertoire pour vos scripts, puis ajoutez jupyter à votre crontab :

$ mkdir scripts
$ crontab -e

Et ajoutez la ligne suivante :

@reboot nohup jupyter-notebook --ip 0.0.0.0 --notebook-dir=scripts --no-browser &

Trouvez l'adresse IP du Raspberry et pointez un navigateur sur http://ip_du_pi_zero:8888 pour commencer à éditer vos scripts MIDI. Après avoir entré votre mot de passe, cliquez sur New->Python 3 (ipykernel), et entrez votre script. Pour le lancer, il suffit de cliquer sur le bouton Exécuter.

C'est un peu rustique, mais c'est la solution la plus flexible que j'ai trouvée pour manipuler le MIDI comme je le souhaite.

MIDI in Jupyter

Quelques séquenceurs en Python

J'ai commencé à écrire quelques séquenceurs MIDI pour le fun. Vous pouvez télécharger et modifier le code ici : Séquenceurs Midi Python

Si vous avez besoin de plus de détails sur [comment écrire des séquenceurs MIDI en Python avec MIDO, cliquez ici] (/blog/music/raspberry-pi-midi-sequencer.php). Le plus intéressant est loop8.

Prochaines expériences

Restez à l'écoute, dans les mois à venir, je vais avoir beaucoup de choses à tester avec cette interface MIDI SLIM :

  • Ajouter un 2ème Launchpad et utiliser la fonction USB Midi host du Raspberry
  • Tester les filtres Midish et Mididings
  • Tester les logiciels et scripts de Zynthian, car leur interface MIDI est compatible avec celle de Domoshop
  • Tester Puredata dans un navigateur
  • Voir si les scripts de Norns peuvent tourner dessus
  • Connecter plus de périphériques MIDI USB pour voir combien le Raspberry peut en prendre en charge

L'écosystème MIDI et sonore de Linux et du Raspberry est extrêmement complet, et il faut du temps pour l'explorer et trouver des choses intéressantes !

Si vous avez des questions ou des idées, n'hésitez pas à me commenter ci-dessous ! 👇👇

References:

LD. --

You liked this article?

Support me on Patreon!

Speak your mind

Share me!

Last articles:

SHLD FREE MIDI Chords pack!

Ableton Move or Novation Circuit Tracks?

How to load Clips on your Roland Groovebox + sample packs

Fall 2024 MIDI Chord Pack Unveiled!

Live Lite and Intro Missing Audio Effects

RSS 2.0 Feed