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

Remix is af!

Gisteren tot een uur of één ‘s nachts mee bezig geweest, de kleine was uit logeren bij opa en oma dus kon ik de boel wat beter afmixen op mijn studio monitoren.

The Infinite Repeat – Money or Love (DJ AutoStatic Remix)

Creative Commons Licentie
Money or Love (DJ AutoStatic Remix) van The Infinite Repeat is in licentie gegeven volgens een Creative Commons Naamsvermelding-NietCommercieel-GelijkDelen 3.0 Unported licentie.
Gebaseerd op een werk op theinfiniterepeat.com.

Wat ik zoal heb gebruikt:

  • Yoshimi Analogue Bass met de C* Pre-amp en Crossover Distortion LADSPA plug-ins
  • Yoshimi Dubstep (custom patch), cut-off live gedaan met behulp van een Akai MPK Mini
  • amSynth Synth Strings 1
  • SO-666 Feedback Drone LV2 plug-in
  • WhySynth DragonPurr DSSI plug-in
  • MDA Vocoder LV2 plug-in + Yoshimi Hard Synth
  • Alle gitaren (Fender Tele and OLP Music Man) door Guitarix en de Redwirez IR Library gehaald
  • Aardig wat Calf Compressors en zowat iedere track (ongeveer 20) heeft een verschillende reverb plug-in (TAP, FreeVerb). Daarnaast een aantal Calf Vintage Delays voor de gitaren en de SO-666. En 2 of 3 Calf Phasers. O ja, en de SC3 plug-in om de SO-666 te ‘ducken’ met behulp van sidechain compressie.
  • Meeste drum samples zijn afkomstig uit de sample collectie die bij LMMS zit. Die had ik ook voor het originele nummer gebruikt en heb besloten ze te recyclen. De crashes komen uit de GSCW2 Hydrogen kit.
  • Lest best, er zit een Glockenspiel in de brug ik. Ik wilde eerst de Glockenspiel uit de SSO library gebruiken maar de kwaliteit van die specifieke samples is niet echt fantastisch dus ben naar de oefenruimte gereden en heb de Glockenspiel van onze drummer opgehaald. Mic erop, een AT2020, en gelukkig stond het er snel en goed op.

Voor deze remix heb ik Qtractor als mixer ingezet, Hydrogen als sampler en seq24 als MIDI sequencer voor de softsynths en de samples. In seq24 heb ik ook de automatisering gedaan voor de plug-ins in Qtractor naast wat volume fades en het muten/unmuten van tracks. Mixdown heb ik gedaan met behulp van jack-capture, weer importeren in Qtractor en vervolgens de linuxDSP MBC2 compressor plug-in erover heen geknald met een limiter erachter.

Reacties zijn vooralsnog goed. Vooral zo’n reactie van de ontwikkelaar van Qtractor is natuurlijk geweldig. Volgens mij heb ik de goeie workflow wel te pakken zo. Ik zal proberen er nog een screencast van te maken.

Remix is af!

Remix in de maak II

Het remixen van een oud nummertje van mij loopt toch weer uit de hand. Heb gitaar- en baspartijen op zitten nemen en flink zitten rommelen met het refrein. Het refrein is gewoon al goed van zichzelf maar de onderliggende instrumenten zorgden ervoor dat de som der delen het aandeel van de zanglijn weer teniet deden. In ene schoot me wat te binnen, kreeg het idee dat een dubstep-achtig baslijntje misschien wel heel vet zou zijn. Dus ik mijn Dubstep patch ingeladen, wat aangepast zodat ie lekker wobbelt en inderdaad, het past onwijs goed. De wobble is min of meer een 5/4 wat perfect uitkomt met de triool waarmee de refreinpatronen afsluiten. Flink de cutoff open op die slagen waardoor het een stuk dynamischer is geworden.

De brug heb ik helemaal overnieuw gedaan, vond de gitaarpartij niet overtuigend genoeg. Guitarix heeft me weer versteld doen staan. IR ingeladen uit de Redwirez IR Library in de Convolver, m’n ouwe Tele ingeprikt, wat aan de knoppies zitten draaien en wham, prachtig clean geluid met een heel licht randje waar Line6 of NI Guitar Rig nog een puntje aan kunnen zuigen. Eigenlijk kunnen de twee laatsten alleen achterlijk hard scheuren, leuk voor black metal of iets in die trant, en de effectjes zijn wel goed. Maar guitarix excelleert in de cleane of crunchy geluiden, dus eigenlijk is guitarix een betere buizenbakemulator dan de pocketPOD die ik heb liggen en NI Guitar Rig die ik trouwens jaren geleden voor het laatst een keer heb opgestart, dus hoop voor NI dat Guitar Rig inmiddels wat beter klinkt. Inmiddels is er een nieuwe versie van guitarix, omgedoopt naar gx_head. Nog niet geprobeerd want de ontwikkelaar waarschuwt wel voor backward compatibility problemen dus voor dit projectje hou ik het nog even bij guitarix. Heb de gitaren lekker fel ingespeeld en het geluid benadert aardig het geluid van de originele opname, heb ik destijds ook met mijn Tele ingespeeld over mijn ouwe Teisco buizencombo met Alnico speaker.

Ook het intro is volledig anders. Moet ik nog flink aan schaven maar de basis vind ik beter zo. Heb de synth gitaarpartij uit de coupletten omgezet naar een baspartij en er de geniale SO-666 feedback drone synth overheen gegooid. Flinke sidechain compressie erop zodat het lekker dynamisch zuigt en trekt (ja, het wordt een vuig nummertje, dit soort terminologie is geoorloofd met betrekking tot dit project). Ben er nog niet helemaal uit of die phaser eroverheen moet maar hij suist nu wel heel mooi van de ene naar de andere kant.

De zang in de coupletten heb ik helemaal plat gecompressed zodat deze in de hardere stukken een lekker randje krijgt. De baslijn heb ik geautomatiseerd wat betreft de cutoff en de EQ van de C* tube-preamp plugin die ik heb gebruikt. Het enige waar ik nog voor moet gaan zitten zijn de overgangen. Dat wordt het moeilijkst, geen idee nog welke kant dat op moet qua dynamiek. Ik denk dat ik me moet gaan focussen op de drums aangezien ik daar altijd het meeste moeite mee heb. Is wel leerzaam denk ik.

Het voorlopige mixje hou ik wel nog even voor mezelf, als ik er tevreden genoeg over ben post ik zeker wat. Wil eerst de overgangetjes goed hebben en de balans qua mix is verre van optimaal. Maar tot zover ben ik erg te spreken over het resultaat, maar ook over het werken met seq24. Welkome aanvulling voor mijn workflow.

Remix in de maak II