Bash Session Management

Zo af en toe krijg ik de vraag wat voor session manager ik gebruik om mijn projecten en de daarbijbehorende applicaties en JACK connecties te beheren. Mijn antwoord is dan: Bash. Dus géén Ladish, géén JACK Session en ook géén aj-snapshot maar simpele Bash scripts. Waarom? Omdat ik Bash begrijp en momenteel geen tijd en zin heb om me te verdiepen in nóg een extra tool. Daarnaast is het aantal applicaties dat Ladish en JACK Session ondersteunt echt minimaal.

Maar hoe ziet zo’n Bash script er dan uit? Nou zo:

#!/bin/bash
export SESSION=$HOME/Sessions/moneyorlove.d

hydrogen -s $SESSION/moneyorlove.h2song &
seq24 -j $SESSION/seq24-moneyorlove.midi &
sleep 2
yoshimi -N analoguebass --state=$SESSION/yoshimi-analoguebass.state &
yoshimi -N dubstep --state=$SESSION/yoshimi-dubstep.state &
sleep 2
guitarix -r default -f $SESSION/guitarix_moneyorlove_bass_rc &
sleep 2
amsynth -b $SESSION/moneyorlove.amSynth.presets &
sleep 2
qtractor $SESSION/moneyorlove.qtr &
sleep 3
export SEQ24_BASS_OUT=$(jack_lsp | grep "(capture): Yoshimi Analogue")
export SEQ24_DUBSTEP_OUT=$(jack_lsp | grep "(capture): Yoshimi Dubstep")
export DRONE1=$(jack_lsp | grep "Feedback Drone/out_1")
export DRONE2=$(jack_lsp | grep "Feedback Drone/out_2")
aconnect Hydrogen:1 MPK
jack_connect "$SEQ24_BASS_OUT" yoshimi-analoguebass:midi in
jack_connect "$SEQ24_DUBSTEP_OUT" yoshimi-dubstep:midi in
jack_disconnect "$DRONE1" "system:playback_1"
jack_disconnect "$DRONE2" "system:playback_2"

Ok, wat gebeurt hier?

export SESSION=$HOME/Sessions/moneyorlove.d

Ik maak als eerste een SESSION variable aan met als waarde de directory waar alle benodigde bestanden voor mijn sessie in staan. In mijn home staat een Sessions directory en daar staan alle sessie directories en bijbehorende Bash scripts in. Vervolgens start ik Hydrogen en seq24 op met de parameters om de bijbehorende project bestanden in te laden:

hydrogen -s $SESSION/moneyorlove.h2song &
seq24 -j $SESSION/seq24-moneyorlove.midi &

Daarna laat ik Bash even twee tellen uitrusten

sleep 2

om vervolgens twee instances van Yoshimi (respectievelijke JACK poortnamen analoguebass en dubstep, kun je opgeven met de -N optie) op te starten met de bijbehorende .state bestanden. Je kunt met Yoshimi ook .xmz (parameter) bestanden opslaan, komt bijna op hetzelfde neer.

yoshimi -N analoguebass --state=$SESSION/yoshimi-analoguebass.state &
yoshimi -N dubstep --state=$SESSION/yoshimi-dubstep.state &

Weer even pas op de plaats:

sleep 2

Guitarix opstarten met de standaard instellingen (kun je aanpassen in Guitarix) en een Guitarix state file inladen:

guitarix -r default -f $SESSION/guitarix_moneyorlove_bass_rc &

Bash weer uit laten puffen:

sleep 2

amSynth starten met de juiste .presets file:

amsynth -b $SESSION/moneyorlove.amSynth.presets &

Even wachten…

sleep 2

Qtractor laden en een .qtr sessie file laten openen:

qtractor $SESSION/moneyorlove.qtr &

Hier speel ik een beetje vals want in feite gebruik ik Qtractor voor een deel als session manager. Qtractor slaat in de .qtr sessie file namelijk alle JACK connecties op die naar en van Qtractor gemaakt worden. Nadat Qtractor is gestart laat ik Bash weer even bijkomen:

sleep 3

