Loomer Cumulus

Het aantal aanbieders van commerciële plug-ins voor Linux is klein. Heel klein. Het zijn er eigenlijk maar vier, Loomer, LinuxDSP, Pianoteq en DiscoDSP. Daar staat tegenover dat de beschikbare plug-ins van hoge kwaliteit zijn en dat vooral Loomer en LinuxDSP niet onwelwillend staan tegenover verzoeken, vragen en eventuele bugreports vanuit de community. Voor die kwaliteit en servicegerichtheid betaal je wel wat maar alle drie de aanbieders hebben demo’s beschikbaar en Loomer heeft nu ook een magware plug-in uitgebracht, Loomer Cumulus.

De plug-in, beschikbaar als 32 en 64 bits LinuxVST en standalone JACK applicatie, staat op de DVD die bij het blad Computer Music zit. Niet echt freeware dus, je moet het tijdschrift wel eerst aanschaffen, maar Cumulus is zeker de moeite waard om eens uit te proberen. Het is, naast Loomer’s eigen Sequent, de enige goed werkende plug-in voor Linux waarmee je samples kan laden en deze realtime kan bewerken (DiscoDSP’s HighLife is een specifieke sampler maar werkt niet goed). De standalone applicatie werkt prima, met de LinuxVST plug-in heb ik nog wat problemen aangezien Qtractor wat moeite heeft met deze plug-in. Ardour 3, dat inmiddels ook ondersteuning heeft voor LinuxVST’s, doet het beter maar waarschijnlijk komt Cumulus het beste tot zijn recht in software als Renoise.

Het is goed om te zien dat een blad als Computer Music Linux als audio platform serieus begint te nemen. Niet alleen staan er Linux binaries op de DVD maar ook staat er een positieve review van Harrison Mixbus 2 in het laatste nummer van het magazine zelf en staan er Linux demo’s van Mixbus en energyXT op de DVD.

Loomer Cumulus

Nog meer mididings

Mididings script voor 29 oktober is klaar:

#!/usr/bin/python

from mididings import *
from mididings.extra import *

config(
    backend='jack',
    client_name='sodap-live',
    data_offset=0,
)

run(
    Filter(PROGRAM) >> [
        [
            ProgramFilter(0) >> NoteOn(64,50),
            ProgramFilter(7) >> NoteOn(69,86),
            ProgramFilter(0) >> NoteOn(72,60),
            ProgramFilter(1) >> NoteOn(74,62),
            ProgramFilter(2) >> NoteOn(76,64),
            ProgramFilter(3) >> NoteOn(71,30),
            ProgramFilter(7) >> NoteOn(77,88),
            ProgramFilter(8) >> NoteOn(79,96),
            ProgramFilter(9) >> NoteOn(81,84),
        ] >>
        LatchNotes() >> [
            KeyFilter(64) % NoteOff(69,0),
            KeyFilter(69) % NoteOff(64,0),
        ],
        ProgramFilter(4) >> Panic(),
        ProgramFilter(10) >>
        Channel(2) >>
        NoteOn(36,64),
    ]
)

Met dit script kan ik nu de strijkers spelen in Soda P – Icon of your Time en heb een Vibraslap sample van Freesound.org in een soundfontje gezet met Swami zodat ik deze met de FluidSynth DSSI plug-in ook vanuit Qtractor kan triggeren met behulp van de Boss FC-50. De strijkers gaan via het eerste paralelle ‘blok’ waarin Program Changes worden omgezet in Note Ons, daarna gaan ze door de LatchNotes Unit en daarna worden in een genest parallel blok nog twee Note Offs gedefinieerd. Stuurt de FC-50 Program Change 4 uit dan worden alle noten uitgezet (‘Panic’), bij Program Change 10 stuurt mididings een MIDI noot 36 op MIDI kanaal 2 naar Qtractor voor de Vibraslap. Het config deel aan het begin van het script vertelt mididings dat er JACK MIDI poorten aangemaakt moeten worden met als naam ‘sodap-live’. data_offset=0 is nodig omdat de FC-50 bij 0 begint met tellen en niet bij 1.

Nog meer mididings

Pneuman Remix

