Outils pour utilisateurs

Outils du site


acouscousmonium

L'Acouscousmonnium

L'Acouscousmonium est un acousmonium de couscoussier créé en 2017 par Maïa Roger, Julie Honoré et Olivier Baudu. Il fût présenté pour la première fois à Chalon-sur-la-Saône dans le cadre de la PIPPI #7.

L'objectif de cet article est de documenter la construction d'un Acouscousmonium de vingt voies ayant pour finalité la diffusion de vingt instances différentes d'Ibniz à partir d'un même ordinateur.

Ce nouveau projet a démarré en 2020, lors de la résidence collective toulousaine Sønøptic qui a permis la rédaction d'une bonne partie de cette page.

Matériel

Carte son

La solution retenue a été l'achat d'une carte son par instance d'Ibniz. Soit 20 cartes sons USB compatible Linux.

Depuis, avec Pulseaudio, nous avons trouvé le moyen utiliser les deux canaux stéréos d'une même carte son. 10 cartes suffisent donc désormais pour obtenir 20 voies.

Amplificateur

Lors de la résidence collective Sønøptic à Toulouse, différents amplis ont été testés. Il s'est avéré que les PAM8403 offraient, malgré leur faible puissance, une restitution tout à fait acceptable.

Connectique

Logiciel

Jack

Ibniz n'est pas développé avec une version de la libraire SDL qui lui permettrait une prise en charge de Jack (libsdl1.2debian (>= 1.2.11)). Il faudrait pour cela réécrire une partie du code et cette solution n'est pour l'instant pas envisageable. Si Ibniz était compilé avec les dernières versions de SDL il serait théoriquement possible de le faire apparaître dans Jack avec la commande suivante :

SDL_AUDIODRIVER="jack" ibniz

Pipewire

Dans un futur plus ou moins proche, il semblerai qu'une solution avec Pipewire permette de router la sortie audio d'Ibniz vers une sortie physique spécifique d'une carte son.

Mode opératoire :

  • sudo apt-get install pipewire carla
  • Lancer une interface de patchage pour jack avec pw-jack : pw-jack carla
  • Lancer Ibniz : SDL_AUDIODRIVER=“alsa” pw-pulse ibniz
  • Si Ibniz est lancé avec SDL_AUDIODRIVER=pulse il plante et pw-alsa n'existe pas.

Pulseaudio

Il est possible avec Pulseaudio d'attribuer une carte son à une application.

La méthode graphique consiste à lancer l'application, puis, avec Pulseaudio Volume Control de choisir la carte son via un menu déroulant présent dans l'onglet Lecture.

Or, avec 20 cartes son, il est indispensable d'automatiser le processus avec un fichier bash.

Pour cela, on va utiliser la variable d'environnement PULSE_SINK que l'on peut renseigner avec le nom de la carte choisie. Nom que l'on peut récupérer avec cette commande

pactl list sinks | grep Nom
	Nom : alsa_output.pci-0000_00_1f.3.analog-stereo
	Nom : alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo
	Nom : alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo.2

Dans ce cas, la commande pour attribuer une carte son au lancement d'Ibniz serait :

PULSE_SINK=alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo.2 ibniz

Or, la partie “ analog-stereo.2” du nom de la carte dépend du nombre de carte identiques qui sont branchées, pas de la carte elle-même. Si on en branche dix, puis que l'on retire la première, toutes les cartes vont changer de nom. On utilise donc l'index des cartes que l'on récupère avec :

pacmd list-sinks | egrep 'index|name:'
    index: 0
	name: <alsa_output.pci-0000_00_1f.3.analog-stereo>
    index: 1
	name: <alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo>
    index: 2
	name: <alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo.2>

Soit pour la carte d'index 2 :

PULSE_SINK=2 ibniz

Dans la mesure où Ibniz est en mono, nous allons maintenant faire en sorte de pouvoir en ouvrir un sur le canal droit et un autre sur le canal gauche d'une carte donnée (par exemple, celle avec l'index 0). Pour cela nous allons créer deux “périphériques virtuels” utilisant respectivement ses canaux droit et gauche.