Aangezien Qtractor dus alleen JACK connecties opslaat van en naar Qtractor moet ik de resterende JACK connecties handmatig aanmaken. Dit doe ik met jack_connect. De benodigde ALSA MIDI connecties die Qtractor niet kan opslaan zet ik op mbv aconnect. Maar eerst moet ik wat poortnamen toewijzen aan variabelen om er zeker van te zijn dat de juiste poorten met elkaar verbonden worden. Hier gebruik ik jack_lsp voor, de CLI JACK tool om een lijstje te genereren van beschikbare JACK poorten, en hier laat ik grep op los om de juiste poorten eruit te pikken.

export SEQ24_BASS_OUT=$(jack_lsp | grep "(capture): Yoshimi Analogue")
export SEQ24_DUBSTEP_OUT=$(jack_lsp | grep "(capture): Yoshimi Dubstep")
export DRONE1=$(jack_lsp | grep "Feedback Drone/out_1")
export DRONE2=$(jack_lsp | grep "Feedback Drone/out_2")

Lest best de JACK connecties die Qtractor niet kan maken:

aconnect Hydrogen:1 MPK
jack_connect "$SEQ24_BASS_OUT" yoshimi-analoguebass:midi in
jack_connect "$SEQ24_DUBSTEP_OUT" yoshimi-dubstep:midi in

En op de valreep nog even wat onnodige poorten disconnecten:

jack_disconnect "$DRONE1" "system:playback_1"
jack_disconnect "$DRONE2" "system:playback_2"

En nu is mijn volledige sessie opgestart en klaar om mee te werken. Twee dingen vallen waarschijnlijk al meteen op: 1. de ampersands (&) en 2. de vele sleep commando’s. Waarom? 1. een ampersand toevoegen aan een commando zorgt ervoor dat het commando op de achtergrond gaat draaien en het script door kan gaan met de volgende regel, oftewel, het script stopt niet om het commando af te wachten, 2. sommige applicaties hebben even tijd nodig om op te starten en het is cruciaal dat als de sessie file van Qtractor ingeladen wordt alle applicaties zijn opgestart zodat Qtractor de JACK connecties kan aanmaken.

Ja, en wat nu als je je sessie af wilt sluiten? Moet je dan alle applicaties handmatig afsluiten? Ja. Maar zo af en toe gebruik ik ook een ‘end-session’ script die alle openstaande audio applicaties killt. Dit kun je ook netjes scripten in je sessie script zelf, zo ver ben echter nog niet en vooralsnog red ik me prima zo. Als ik klaar ben zet ik toch meestal mijn PC uit en het komt zelden voor dat ik tijdens het maken van muziek meerdere sessies na elkaar moet openen.

Bash Session Management

Tranches en Tapeutape

Vorige week eindelijk eens de kans gehad om naar deze twee appjes te kijken. Tranches is een heel simpele maar zeer bruikbare beatslicer, zoals bijv. Smasher. Alleen heeft Smasher geen JACK support en is derhalve niet real-time te gebruiken. Tranches kent die beperkingen niet en maakt het mogelijk om real-time samples op te knippen en af te spelen, ook achterstevoren. De GUI is met FLTK gemaakt dus het appje is superlicht en het werkt dan ook als een speer.

Tapeutape is een ontiegelijke simpele sampler. Heerlijk stukje software. Voor mijn toekomstige projectjes prop ik daar mijn samples in en probeer ik Hydrogen zoveel mogelijk te mijden. Heb gewoon teveel problemen met Hydrogen, sync problemen, crashes, het vreet CPU op mijn netbook en samples toevoegen aan een bestaand project is een heidens karwei omdat Hydrogen de JACK poortnamen nog steeds niet meteen update. Dus dan moet ik eerst een nieuwe instrument aanmaken, dan worden de poortnamen wél geüpdate. Maar vaak crasht Hydrogen dan en kan ik weer opnieuw beginnen. Ook Tapeutape is in FLTK gemaakt dus ook superlicht en niet zo’n zware moloch als het op Qt gebaseerde Hydrogen. Tapeutape nog niet uitgebreid getest dus nog geen idee hoe Tapeutape hiermee omgaat en hoe de software zich houdt.