Vorder maar langzaam met de remix van Pneuman’s Move Along track. Komt vooral door Hydrogen. Goeie sampler, past perfect in m’n workflow maar de tekortkomingen van Hydrogen beginnen me enorm tegen te staan. De irritantste tekortkomingen:

  • JACK transport werkt niet goed, vooral niet icm seq24. Dit ligt hoogstwaarschijnlijk aan seq24 maar dan nog is het hoogst irritant dat Hydrogen vaak gewoon zwijgt zodra je JACK transport start.
  • Toevoegen van nieuwe of het wijzigen van instrumenten is een drama. Ik moet bij het toevoegen van een instrument iedere keer een extra instrument toevoegen anders wordt de poortnaam niet geüpdate. Wat betreft het wijzigen, dan wordt de poortnaam pas gewijzigd na het opnieuw opstarten van de audio engine maar kennelijk op zo’n manier dat JACK er niks mee kan en Hydrogen geen geluid produceert via de hernoemde poorten. Alleen een herstart brengt soelaas maar hoe onhandig is dat.
  • Hydrogen crasht vaak. Vooral met het toevoegen of verwijderen van instruments en als JACK transport loopt kun je maar het beste helemaal niet aan Hydrogen zitten.
  • De sample-editor is fantastisch maar produceert wel ontzettend veel xruns, vooral als je intensief met rubberband aan de slag gaat.

Misschien moet ik de 0.9.6 ontwikkelaarsversie maar eens proberen. De versie die ik nu gebruik beperkt me enorm in m’n productiviteit. En ik heb al niet zo gek veel vrije tijd. Hydrogen is niet de enige applicatie die dwars ligt trouwens. Qtractor knalt er ook regelmatig uit wat waarschijnlijk komt door buggy plug-ins. Ook kan ik de nieuwste versie niet gebruiken omdat de verbeterde VST support iets heeft veranderd aan Qtractor waardoor de MDA JX10 VSTi plug-in die ik gebruik totaal anders klinkt.

Ok, dat is er uit. Heb nog wel wat kunnen doen, heb in ieder geval iets van een coupletje:

Pneuman Remix

Cannot deliver port registration request

M’n Pneuman remix sessie wilde niet meer opstarten, alles deed raar, Qtractor segfaulde, Hydrogen klapte er tijdens het opstarten uit. En ik kon de oorzaak maar niet traceren. Dus dan ga je alles maar één voor één troubleshooten. Uiteindelijk spuugde Hydrogen de volgende melding uit:

Cannot deliver port registration request

Oftewel, Hydrogen vraagt Jack poortjes aan maar krijgt van Jack nul op het orkest. Deze melding nog nooit eerder gezien en Google bracht me ook niet verder. Toch maar even in QjackCtl m’n Jack setup gecheckt. Hmmmm, Port Maximum staat op 256, wat nu als ik deze op 512 zet? Kan het me nauwelijks voorstellen dat ik al zoveel poorten in gebruik heb maar baat het niet dan schaadt het niet. Je raadt het al, sessie start weer moeiteloos op en ik kan weer verder.

Omdat ik toch benieuwd was hoeveel poorten ik nou in gebuik heb met deze sessie heb ik ze even geteld met jack_lsp | wc -l De uitkomst? 258. 258 Jack poortjes in gebuik, net 2 meer dan de Port Maximum van 256 die ik voorheen altijd gebruikte. En het worden er gestaag meer. Gelukkig ben ik gek op spaghetti, zowel analoog als digitaal.

Cannot deliver port registration request

Qtractor en externe MIDI controllers

Maanden geleden een bug gerapporteerd dat bij praktisch elke Qtractor sessie Qtractor op een gegeven moment niet meer reageert op binnenkomende MIDI boodschappen van externe controllers. En kon de oorzaak maar niet vinden en de ontwikkelaar ook niet aangezien hij het probleem niet kon reproduceren.

Totdat Louigi Verona een forumdraadje opende op de site van de ontwikkelaar. Dit was precies hetzelfde probleem waar ik ook tegenaan gelopen was en kennelijk wordt dit probleem getriggered door het niet gebruiken van een specifieke QGtkStyle of het gebruiken van de gtk+ QGtkStyle in Gnome. Met elke andere QGtkStyle, welke je kunt instellen met het qtconfig commando dat in het qt4-qtconfig pakketje zit of op de cli met de -style optie, komt dit probleem niet voor. Ik gebruik nu de -style cleanlooks optie met Qtractor en MIDI verbindingen blijven nu gewoon werken.

Qtractor en externe MIDI controllers

MelloFlute

Afgelopen donderdag weer eens op een podium gestaan met Soda P na twee jaar niet opgetreden te hebben. In het eerste nummer van de set, Not Dead Yet, zit een Optigan en om dit live te kunnen spelen had ik m’n notebook, FireWire geluidskaart en keyboardje mee. Het geluid dat het dichtste in de buurt kwam van de Optigan was een MelloFlute soundfont, alleen ging die niet lager dan G2 en aangezien ik een F2 nodig had heb ik die er met Swami en Rubberband bijgezet. Swami om de G2 sample te exporteren en de soundfont te bewerken, Rubberband om de G2 sample een hele noot omlaag te pitchen naar F2. In Qtractor een project aangemaakt met de FluidSynth DSSI plug-in en uiteindelijk was het op het podium een kwestie van notebook aanzetten, Qtractor opstarten, project inladen en juiste uitgang geluidskaart aansluiten op een DI. Ging perfect. Het optreden ook trouwens.

