Réalisation d’un expandeur / boîte à rythme et synthé virtuel avec une Raspberry Pi 3.
Table des matières
Motivation
Ayant une préférence pour les instruments « matériels » comme les séquenceurs MIDI, les synthétiseurs analogique et numérique, etc. Je voulais combler un manque après l’acquisition d’un séquenceur MIDI Kilpatrick Audio Carbon . En effet, je n’avais aucun synthé à séquencer. Par contre une Raspberry Pi était là, dans un profond sommeil et prenant la poussière.
L’idée fut donc de transformer cette Raspberry Pi en véritable expandeur, boîte à rythme et synthétiseur virtuel.
Aujourd’hui (le 22/02/2019), bien que je n’aie plus le Carbon, je travaille toujours avec un séquenceur MIDI matériel, l’Octatrack d’Elektron. La Raspberry Pi 3B a été remplacée par une 3B+.
Liste des « ingrédients »
- Une Raspberry Pi 2 ou 3. La récente version 3B+ est bien plus adaptée, car son CPU et son bus USB sont plus rapides.
- Une carte microSD d’au moins 16Go (système + échantillons) ou une microSD de 8Go et une clé ou disque USB.
- Une interface audio USB. Il est aussi envisageable de prendre une carte audio à monter sur les GPIO. Mais toutes ne sont pas adaptées pour une faible latence.
- Un écran HDMI, DSI ou à monter sur les GPIO. Suivant vos besoins.
- Un boîtier. Uniquement pour protéger votre Pi.
- Du temps, de la patience et de la persévérance ;)
Installation de Raspbian
Pour l’installation du système Raspbian , vous trouverez de nombreux tutos sur Internet.
Ensuite, j’ai choisi de passer à la version dite « testing » afin d’avoir des versions plus récentes des applications utilisées. Vous pouvez en faire de même ou en rester là, suivant votre niveau en matière de linuxien.
Si vous êtes courageux, voici les commandes :
Éditez votre fichier /etc/apt/sources.list :
sudo nano /etc/apt/sources.list
Remplacer les mots « stretch » par « testing »
Votre fichier doit ressembler a ceci :
deb http://mirrordirector.raspbian.org/raspbian/ testing main contrib non-free rpivous devriez en faire de même pour la ligne commençant par deb-src si vous souhaitez compiler des applications d’après les souces de raspbian
Sauvegardez vos modifications avec Ctrl+o puis Entrée et quittez nano avec Ctrl+x.
Lancez la mise à jour :
sudo apt-get update && sudo apt-get -y dist-upgrade
Si tout c’est bien passé, redémarrez avec :
sudo reboot
Pour finir, installez l’utilitaire listbugs d’APT. Cette commande permet de savoir si des bugs gênants seront présents lors des mises à jours. Très utile avec une variante dite instable
sudo apt-get install apt-listbugs
Optimisation du système
Pour cette étape, vous pouvez procéder de deux manières. Soit simplement en conservant le noyau par défaut en activant le mode « performance », soit en compilant un noyau temps réel. Cette dernière méthode est celle que j’ai privilégiée mais si vous débutez, ne vous lancez pas dans cette tâche qui reste assez fastidieuse.
Méthode avec le noyau par défaut (recommandée pour les débutants)
Il faut privilégier le gouverneur « performance » pour le processeur. Par défaut il est sur « ondemand » ce qui n’offre pas toujours les meilleures performances.
Si vous utilisez un clavier, pressez la touche « maj » au démarrage. Sans cette touche, c’est « ondemand » qui est configuré. Avec c’est le mode « performance ».
Comme ce n’est pas toujours pratique d’appuyer sur une touche au démarrage ou si vous n’utilisez pas de clavier, il faut commencer par désactiver le service raspi-config qui ne sert qu’à sélectionner les modes « ondemand » ou « performance » :
sudo systemctl disable raspi-config
Ensuite, créez ou éditez votre fichier /etc/rc.local :
sudo nano /etc/rc.local
Ajoutez les lignes suivantes :
for GOVERNOR in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; \ do \ echo "performance" | sudo tee $GOVERNOR; \ done
Enregistrez votre fichier avec Ctrl+o puis Entrée et Ctrl+x pour quitter.
Méthode avec un noyau temps-réel (RT) (déconseillée aux débutants)
attention
La fondation Raspberry Pi propose désormais la vers 4.19 du noyau. La version RT (Temps Réel) n’est pas encore publiée.
Cette méthode a été largement simplifiée depuis la version 4.14 du noyau. Le dépôt git de la fondation offre directement les sources modifiées pour le temps réel. La compilation d’un noyau Linux est toujours à proscrire aux débutants, mais elle est bien plus abordable maintenant.
note
Vérifiez que bc soit bien installé sur votre rpi, ce n’est pas le cas par défaut. sudo apt-get install bc si besoin.
Il y a deux possibilités pour compiler un noyau. Soit depuis un PC sous Linux avec un compilateur croisé (cross-compiler), soit directement sur votre Raspberry Pi. Je vais vous expliquer cette seconde méthode.
À partir de là, si vous souhaitez compiler votre noyau temps réel, je vais faire comme si vous étiez déjà familiarisé avec cette tâche (compilation du noyau).
Commencez par récupérer les sources officielles :
git clone -b 'rpi-4.14.y-rt' --depth 1 https://github.com/raspberrypi/linux.git
Comme nous sommes sur une Raspberry Pi 64bit avec un système 32bit, il faut le préciser :
export KERNEL=kernel7
Ensuite indiquez le nombre de cœurs utilisés. Je vous conseille 2 maxi pour des raisons de limitation mémoire :
export CONCURRENCY_LEVEL=2
Par défaut, raspbian prévoit une mémoire d’échange (swap) de 100Mo. Je vous conseille vivement de créer un fichier d’échange sur votre carte microSD ou sur support USB :
sudo fallocate -l 1G /chemin/vers/votre/swapfile sudo chmod 600 /chemin/vers/votre/swapfile sudo mkswap /chemin/vers/votre/swapfile sudo swapon /chemin/vers/votre/swapfile
note
En cas de redémarrage, vous devrez retaper la dernière ligne pour réactiver votre fichier d’échange
Revenez au noyau et configurez-le :
cd linux make bcm2709_defconfig
note
Depuis quelque temps, le noyau temps réel est pré-configuré par défaut. Vous pouvez toujours changer sa configuration avec make menuconfig si besoin
Allez, c’est parti. Croisez les doigts et armez-vous de patience, c’est assez long ;) :
make clean ./scripts/config --disable DEBUG_INFO make -j2 deb-pkg
Si tout va bien, vous devez avoir plusieurs fichiers .deb prêts à l’emploi. Ils sont placés dans le répertoire précédent "linux" (cd ..). Installez-les avec "dpkg -i nom_du_fichier.deb" (linux-image-4.14.91-rt49-v7+_4.14.91-rt49-v7+-1_armhf.deb dans mon cas).
attention
Le numéro de version est très important ici. En cas d’erreur, votre Raspberry Pi ne démarrera pas. Vous serez contraint de modifier le fichier config.txt depuis un autre ordi.
Enfin, vous devez configurer le fichier /boot/config.txt afin que votre RPI démarre avec ce noyau temps réel.
Ajoutez une ligne avec votre éditeur favori :
kernel=vmlinuz-4.14.91-rt49-v7+ (numéro de version au moment où j’écris ces lignes)
À l’avenir, je proposerai un paquet deb avec un noyau RT
Redémarrez, croisez les doigts, et admirez votre rpi avec noyau temps réel
Installation et configuration de jackd.
D’abord, je tiens à signaler que cette phase est celle qui m’a pris le plus de temps. Trouver le meilleur compromis facilité/performance/fiabilité/légèreté.
note
J’ai choisi QJackCtl après avoir essayé ses concurrents. QJackCtl a l’avantage de la légèreté et de la stabilité sur Raspberry Pi.
En premier lieu, il vous faut installer et configurer jackd. Ce qui sera fait automatiquement en installant QJackCtl :
sudo apt-get install qjackctl
Lors de l’installation de jackd, le système vous proposera deux choix. Soit d’installer jackd avec les priorités Temps Réel, soit sans. Choisissez Temps Réel (ou Realtime si votre système est en anglais). Sinon vous pourrez toujours reconfigurer jackd après installation avec:
dpkg-reconfigure -p high jackd
Lancez QJackCtl et configurez jack.
note
Pour cela, vous pouvez suivre les différents conseils des pages liées à QjackCtl.
Sur une machine aussi peu puissante, il ne faut pas chercher à avoir une latence proche du zéro mais un compromis entre une latence trop faible avec des xruns et une latence trop importante qui serait perceptible.
Sur ma RPI3B+, avec une carte audio montée sur les GPIO HiFiBerry DAC+ et jackd configuré comme suit :
/usr/bin/jackd -P90 -p32 -t2000 -dalsa -dhw:sndrpihifiberry -r48000 -p128 -n3 -s -Xseq -P
Je n’ai aucun xrun avec 8ms de latence.
Bien choisir ses applications de MAO.
Les Raspberry Pi offrant des performances assez modestes, il ne faut pas envisager d’utiliser Ardour 3 avec 64 pistes audio et autant d’effets!
Personnellement j’utilise Non-Mixer, Hydrogen et DISTRHO TAL NoiseMaker.
[+]