Table des matières
Informations
Site web officiel RaspBerry : https://www.raspberrypi.org/ .
Site web officiel RaspBian : https://www.raspbian.org/ .
Description
Dans cet article, nous allons aborder la construction d’un synthétiseur matériel sur la base d’un Raspberry Pi, ainsi que sa configuration logicielle.
Le Raspberry Pi 3 est un micro-ordinateur qui fait suite au Raspberry Pi 2. Cette évolution apporte des améliorations notables :
- Processeur 1200 Gigahertz
- Mémoire de 1 Gb
- La connectique est bien fournie : 1 sortie HDMI, une sortie son, 4 ports USB, un port réseau
- Wifi intégré ainsi que Bluetooth (ces deux éléments ne nous intéresseront pas)
- Le tout sur une carte PCB d’environ 9cm x 6cm.
et pour le dessert
Le projet
Les prérequis d'un enregistreur de qualité et efficace :
- direct-to-disk pour l'enregistrement
- un micro avec alimentation fantôme de 48V ainsi que des micros lavallière.
- configuration de l’enregistrement doit être simple et rapide.
- l’enregistrement doit s’effectuer au minimum en 48000Hz. La carte incluse ne peut en aucun cas nous servir, celle-ci étant de qualité médiocre.
- ZynAddSubFx
- Un Mellotron
- Un lecteur SF2
Le matériel choisi
et en tant que digestif Behringer U-PHORIA UMC204-HD 24-Bit/192 kHz tout de même.
- carte principale Raspberry Pi 3
- Raspberry Pi 7´´ affichage tactile
- Behringer XENYX Q502USB. Ce choix s'impose dans le cas des prérequis fixés. Entrées et sorties. Le Behringer est petit et dispose d'une alimentation fantôme 48V, de 5 entrées, 2 bus ainsi qu'un compresseur. Les cartes son Raspberry ne possède en effet qu'une sortie stéréo. Par contre, se justifie sans aucun doute dans le cas d'un synthétiseur sans possibilité d'enregistrement.
- Behringer U-PHORIA UMC204HD 24-Bit/192 kHz. Alimentation fantôme 48V + MIDI IN/OUT
- Une carte Micro SD de 32 Gb ou mieux de 64 Gb. Il vaut mieux aussi choisir la marque qui propose le débit le plus rapide.
- Clavier Axiom 61 touches.
- Alimentation 5V 2.5A. Requise afin de faire fonctionner correctement la carte principale, l'écran tactile et le clavier (oui cette alimentation permet d'alimenter aussi le clavier)
Logiciels
- Le système d'exploitation par défaut et conseillé est Linux. Plus précisément la RaspBian https://www.raspbian.org/ . Cette distribution est basée sur la Debian Stretch.
- Carla (issue du projet KxStudio) présent dans certains dépôts spécifiques. La version proposée dans ces dépôts est la Carla-git 1.9.2 qui présente le défaut de ne pouvoir enregistrer les connections. Il faudra donc compiler une version plus récente à l'aide des sources git.
- Le paquet "build-essential" des dépôts ainsi qu'un certain nombre de logiciel en version dev
- TimeMachine ou mieux encore QjackRcd
- ZynAddSubFx, pour la partie synthé
- LinuxSampler qu'il faudra aussi recompiler
- Les greffons LV2 FluidSynth concernant le SF2
- En annexe, un petit logiciel développé en Gambas (fonctionnel, mais cependant en cours de développement)
Montage matériel
Concernant le montage matériel de la carte principale, il n'y a pas de problème particulier. Simplement faire attention à la connexion des nappes et des fils d'alimentation. Des tutos sont disponibles, exemple : https://www.youtube.com/watch?v=E1lua5mgrJs .
Installation du système d'exploitation
La carte micro SD est en général livrée avec un adaptateur. Il faut l'insérer soit dans le logement prévu à cet effet soit au travers d'un adaptateur. Puis télécharger le système RaspBian : https://www.raspberrypi.org/downloads/ .
Une fois cela fait, installer le système depuis votre ordinateur, selon la méthode suivante et en console :
sudo dd if=*__repertoire__*/__Nom de l'imag__.img of=/dev/__sdc__selon le référencement de votre carte
Cela peut prendre un peu de temps. Une fois l'opération terminée, retirer la carte SD et l'insérer sur la Raspberry, alimenter le Raspberry puis laissez le système se charger.
C'est tout.
Connecter cette carte au réseau par le câble. Réglez la langue, le clavier. Puis, en console faites immédiatement une mise à jour :
sudo apt-get update sudo apt-get dist-upgrade
Une chose est encore importante : mettre à jour tous les micro-logiciels :
sudo rpi-update #une fois terminé... sudo reboot
Cela va installer si nécessaire un noyau optimisé et à jour. (Note : les noyaux installés sont tous basse-latence)
Ne pas oublier ensuite de paramétrer les locales et le clavier
Paramétrage du système Méthode 1 pour les gens pressés
C'est sans aucun doute l'étape la plus longue. En premier lieu, l'espace d'une carte SD étant limitée, on fait un petit peu de nettoyage :
sudo apt-get purge -y libreoffice-common claws-mail minecraft-pi pulseaudio epiphany-browser
Tout cela n'étant pas dans le projet, et donc absolument pas nécessaire.
wget -O - http://rpi.autostatic.com/autostatic.gpg.key| sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/autostatic-audio-raspbian.list http://rpi.autostatic.com/autostatic-audio-raspbian.list sudo apt-get update
Paramétrage du système Méthode 2 et en test !
Sans utiliser la méthode 1
Là je vous ai un peu mâché le travail, télécharger donc ceci (dès que ce sera téléversé) :
Le résultat ?...catastrophique ! Avec la suite Cadence, le raspi aligne les décrochages audio (x-runs) dès Cadence chargé après 1 à 2 minutes et fini par geler tout le système.
À mon avis, le problème vient de D-bus qui est mal supporté par le Raspberry. J'ai lu cela quelque part. Finalement, je suis revenu à l'idée du départ : ne compiler que Carla. J'ai aussi simplifié le tout en ne compilant que ntk, fluidsynth, Carla et Linuxsampler :
http://www.cryptos-sys.ch/IMG/gz/rpi-carla-system.tar.gz.
Là, cela fonctionne parfaitement en 192000 Hz avec une latence de 10.7 ms.
Après le téléchargement du tar.gz, ouvrez la console du Raspberry. Le mieux est de se connecter en ssh (openssh est installé d'office) puis :
tar -xzvf rpi-audio-compilation.tar.gz
Puis la première étape en vérifiant au préalable que les deux fichiers install_new et compil soit marqués comme exécutable :
./install_new
Allez boire un café, vous occuper de vos femmes et revenez quand c'est fini. Cela prend un peu de temps et une fois cela fait :
./compil
Allez boire un café, vous occuper de vos femmes (elles ne vous croiront jamais, deux fois dans la même journée...pfff) et revenez quand c'est fini. Cela prend un peu de temps.
Une fois la compilation et l'installation terminée, la machine redémarre. Il ne vous reste plus qu'à configurer votre interface graphique, Carla afin qu'il prenne le moins de place possible sur l'écran.
Vous pouvez ensuite brancher un clavier en USB, votre carte son en USB (
...et le résultat est ...
Nul à ch***. S'il répond au jeu du clavier un moment, il part en "live". Il suffit pour cela de jouer un peu vite. Hors donc, on va pas se laisser bouffer par la technique. j'ai allégé le système :
sudo systemctl disable dhcpd.service sudo systemctl disable raspi-config.service sudo systemctl disable hciuart.service sudo systemctl disable networking.service sudo systemctl disable systemd-udev-trigger.service sudo systemctl disable ntp.service sudo systemctl disable binfmt-support.service
Pour commencer.
Ensuite, pour les tests, j'ai créé un script de lancement en en virant encore quelques un :
#!/bin/bash sudo cpufreq-set -g performance sudo systemctl stop networking.service sudo systemctl stop hciuart.service sudo systemctl stop cron.service sudo systemctl stop raspi-config.service sudo systemctl stop ntp.service sudo systemctl stop binfmt-support.service sudo systemctl stop systemd-udev-trigger.service sudo killall /usr/lib/gvfs/gvfsd sudo killall /usr/lib/gvfs/gvfs-mtp-volume-monitor sudo killall /usr/lib/gvfs/gvfs-udisks2-volume-monitor sudo killall /usr/lib/gvfs/gvfs-goa-volume-monitor sudo killall /usr/lib/gvfs/gvfs-afc-volume-monitor sudo killall /usr/lib/gvfs/gvfs-gphoto2-volume-monitor sudo killall /usr/lib/gvfs/gvfsd-trash sudo killall gnome-pty-helpersudo sudo killall /usr/lib/policykit-1/polkitd sudo killall lxpanel /usr/bin/jackd -dalsa -r192000 -p1024 -n3 -D -Chw:U192k -Phw:U192k & sleep 5 zynaddsubfx -a & sleep 5 aconnect 16:0 128:0 &
C'est nettement mieux, délicat mais mieux quand même.
Je me suis dit : pourquoi ne pas compiler le noyau en RT ? Au préalable, j'ai téléchargé les sources, modifié le .config d'origine en ne modifiant que le "préempt lowLatency" et l'horloge à 1000 (par défaut à 100). Tout bien comme il faut. Au final que dalle. Il démarre normalement puis gèle totalement la machine. Idem si j'applique le patch RT. Essayé en CROSS_COMPILE, la compilation s'arrête avec une erreur. RT ou pas. J'ai donc abandonné pour l'instant le noyau standard convenant à peu près.
Il reste à améliorer certains réglages comme le blacklistage de la carte son interne, bluetooth et wifi, la fréquence du processeur en mode performance. Ce n'est pas absolument nécessaire mais c'est un plus.
Pour exemple, pour blacklister les pilotes pas très utiles cela se passe dans le fichier : /etc/modprobe.d/raspi-blacklist.conf. C'est important car avec un autre nom de fichier, cela ne fonctionne pas. Exemple :
blacklist snd_bcm2835 blacklist bnep blacklist btbcm blacklist hci_uart blacklist cfg80211 blacklist brcmfmac blacklist joydev blacklist rpi_backlight blacklist rpi_backlight blacklist ipv6 blacklist bcm2835_gpiomem blacklist bcm2835_wdt
un lsmod donnera ceci :
cpufreq_stats 3463 0 snd_usb_audio 118608 0 snd_hwdep 5727 1 snd_usb_audio snd_usbmidi_lib 19801 1 snd_usb_audio snd_rawmidi 18516 1 snd_usbmidi_lib snd_seq_device 3621 1 snd_rawmidi snd_pcm 75762 1 snd_usb_audio snd_timer 19288 1 snd_pcm snd 51908 7 snd_usb_audio,snd_hwdep,snd_timer,snd_pcm,snd_rawmidi,snd_usbmidi_lib,snd_seq_device evdev 11396 5 uio_pdrv_genirq 3164 0 rpi_ft5406 2898 0 uio 8000 1 uio_pdrv_genirq
Et ne pas se gêner, en créant un bash qui lance le programme souhaité, de jouer avec des commandes a "donf" tel que :
sudo cpufreq-set -g performance sudo /sbin/sysctl -w vm.swappiness=10 sudo mount -o remount,size=128M /dev/shm sudo systemctl stop systemd-modules-load.service sudo systemctl stop binfmt-support.service sudo systemctl stop systemd-udev-trigger.service sudo systemctl stop dhcpcd.service sudo systemctl stop systemd-udev-trigger.service sudo killall at-spi-bus-launcher sudo killall gnome-pty-helpersudo sudo killall /usr/lib/policykit-1/polkitd sudo killall sshd sudo killall systemd-journald sudo killall systemd-udevd sudo killall systemd-logind sudo killall dhcpcd sudo killall rsyslogd sudo killall ssh-agent /usr/bin/jackd -dalsa -r192000 -p1024 -n3 -D -Chw:U192k -Phw:U192k & sleep 5 zynaddsubfx -a & sleep 5 aconnect 24:0 128:0 &
Ceci est une version améliorée du script donné plus haut qui me donne, entre autre, une occupation mémoire de 120 Mo, jack-zynaddsubfx-aconnect non-lancés et 221 Mo ceux-ci lancés. Je pense que c'est à retenir pour une station plus grosse.
Tests
- TimeMachine et Direct-to-Disk : pour un enregistrement test au micro, pendant 45 minutes, aucun Xruns à l'horizon. Dans ce cas le système est tout à fait utilisable et efficace.
- ZynAddSubFx : cela fonctionne à peu près, mais dès un jeu plus rapide, les Xruns s'alignent. Difficilement utilisable, sinon pour des nappes.
En conclusion
Cela fonctionne avec zynaddsubfx et un pad chargé (ne pas exagérer non plus dans la frappe du clavier).
Moi-même écrit :
TODO ce */⁼ç*/&% de noyau rt. Aucun tuto pour la compilation ne fonctionne pour l'instant.
J'ai dit cela le 12 octobre 2016 à 8h10 en pleine déprime après avoir passé 3 jours à essayer de compiler ce noyau.
À 8h20 le même jour j'ai trouvé cela : http://www.frank-durr.de/?p=203 .
8h23 après m'être copieusement gifflé et flagellé. Je suis revenu.
8h27 Le noyau RT était en place.
Et je vais aller acheter un bouquet de fleurs à ma femme afin de me faire pardonner la mauvaise humeur
Gros merci à Frank.
J'ai dit cela le 12 octobre 2016 à 8h10 en pleine déprime après avoir passé 3 jours à essayer de compiler ce noyau.
À 8h20 le même jour j'ai trouvé cela : http://www.frank-durr.de/?p=203 .
8h23 après m'être copieusement gifflé et flagellé. Je suis revenu.
8h27 Le noyau RT était en place.
Et je vais aller acheter un bouquet de fleurs à ma femme afin de me faire pardonner la mauvaise humeur
Gros merci à Frank.
J'ai aussi modifié le code de zynaddsubfx. Pas grand chose si ce n'est les fenêtres en mode Beginner (que je souhaite en plein écran) parce que la fenêtre Instrument Bank se positionne à la hurf sur l'écran tactile. De même j'ai copié les sons, qui normalement se trouvent dans /usr/share/zynaddsubfx, vers /home/pi/zynaddsubfx. Sur l'écran tactile, c'est assez pénible pour la sélection d'un seul son. Je vais donc aussi agrandir un peu certains menus, sinon il faut des tout petits doigts. Bon, ça, c'est histoire d'améliorer le confort, ça n'a pas d'impact sur le fonctionnement.
Je n'ai pas été foutu de faire un paquet Debian de Carla. Par contre pour Linuxsampler c'est ok.
Les autres, je n'ai même pas essayé. Les paquets sont tous tirés des dépôts git ou svn.
S'il y'a dans la salle quelqu'un susceptible de créer le paquet deb de Carla pour rpi, alors ce serait vraiment cool. J'ai essayé... pas pu !
Pour Carla, il faut aussi modifier dans les sources et le Makefile.mk la ligne 68 en :
BASE_OPTS = -O2 -ffast-math -mtune=generic-armv7-a -fdata-sections -ffunction-sections
Avec le téléchargement, c'est déjà fait. Dès que j'ai une solution concernant le noyau RT, je mettrais en ligne une image du système audio rpi3.
Notez aussi que vos retours seront précieux !
Addenda
Pour finir, l'aspect final de l'appareil dans son environnement :
[+]