MelloFlute

TYOQA is aangebroken!

The Year Of Qtractor Automation is aangebroken, oftewel Rui, de ontwikkelaar van Qtractor, is begonnen met het implementeren van automatisering in Qtractor. En het ziet er goed uit, het werkt goed en het voelt goed. Dat laatste klinkt misschien vreemd maar zulke ingrijpende veranderingen aan een applicatie die je bijna dagelijks gebruikt kunnen je ook tegenvallen of je zelfs tegen gaan staan.


text-align: center;

Qtractor hoofdscherm met MIDI track en automatiseringscurve

En op de een of andere manier voelt de manier waarop Rui dit implementeert bijna als vanzelfsprekend. Ik kan er gelijk mee overweg, begrijp hoe het werkt en zie van allerlei mogelijkheden die deze functionaliteit biedt voorbij trekken in m’n hoofd.

Gebruik je net zoals ik Ubuntu Lucid Lynx 10.04 dan heb ik goed nieuws, heb een Qtractor-SVN PPA opgezet waarnaar ik m.b.v. een script nieuwe bronpakketten upload zodra er aanpassingen zijn in de SVN trunk:

#!/bin/bash

MAINDIR=$HOME/PPA/qtractor/daily-builds

SVNREV=$(svn info https://qtractor.svn.sourceforge.net/svnroot/qtractor/trunk
| grep Revision | cut -d " " -f 2)

CURRENTREV=$(cat $MAINDIR/current.rev)

if [ $SVNREV = $CURRENTREV ]
 then echo "Current build is up to date."
 exit
else
 echo $SVNREV | tee $MAINDIR/current.rev

 VERSION=$(svn cat
https://qtractor.svn.sourceforge.net/svnroot/qtractor/trunk/configure.ac
| grep AC_INIT | cut -d " " -f 2 | cut -c 1-8)

 SVNDIR=$MAINDIR/qtractor-$VERSION+svn$SVNREV

 svn co https://qtractor.svn.sourceforge.net/svnroot/qtractor/trunk $SVNDIR

 rm -rf `find $SVNDIR -type d -name .svn && find $SVNDIR -type d -name debian`

 cp -a $MAINDIR/debian $SVNDIR

 cd $SVNDIR

 dch -v "$VERSION+svn$SVNREV-0lucid0~autostatic0"
 "Daily build, Qtractor SVN trunk checkout $SVNREV"

 rsync -av $SVNDIR/debian/changelog $MAINDIR/debian/changelog

 debuild -S -sa -k12345678

 dput ppa:autostatic/qtractor-svn
 $MAINDIR/qtractor_$VERSION+svn$SVNREV-0lucid0~autostatic0_source.changes

fi

TYOQA is aangebroken!

amSynth DSSI plug-in

De ontwikkelversie van amSynth heeft twee extra Makefiles in de broncode zitten waarmee je amSynth ook als DSSI en als (Linux) VST plug-in kan compileren. Vooral de DSSI plug-in leek me interessant dus ben aan het testen gegaan. Na het maken van Ubuntu pakketjes, waarvoor ik wel de DSSI Makefile moest aanpassen, en het installeren van het amsynth-dssi pakketje kon ik zonder problemen de plug-in openen en gebruiken in mijn favoriete host, Qtractor.

Een belangrijke functionaliteit miste wel: het selecteren van bestaande amSynth presets. De meeste DSSI plug-ins kunnen wel presets inladen, dit is ook een belangrijk voordeel van het DSSI plug-in framework, dus heb een feature request gedaan op de amSynth Google code site. En wie schetst mijn verbazing, dit verzoek werd gelijk opgepikt door de ontwikkelaar van amSynth en inmiddels is het mogelijk om met de laatste SVN versie bestaande amSynth presets te selecteren in het Track Properties venster van Qtractor!

text-align: center;

Qtractor Track Properties venster met amSynth DSSI plug-in

Inmiddels zijn mijn DSSI Makefile patch en een patch voor de DSSI plug-in zelf toegevoegd aan de source tree dus de DSSI plug-in in SVN versie laat zich nu heel makkelijk packagen voor Ubuntu, resultaat is terug te vinden in mijn PPA.

amSynth DSSI plug-in

Nieuwe pakketjes in de PPA

Pakketjes gebrouwen van een tweetal nieuwe releases (Qtractor 0.4.9 en QMidiArp 0.4.1) en van de amSynth DSSI plug-in die in de SVN repository van amSynth staat. Ben vooral benieuwd naar QMidiArp, had twee tutorials gevonden op YouTube en daar werd ik nieuwsgierig door want het ziet er zeer veelbelovend uit.


text-align: center;

Hoofdscherm van QMidiArp met een LFO, Sequencer en twee Arpeggiator modules

Nieuwe pakketjes in de PPA

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