Linux
en concert

La face cachée

Presenter Notes

Point de départ

  • Instruments acoustiques
  • Loopers
  • Effets

Avec credo de base:

  • L'idée musicale prime sur les possibilités techniques
  • La technique doit être transparente

Presenter Notes

Solution traditionnelle

(Photo: CC-BY-NC Matthew Kraus)

  • Câblage figé!

Presenter Notes

Exemple 1: Greetings from Mumbay

Presenter Notes

Exemple 2: Le consultant de Pachelbel

Presenter Notes

Exemple 3: Ave Maria

Presenter Notes

Solution logicielle

  • Remplacer (en partie) le câblage physique par un câblage logique!

  • Les enjeux: stabilité, faible latence et ergonomie

Presenter Notes

Le matériel

Presenter Notes

IBM Thinkpad x31

  • Acheté en 2003
  • Pentium M 1.4Ghz
  • 768MB RAM

Presenter Notes

Lexicon Omega

  • Interface son 4x2 pistes
  • 2 préamplis (48V)
  • USB 2.0
  • 24bits/48Khz
  • Inserts
  • Interface midi

Presenter Notes

Behringer FCB 1010

  • Pédalier MIDI
  • 10 switches x 10 banques
  • 2 pédales d'expression

Presenter Notes

Divers

Bose L1
(Parfois)

2 X Sennheiser HSP4 1 X Barcus Berry flute mic

2 X Yamaha FC7

... et des câbles!

Presenter Notes

Plate-forme logicielle

Presenter Notes

Système d'exploitation

  • Nombreuses solutions spécialisées basées sur Linux

    • Planet CCRMA/Fedora, Ubuntu Studio, ...
  • Varient en maturité, stabilité, légèreté, mises à jour, ...

  • La plupart sont conçues pour le studio plus que pour le live

  • Choix actuel: Tango Studio

    • Remplacer le noyau low latency par un real time
    • Remplacer Gnome par XFCE

Presenter Notes

"Câblage virtuel": JACK / qjackctl

Presenter Notes

Configurer JACK

  • Génère ~/.jackdrc pour démarrage par
    une autre application

Presenter Notes

Faire de la musique

Presenter Notes

Loopers

  • Live looping sous Linux: SooperLooper, Freewheeling, Kluppe, Giada, ...
  • La seule vraiment utilisable dans notre cas: SooperLooper
    • Très stable
    • Plus de fonctionnalités qu'il n'est possible d'utiliser dans une vie
    • Toutes les fonctions accessibles par MIDI
    • Très simple d'utilisation/programmation

SooperLooper

Presenter Notes

Effets

  • À utiliser avec parcimonie sur du vieux matériel!
  • Rakarrack, guitarix, jack rack, ...

Rakarrack

  • Aucun ne semble aussi mûr que SooperLooper
    dans son domaine

Presenter Notes

Mixage / routage

  • Pas de vraie solution

    • stable
    • pilotable en MIDI
  • Pour l'instant, remplacé par SooperLooper...

Presenter Notes

Let's make music!

  • On a maintenant tout les ingrédients pour y aller
  • Mais avant chaque morceau il faut
    • lancer qjackctl et jack
    • lancer les logiciels musicaux et charger les réglages adéquats
    • connecter les ports audio
    • connecter les ports midi
  • Trop long et trop risqué en concert

Presenter Notes

La sauce

Presenter Notes

Sessions JACK

  • Il existe des gestionnaire de session JACK
    • Jack session, lash, (g)ladish, ...
  • Aucun ne semble vraiment mûr (état fin 2010)
    • Lourd
    • Nécessite un support dans les applications
    • Pas très fiable
    • Semblent plutôt prévus pour le studio

Presenter Notes

La session du pauvre:
Scripts de lancement

#!/bin/bash

cd $(dirname $(readlink -f $0))

sh ~/.jackdrc & 
sleep 1

rakarrack -l Tempura.rkr &
slgui -L bombay2.slsess -m bombay2.slb &
sleep 3

jack_connect system:capture_1 sooperlooper:common_in_1
jack_connect system:capture_2 sooperlooper:common_in_2
jack_connect sooperlooper:common_out_1 system:playback_1
jack_connect sooperlooper:common_out_2 system:playback_1
jack_connect sooperlooper:loop1_out_1 rakarrack:in_1
jack_connect rakarrack:out_1 system:playback_1
aconnect 'Lexicon Omega':0 'sooperlooper':0

zenity --warning --timeout 5 --text='Pédales à zéro!!'
zenity  --notification --text "Click here to end preset"

killall rakarrack
killall sooperlooper
killall slgui
killall jackd

Presenter Notes

Plan de concert

Presenter Notes

Changement de configuration matérielle

  • Grandes salles

    ~$ cat setups/jackdrc.lexicon-only
    /usr/bin/jackd -P70 -dalsa -dhw:1 -r48000 -p64 -n3

  • Petites salles

    ~$ cat setups/jackdrc.lexicon-bose
    /usr/bin/jackd -P70 -dalsa -r48000 -p64 -n3 -D -Chw:Omega
    -Phw:Audio

Presenter Notes

Changer de salle

#!/bin/bash

cd ~

result=$(zenity --list --column 'Setup' `ls setups | sed 's/jackdrc\.//'`)

if [[ "$result" != "" ]]; then {
        cp .jackdrc .jackdrc.bak
        cp setups/jackdrc.$result .jackdrc
}; fi

Presenter Notes

Métronome visuel ;-)

#!/usr/bin/python

import Tkinter
import time
import sys

colors = ['black', 'red']

try:
        speed = int(sys.argv[1])
except:
        print "usage: %s <speed>" % sys.argv[0]
        sys.exit(1)

interv = 60000/speed
cur_color = 0

metro = Tkinter.Label(text='metronome=%d'%speed)
metro.pack()

def tick():
    global cur_color
    cur_color = 1-cur_color
    metro.config(bg=colors[cur_color], fg=colors[1-cur_color])
    metro.after(interv, tick)

tick()
metro.mainloop()

Presenter Notes

Conclusion

Presenter Notes

Avantages

  • Souple
  • Stable
  • Économique en matériel
  • Créativité illimitée

Presenter Notes

Inconvénients

  • Mise en place d'un nouveau preset assez lourde
  • Le changement de preset prend du temps et nécessite une interaction directe avec l'ordinateur
  • Limites avec le matériel actuel
  • Limites des pilotes USB/FireWire
  • Manque une bonne table de mixage virtuelle commandée par midi

Presenter Notes

Perspectives

Changement de preset au pied, sans coupure

  • Réception des messages MIDI
    • PyGame / Mididings / ...
  • Déconnexion/reconnexion sans coupure
    • Possible?
    • Au minimum, ne pas déconnecter quand ce n'est pas nécessaire...
    • ... mais nécessite un mécanisme de suivi!
  • Organisation des fenêtres
    • Devil's pie ou changer de gestionnaire de fenêtres?
  • Rester aussi ergonomique que possible!
    • Pas de changement de preset involontaire...

Presenter Notes

Perspectives - suite

Simplification de la mise en place d'un preset:

Développement d'un DSL pour générer les scripts de lancement?

    L = SooperLooper(my_session, my_bindings)
    E = Rakarrack(my_effect)

    in_1 -> L_1 -> out_1
    in_2 -> L_2 -> out_2

    L[1]_1 -> e_1 -> out_1

    message: 'Pedales à zéro'

Presenter Notes