Chargement...
 
[Voir/Cacher menus de gauche]
[Voir/Cacher menus de droite]

Faire de la MAO sur Raspberry Pi 3

Réalisation d’un expandeur / boîte à rythme et synthé virtuel avec une Raspberry Pi 3.




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 Image . 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 Image , 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 rpi
vous 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 wink
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)


Avertissementattention
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.
notenote
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

notenote
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

notenote
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).
Avertissementattention
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 smile

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é.
notenote
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.
notenote
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.





[+]

Collaborateur(s) de cette page : bda et olinuxx .
Page dernièrement modifiée le Dimanche 03 mars 2019 18:13:57 par bda.
Le contenu de cette page est licencié sous les termes licence.

Documentation [Afficher / Cacher]

Faire un don
[Afficher / Cacher]

Connexion
[Afficher / Cacher]



Mégaphone [Afficher / Cacher]

olinuxx, 11:48, ven. 15 mars 2024: Bonjour et bienvenue à Jerry cool
calixtus06, 18:03, mer. 13 mars 2024: Bonjour et bienvenue à tanguero :-)
olinuxx, 11:01, dim. 10 mars 2024: Bonjour et bienvenue à lolo cool
bda, 16:59, sam. 09 mars 2024: Chapeau pour l'édito. Vous êtes au top les gars :-)
allany, 07:20, jeu. 07 mars 2024: Ça ne fait jamais de mal, c'est l'éditorial ! [Lien]
olinuxx, 19:52, mer. 06 mars 2024: Bonjour et bienvenue à TrkNrk cool
calixtus06, 11:17, mar. 05 mars 2024: Bonjour et bienvenue à D752 :-)
calixtus06, 18:59, lun. 04 mars 2024: Bonjour et bienvenue à Hborsa et Adjudandouille :-)
olinuxx, 18:34, jeu. 29 Feb 2024: Bonjour et bienvenue à anto45500 cool
jujudusud, 23:38, mar. 27 Feb 2024: Venez participer à la joute numéro 17 : [Lien]
calixtus06, 18:36, jeu. 22 Feb 2024: Bonjour et bienvenue à nikartri et rckloar :-)
calixtus06, 10:15, mer. 14 Feb 2024: Bonjour et bienvenue à smonff, Alphascorpii, tadumtss et letoII :-)