Tango Studio heeft up to date pakketjes van beide appjes voor Ubuntu 10.04.

Tranches en Tapeutape

Binnenkort phasex-dev Milestone 2?

Was benieuwd of er nog wat activiteit te bespeuren viel bij de PHASEX fork op github. PHASEX is een fijne, bruikbare softsynth waarvan de oorspronkelijke code en site echter van de aardbodem verdwenen zijn. Maar gelukkig is er de PHASEX Development Branch dus de code is niet verloren gegaan en als ik deze reply mag geloven zit er dus zelfs een nieuwe release aan te komen, Milestone 2!

Milestone 2: More bugfixes. Better engine loop and JACK thread sync.
LFO, delay and chorus clock-sync.

Zelf draai ik de laatste git checkout maar die is alweer van december vorig jaar en de JACK sync en clock sync daarvan zijn nog niet optimaal. Nu maar hopen dat Milestone 2 snel gereleased wordt en dat de synchronisatie functionaliteit beter werkt met deze versie. Presets met arpeggios bijvoorbeeld lopen nu nog na verloop van tijd hopeloos uit sync.

Binnenkort phasex-dev Milestone 2?

Android telefoon als MIDI controller

Nog niet zo lang geleden is TouchDAW uitgekomen voor Android. Weliswaar closed source maar het werkt wel erg goed. Beter dan zijn open source concurrent FingerPlay. Na het instellen van de juiste MIDI poorten en Multicasting in TouchDAW en het installeren van QmidiNet op mijn Ubuntu machine heb ik fijn zitten rommelen op mijn telefoon. Als TouchDAW nou ook MMC‘s kan versturen zou ik het morgen al kunnen gebruiken tijdens mijn presentatie om JACK Transport aan te sturen via Qtractor. Toch maar de volledige versie aanschaffen denk ik, de gratis versie verstuurt kennelijk geen MMC’s.

Android telefoon als MIDI controller

Handleidingen geüpdatet

De handleidingen voor het configureren van je systeem en het gebruiken van een FireWire geluidskaart met Ubuntu zijn bijgewerkt en weer up to date. Ik had hier wat feedback op gekregen, waarvoor mijn dank. Ik krijg het idee dat steeds meer mensen muziek beginnen te maken met GNU/Linux en de mogelijkheden ontdekken van JACK en de modulaire Linux audio omgeving. Het kost inderdaad wat tijd om het allemaal onder de knie te krijgen (maar geldt niet hetzelfde voor een Ableton of een Cubase?) maar je krijgt er veel voor terug.

Handleidingen geüpdatet

Akai MPK Mini en Ubuntu

Omdat mijn M-Audio Oxygen8 recentelijk stuk is gegaan had ik een nieuw MIDI keyboardje nodig en uiteindelijk is dat de Akai MPK Mini geworden. Bij de Feedback besteld ook al was ie bij Dirk Witte goedkoper. Maar ik vermoed dat de €79,- die Dirk Witte ervoor vraagt een lokkertje is want uiteraard hebben ze ‘m niet op voorraad. Heb ook nog gekeken naar een M-Audio Oxygen-25 maar die is al een stuk groter en mijn andere M-Audio Oxygen is net stuk gegaan. Music Maniacs in Haarlem biedt deze aan voor een goeie prijs maar na 3 keer gebeld te hebben en ettelijke malen langs te zijn geweest om iedere keer te horen krijgen dat ie niet op voorraad is maar dat ze wel de Axiom-25 hebben liggen heb ik het vermoeden gekregen dat het ook hier een lokkertje betreft. Is er misschien een site voor waar je deze vermoedens kan melden trouwens?

De MPK Mini heeft 25 aanslaggevoelige toetsjes, 8 aanslaggevoelige pads en 8 draaiknoppen. Daarnaast zit er een arpeggiator op, kun je switchen tussen 4 presets en kun je instellen wat voor MIDI boodschappen je de pads en knoppen wilt laten uitsturen, notes of CC’s. Ook zit er een sustain knopje op, kun je de octaafhoogte instellen en heb je de beschikking over twee banks voor je pads. En last but not least een ongedocumenteerde feature die wel heel vet is: MIDI feedback! Oftewel, de MPK Mini reageert op binnenkomende MIDI signalen. Met een beetje slim mappen en configureren kun je zo dus bijvoorbeeld de backlights van je pads synchroon laten oplichten met een pattern in bijvoorbeeld Hydrogen!