pacmd load-module module-remap-sink master=0 sink_name=index_0_left channels=1 channel_map=left
pacmd load-module module-remap-sink master=0 sink_name=index_0_right channels=1 channel_map=right

Si l'on reliste les cartes disponibles on obtient alors :

pacmd list-sinks | egrep 'index|name:'
    index: 0
	name: <alsa_output.pci-0000_00_1f.3.analog-stereo>
    index: 1
	name: <alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo>
    index: 2
	name: <alsa_output.usb-C-Media_Electronics_Inc._USB_PnP_Sound_Device-00.analog-stereo.2>
    index: 3
	name: <index_0_left>
    index: 4
	name: <index_0_right>

Pour avoir un ibniz à gauche et un autre à droite sur la carte d'index 0, il suffit alors de faire :

PULSE_SINK=3 ibniz
PULSE_SINK=4 ibniz

Et où l'on découvre que les 20 cartes son peuvent offrir une diffusion de 40 instances différentes d'Ibniz. Ça tombe bien les 20 amplis PAM que l'on a sont stéréos. J'ai l'impression qu'on est bien parti pour finalement faire un Acouscousmonium de 40 voies.

Version d'IBNIZ

La version d'Ibniz qu'il est prévu d'utiliser pour ce formidable projet est le fork d'Alexandre Guy qui permet de définir la position et la taille de chaque instance, ainsi que de supprimer les bords.

 > git clone https://github.com/alex-guy/IBNIZ.git
 > cd /IBNIZ/src
 > make

Environnement

Afin de faciliter l'utilisation du script bash et du fork d'Ibniz, nous allons créer un dossier bin dans notre dossier personnel et les y placer. Au redémarrage du système, ce dossier sera automatique ajouté au $PATH permettant ainsi d'avoir accès à ces fichiers en console sans avoir à se préoccuper du chemin.

Pour un ajout temporaire du dossier bin :

export PATH=$PATH:$HOME/bin

Nous allons aussi créer un dossier partition dans le dossier personnel de manière à centraliser tous les fichiers qui seront joués par les différentes instances d'Ibniz.

Fichier BASH

En cours d'écriture :

#!/bin/bash
 
###################
## INITALISATION ##
###################
 
# Ferme toutes les instances d'Ibniz ouvertes
killall ibniz
 
# Tue et relance pulseaudio afin d'être sûr de pouvoir 
# attribuer aux cartes son des index à partir de 0
pulseaudio --kill & 
sleep 1
pulseaudio --start --verbose
 
 
#######################
## PARTIE PULSEAUDIO ##
#######################
 
# Récupère le nombre de carte son branchée
NB_CARTE=`pacmd list-sinks | egrep 'index' | wc -l`
 
sleep 3
 
for index in `seq 0 $(($NB_CARTE-1))` # On soustrait 1 du nombre de carte pour pouvoir les compter à partir de 0
    do
        # Sépare chaque périphérique en deux nouveaux périphériques, un pour le canal gauche, l'autre pour le droit
        pacmd load-module module-remap-sink master=$index sink_name=$index-left channels=1 channel_map=left
        echo "index$index-left.... OK"
        pacmd load-module module-remap-sink master=$index sink_name=$index-right channels=1 channel_map=right
        echo -e "index$index-right... OK\n"
        sleep 1
    done
 
##################
## PARTIE IBNIZ ##
##################
 
x_max=1166
y=0
size=200
 
for index in `seq 0 $(($NB_CARTE-1))`
    do
    # Lance les instances d'Ibniz    
        PULSE_SINK=$index-left ibniz -x 0 -y $y -s $size -r &
        PULSE_SINK=$index-right ibniz -x $x_max -y $y -s $size -r &
        y=$(($y+$size))    
    done
 
# pactl list sink-inputs 11 100%

Perspectives

Concevoir un orgue qui, pour chaque touche, déclencherait une instance d'Ibniz associé à un couscoussier.

acouscousmonium.txt · Dernière modification: 2020/11/15 04:52 de 01ivier