De toetsjes vind ik zelf wel een beetje crappy, vooral in vergelijking met toetsen met een standaard grootte, maar om ideetjes snel op te nemen is het goed genoeg. Ook is het apparaat door de kleinere toetsjes veel handiger om mee te nemen en zijn de toetsjes een stuk beter bespeelbaar dan bijvoorbeeld die van de Korg nanoKEY. De pads vind ik persoonlijk lekkerder aanvoelen dan die van de Korg nanoPAD. De draaiknopjes vind ik wat te plomp en niet hoog genoeg. Met bezwete vingertjes grijp je denk ik al snel mis.

De Preset Editor werkt feilloos onder Wine. Presets opslaan, van het apparaat laden of naar het apparaat sturen is geen probleem. Het apparaat zelf werkt ook prima onder Ubuntu, aansluiten met de bijgeleverde USB kabel, JACK/a2jmidid/Yoshimi opstarten, Yoshimi en de MPK Mini MIDI Out aan elkaar knopen en dat is het. Met Hydrogen werkt ie ook prima, je zult wel de noten die de pads uitsturen wat aan moeten passen met de Preset Editor zodat ze overeen komen met de noten waar de verschillende instruments in Hydrogen op reageren. En als je in de instrument settings van Hydrogen het MIDI kanaal (channel) op 1 zet en de noten hetzelfde instelt als de noten waar de instruments op reageren en vervolgens de MIDI Out port van Hydrogen verbindt met de MIDI In poort van de MPK Mini zouden als het goed is de pads op moeten lichten als je het bijbehorende instrument aanklikt in Hydrogen.

Akai MPK Mini en Ubuntu

Frisse start

Eindelijk mijn muziek PC gemigreerd naar Ubuntu 10.04 Lucid Lynx. Van de week is mijn nieuwe geluidskaart binnengekomen (een Focusrite Saffire Pro 40) en Jof van Tango Studio schoot me aan op IRC met de vraag of ik zijn real-time 2.6.33 kernel wilde proberen. Twee goeie redenen om te switchen. Ten eerste omdat ik de Saffire Pro 40 al uitgebreid heb kunnen testen onder 10.04 met mijn eigen FFADO pakketjes en ten tweede omdat ik met de kernel van Tango Studio de beschikking heb over de nouveau drivers voor mijn Nvidia kaart. Ben nu dus niet meer afhankelijk van die closed source drivers van Nvidia die de laatste tijd nogal wat problemen schijnen te geven in combinatie met recentere real-time kernels. Ook heb ik nu geen last meer van de devtmpfs bug die toch niet opgelost gaat worden aangezien de maintainer van de Ubuntu real-time kernel er mee gaat stoppen.

Had nog wel een raar probleempje met JACK. Kreeg iedere keer als ik bijv. Yoshimi of PHASEX opstartte de volgende melding:

ports used in attemped connection are not of the same data type

Dacht eerst dat het misschien aan JACK lag maar na op de LAU mailinglist gevraagd te hebben wat deze melding nou precies betekende had ik al snel een vermoeden dat het waarschijnlijk aan a2jmidid lag. De Saffire Pro 40 doet er namelijk een stuk langer over om op te komen dan de Pro 10 van de band. En met de Pro 10 werkt mijn a2jmidid opstartscriptje wel goed maar met de Pro 40 start a2jmidid op voordat de audio poorten opkomen. Dit heeft als gevolg dat veel applicaties die met de eerst twee beschikbare audio JACK input poorten willen verbinden (normaliter dus ook audio poorten) nu aan de a2jmidid JACK MIDI poorten worden geknoopt (dat zijn immers de als eerste aangemaakte input poorten). Oftewel, de applicatie probeert audio poorten met MIDI poorten te verbinden en vandaar de melding. Mijn opstartscriptje voor a2jmidid ziet er nu als volgt uit:

#!/bin/bash

while [ "$JACK_TEST" != "system" ]
do
JACK_TEST=$(jack_lsp 2>/dev/null | grep -m1 -e "system" | cut -d ":" -f 1)
sleep 2
done

a2jmidid -e &

exit

Werkt weer prima. Kan nog beter uiteraard want QjackCtl blijft nu hangen zo lang de while loop actief is, maar daar vind ik nog wel een elegantere oplossing voor.


Frisse start

ZynAddSubFX/Yoshimi presets

Louigi Verona is bezig een bibliotheek aan te leggen met ZynAddSubFX/Yoshimi presets. Er staan er al een stuk of 30 in maar hopelijk worden dat er snel meer. Mooi dat het zo leeft, en niet alleen op dat vlak. Zowel ZASFX als Yoshimi worden actief onderhouden, Yoshimi in het bijzonder. De ontwikkelaar van Yoshimi is druk bezig met een volledig nieuwe MIDI implementatie waardoor de zgn. MIDI jitter tot een minimum beperkt zou moeten worden. Daarnaast is er een grote kans dat hij de NRPN‘s van ZASFX waarmee je de effecten real-time kan aanpassen gaat vervangen door CC‘s en heeft hij inmiddels wat test-versies geüpload met ondersteuning voor JACK session management.

ZynAddSubFX/Yoshimi presets

Nieuwe FireWire kaart!

Voor de vervangingsronde van de digitalisatiestudio bij mij op het werk hadden we een Focusrite Saffire Pro 24 besteld om cassettes, platen en ander analoog materiaal te digitaliseren. Voorheen ging dit met een Creative kaart maar die kan niet op tegen de kwaliteit van de AD/DA convertors van zo’n Focusrite kaart.

Vorige week is de kaart binnengekomen, alleen is er dus kennelijk door de afdeling inkoop een Pro 40 besteld in plaats van een Pro 24. Voor het digitaliseren van wat LP’tjes is dit natuurlijk enorme overkill. Maar we hebben toch besloten de kaart te houden aangezien het bestellen ervan al zo moeizaam ging en we geen zin hebben om weer een maand op een andere kaart te moeten wachten.

Nu staat er dus een schitterende Pro 40 in de studio. Uiteraard aangesloten op een Ubuntu machine aangezien er al gebruik werd gemaakt van Audacity en dat werkt onder Ubuntu ook prima. De machines zijn ook nagelnieuw trouwens, erg mooie Dell Studio XPS 8100‘s. Ubuntu 10.04 draait er als een speer op (niet anders verwacht van Dell) en met de FFADO svn drivers werkt de Focusrite vlekkeloos tot nog toe.

Wel gelijk een Belkin PCIe FireWire insteekkaart geplaatst in de Studio XPS want ik had zo’n vermoeden dat de onboard controller wel eens niet zou gaan werken. En inderdaad, de Focusrite werd niet herkend als hij aan deze controller hing. Op de Belkin werd de kaart feilloos herkend maar weigerde JACK te starten. Na het uitzetten van de onboard FireWire controller in de BIOS was dat ook opgelost. Heb het systeem flink getweaked en JACK werkt nu echt perfect met de kaart.




Nieuwe FireWire kaart!

Rakarrack Equinox Editie

0.5.8 Equinox is vandaag uitgekomen. Op de langste dag van het jaar, midzomer. Een lichtpuntje in deze triestheid die voor een zomer door moet gaan. Ik was al een tijdje aan het beta-testen en rakarrack is zo’n progje om blij van te worden, vooral met alle nieuwe effecten die de ontwikkelaars erin hebben gepropt. Ben vooral fan van de Arpie en StompBox modules. Ook de Tap Tempo optie is super en de JACK Sync optie is helemaal te gek omdat je op deze manier je effecten kan syncen met allerlei andere programma’s die aan JACK hangen.

https://launchpad.net/~autostatic/+archive/ppa


Pakketjes voor Lucid Lynx staan in mijn PPA.

Rakarrack Equinox Editie