New notebook – The day after

Everything seems to work, network, audio, external monitor, display brightness. And this is the first notebook I’ve ever come across to that has a touch pad with an actual real middle click! Love it! Keyboard is nice too, backlight works fine and it has a nice array of function keys that are almost all mapped now. Overall feel of this machine is really nice, aluminum housing and the chiclet keyboard feels stable and solid. Startup time is twice as fast as the BTO. Compared to my new notebook the old one feels strangely completely outdated.

Now what is in there? CPU is an AMD Ryzen 7 7840HS, an 8-core CPU with SMT. Disabled SMT though, Ardour seems to run slightly better on 8 real cores. 32GB of RAM which should be more than enough, my old notebook had 16GB and never had any issues with that. Storage is a 1TB SK hynix BC901 NVMe drive with more than decent throughput. Almost all USB ports sit on their own bus which is quite nice. The only bus that shares its IRQ with something else (the WiFi module) is bus 001. USB ports that use this bus are both the USB-C and USB Type-A connectors closest to the screen. So better not use those.

The only thing that is a bit flaky is the WiFi connection but came across more mentions about that. The connection sometimes randomly reconnects. Can live with it, when making music I often completely disable WiFi. Did have to use systemd automount instead of an fstab entry to mount my NAS as the WiFi connection apparently takes a bit too long to come up.

Didn’t have to tweak a lot so far. As I already mentioned I did disable SMT (Simultaneous Multi-Threading) and I’ve prioritized the IRQ of the USB bus my audio interface sits on. Not with rtirq or udev-rtirq (which doesn’t work properly on this machine, the wrong IRQ seems to get prioritized) but with a small script to fetch the IRQ number that seems to change on every boot and feeding the outcome to chrt. Installed a liquorix kernel on it and enabled threaded IRQ’s, disabled mitigations and USB autosuspend. Also allowed my user to set CPU DMA latency.

BTO vs Lenovo

It’s running Debian 12 with XFCE again. Simple, fast and looks good enough to me with the Greybird theme and elementary icons. And no more notebook that takes off into orbit, the new one is way more quiet.

On with making music!

Edit: the script I threw together could be useful for others too with USB audio interfaces connected to a machine that uses MSI (Message-Signaled Interrupts) enabled USB controllers. You can find the snd_dev_id of your interface with aplay -l.

#!/bin/bash

prio=90
prio_step=5
proc_path=/proc/asound
sys_pci_bus_path=/sys/class/pci_bus
snd_dev_ids=( Babyface2359686 UA25 )

for snd_dev_id in ${snd_dev_ids[@]}; do
  snd_dev_card_number=$(awk '/'$snd_dev_id'/ {print $1}' $proc_path/cards)

  if [ -n "$snd_dev_card_number" ]; then
    snd_dev_card=card$snd_dev_card_number
    snd_dev_pci_bus_ref=$(grep -Eo "usb-[^[:space:],-]+" $proc_path/$snd_dev_card/stream0 | sed "s/usb-\(.*\)/\1/")
    snd_dev_pci_bus_ref_short=$(awk -F ':' '{print $1":"$2}' <<<$snd_dev_pci_bus_ref)
    snd_dev_irq=$(cat $sys_pci_bus_path/$snd_dev_pci_bus_ref_short/device/$snd_dev_pci_bus_ref/irq)
    snd_dev_irq_pid=$(pgrep $snd_dev_irq-xhci)

    chrt -f -p $prio $snd_dev_irq_pid
    
    prio=$((prio-prio_step))
  fi

done
New notebook – The day after

LinuxMusicians Wiki update

Ben de System Configuration pagina van de LinuxMusician Wiki wat aan het bijwerken. Paragraaf toegevoegd over rtirq en het gebruik van het setpci commando voor het instellen van de latency van PCI devices. Verder wat spul geüpdate en wat dode links aangepast of verwijderd. En wat aandacht besteed aan de nieuwe RT patchset voor de 3.0 kernel en de threadirqs boot optie voor kernels >= 2.6.39.

LinuxMusicians Wiki update

LAC2011: Het perspectief van de eindgebruiker

LAC2011 zit er weer op. Zondagochtend vroeg ben ik met de taxi naar Dublin Airport gereden en een paar uur later was ik weer thuis, moe maar voldaan. Helaas heb ik wel de 3e dag van de conferentie moeten missen maar afgelopen maandag was Loutje z’n eerste verjaardag dus wilde vóór maandag terug zijn.

De workshop van zaterdag over mijn workflow ging ook prima. Anderhalf uur is dan best wel kort, heb heel veel niet uit kunnen leggen en achteraf had ik nog wel wat meer willen laten zien. M’n notebook had wel wat moeite met het snel openen en sluiten van applicaties en grote projecten. Liep tegen wat xruns aan, JACK scheidde er een keer mee uit en op een gegeven moment had ik zelfs een complete freeze. Het is dan ook een consumentennotebook en geen uitgebalanceerd apparaat. Vind dat ie het goed gehouden heeft en als je weet hoe het spul allemaal werkt ben je zo weer in de lucht. Die freezes (heb er twee gehad gedurende het weekend) baren me wel zorgen, heb namelijk het vermoeden dat het aan de real-time kernel ligt. Maar ik vind de oorzaak nog wel uit, even goed door de logs spitten als het weer gebeurt.

Jeremy Workshop @ LAC@011
Uitleg over JACK instellingen. Mijn volledige set-up voor de conferentie staat er ook op: HP DV7-1070ED notebook, Focusrite Saffire Pro 10 IO geluidskaart, Akai MPK Mini MIDI controller, een Korg nanoKONTROL MIDI controller en een Shure SM58 microfoon.

De respons was wederom zeer positief. Een aantal mensen vond het verhelderend om nou eens een keer te zien en te horen hoe een eindgebruiker gebruik maakt van alle beschikbare tools en wat zijn perspectief is op het gebruik van Linux audio applicaties. Het merendeel van de conferentiegangers waren ontwikkelaars en die kijken toch anders aan tegen hun eigen projecten of tegen Linux audio in het algemeen. En ook de organisatoren waren erg blij met mijn workshops, niet alleen zijn ze beide integraal opgenomen op video, ook ben ik gevraagd of ik voor LAC2012 wederom een workshop zou willen doen. Hoogstwaarschijnlijk zal LAC2012 in Stanford, Californië plaatsvinden. De afstand zou een beperking kunnen zijn, maar zou heel graag naar Stanford willen om te zien wat Fernando Lopez-Lezcano daar opgezet heeft (de Listening Room draait volledig onder Linux). En het wordt de eerste LAC op het Amerikaanse continent dus de uitgesproken mogelijkheid om contact te maken met de grote hoeveelheid ontwikkelaars en eindgebruikers aldaar.

De aanwezigheid van Rui Nuno Capela tijdens beide workshops vond ik erg bijzonder en ook zeer constructief. Daar waar nodig sprong hij in, hij kent zijn eigen software als geen ander, en zelf kon ik het niet laten om zijn inspanningen te lauweren wat tijdens beide workshops resulteerde in een flink applaus voor de man. Zijn eigen ervaringen heeft hij ook in een blogpost gegoten, ook voor hem waren de workshops bijzonder omdat mijn workflow één van zijn applicaties, Qtractor, als basis heeft en ik het nodige heb verteld over andere belangrijke tools van zijn hand zoals QjackCtl en het rtirq init script.

Binnenkort zet ik beide workshops online, heb de DV tapejes meegekregen, ga ik vandaag capturen en hopelijk lukt het me om ze deze week te editten, te renderen en te uploaden. Verwacht dus binnenkort nog een blogpost over LAC2011.

LAC2011: Het perspectief van de eindgebruiker

Prioriteiten stellen met rtirq

In een vorig blogje had ik al aangegeven dat ik tegen wat problemen aanliep na het aansluiten van mijn Firewire kaart op mijn notebook met Karmic. Na alles goed ingesteld te hebben wilde de kaart wel opstarten met de FFADO drivers maar hield JACK er al snel mee op na de volgende foutmelding uitgespuugd te hebben:

firewire ERR: wait status < 0! (= -1)
DRIVER NT: could not run driver cycle

Zal wel aan mijn onboard Firewire chipset liggen dacht ik, maar ik kon me herinneren dat het wel gewerkt had. En dat kan ik dan niet hebben, waarom zou het met Karmic niet werken en met een oudere versie wel? Dan moet ik weten waar dat aan ligt en ga ik net zo lang zoeken totdat ik dat uitgevogeld heb.

Kort daarvoor had ik een draadje gelezen op het Ubuntu Multimedia Production forum over het rtirq pakketje. Met rtirq kun je in combinatie met de realtime kernel bepaalde zogenaamde ‘tasklets’ prioriteren. Een computer werkt met IRQ’s (interrupt requests) en de IRQ’s worden in Linux geregeld door de interrupt handlers. Hier is een mechanisme voor geschreven (een API) waarmee je met deze interrupt handlers kunt praten. Dit mechanisme heet de tasklet API en de koeriertjes heten dus tasklets. Via de tasklets kun je invloed uitoefenen op de interrupt handlers en dat is precies wat het rtirq pakketje doet.

Wil je met rtirq kunnen werken dan moet je eerst weten welke apparaten welke IRQ’s gebruiken. Met het commando cat /proc/interrupts kun je deze gegevens uitlezen. Op mijn notebook zag ik al meteen wat de oorzaak van mijn foutmelding was: de Firewire chipset deelde zijn IRQ met die van de WiFi chipset. Daarom werkte het in 8.04 wel, toen gebruikte ik nog geen draadloos internet. Na een ifdown eth0 werkte de Firewire kaart dan ook naar behoren. Maar nu ik toch al bezig was met het uitzoeken hoe rtirq te gebruiken ben ik er verder ingedoken om te kijken of ik mijn Karmic installatie op mijn notebook nog verder kon optimaliseren.

Volgens het al eerder aangehaalde forumdraadje moet je na installatie van rtirq een verbeterde versie downloaden van de site van Rui Nuno Capela (de auteur van o.a. QjackCtl en Qtractor) en deze kopiëren naar /etc/init.d/rtirq:

cd ~/Desktop
wget -c http://www.rncbc.org/jack/rtirq-20090920.tar.gz
tar zxvf rtirq-20090920.tar.gz
cd rtirq-20090920
sudo cp rtirq.sh /etc/init.d/rtirq
 

/etc/init.d/ is de directory die je opstartscripts bevatten die gedraaid worden als Ubuntu wordt opgestart, rtirq is dan ook een opstartscript die bepaalde tasklets die belangrijk zijn voor audio productie kan prioriteren. Nu het goeie script is geïnstalleerd kun je de prioritering aanpassen in het bestand /etc/default/rtirq:

sudo gedit /etc/default/rtirq

De regels die aangepast moeten worden zijn de regels die beginnen met RTIRQ_NAME_LIST en RTIRQ_NON_THREADED. Bij mij zien die er nu zo uit:

RTIRQ_NAME_LIST="rtc ohci1394 snd usb i8042"
RTIRQ_NON_THREADED="rtc ohci1394 snd"

Sla het bestand op en sluit gedit af. Na een herstart met de realtime kernel zal dit script uitgevoerd worden en de tasklet die hoort bij de ohci1394 kernelmodule (de algemene Linux Firewire driver) keurig prioriteren zodat deze een stuk stabieler zal draaien omdat de module minder gezeur aan zijn kop krijgt, een soort van top-down management als het ware zeg maar eigenlijk in feite. Je kunt het script ook meteen draaien, vermits je de realtime kernel draait:

sudo /etc/init.d/rtirq start

Kun je ook gelijk zien of je geen foutjes hebt gemaakt, als alles ok is zul je een aantal regels voorbij zien komen die beginnen met “Setting IRQ priorities: start …” en zou je systeem nog stabieler moeten draaien. Ik heb rtirq ook op mijn netbookje geïnstalleerd en daar de onboard geluidskaart voorrang gegeven en dat werkt echt als een speer.

Meer informatie over het prioriteren vind je op de FFADO site.

Prioriteiten stellen met rtirq

Midi events vertalen naar toetscombinaties

PS: Inmiddels weet ik wat meer van MIDI en ben ik erachter gekomen dat Qtractor MMC opdrachten kan verwerken en dat je de nanoKONTROL zo kan programmeren dat de transport knopjes MMC opdrachten versturen. Onderstaand blogje is dan ook niet meer echt relevant.

Harde waren: Korg nanoKONTROL
Zachte waren: Qtractor en nanonoise

Qtractor maakt gebruik van toetscombinaties om bepaalde acties te starten (bijv. transport functies als afspelen, opnemen, terugspoelen) en op mijn nanoKONTROL zitten van die mooie transport knopjes. Maar die sturen een MIDI signaal uit en Qtractor kan heel veel met MIDI maar je kan er dus niet de transport functies binnen Qtractor mee aansturen. Het zou dus mooi zijn als er een programmaatje zou zijn dat MIDI events om zou kunnen zetten naar toetscombinaties. Na een tijdje zoeken kwam ik nanonoise tegen en dat doet precies wat ik wil en bovendien is het nog speciaal voor de nanoKONTROL geschreven ook. Weliswaar genereert nanonoise specifieke toetscombinaties voor gebruik binnen Renoise maar een toetscombinatie is een toetscombinatie dus dat maakt voor Qtractor niet uit. Bovendien kun je in Qtractor toetscombinaties aanpassen via Help – Shortcuts dus je hebt er nog de nodige vrijheid in ook.

Om dit allemaal werkende te krijgen moet je eerst het nanonoise pakketje downloaden en installeren.

nanonoise voor Ubuntu Jaunty Jackalope (64-bits)
nanonoise voor Ubuntu Jaunty Jackalope (32-bits)

Vervolgens sluit je je nanoKONTROL aan, start je achtereenvolgens qjackctl, nanonoise en Qtractor op en knoop je de boel aan elkaar via het Connections knopje:

MIDI to keystrokes

Nu komt even een rotklusje want je moet eerst alle MIDI events mappen in nanonoise door in het nanonoise schermpje rechts te klikken en voor Map MIDI te kiezen en daarna dus even knopje voor knopje en schuifje voor schuifje de boel te mappen:

nanonoise MIDI mapping

Als dat klaar is kun je de toetscombinaties in gaan stellen door weer rechts te klikken en Map Renoise te kiezen.

nanonoise Renoise

Ik heb het als volgt ingesteld:
Rewind: Pattern Sequencer – Navigation – Decrease Pattern Number (toetscombi/-code: Left)
Play: Global – Transport – Play/Stop/Edit (toetscombi/-code: Space)
Fast Forward: Pattern Sequencer – Navigation – Increase Pattern Number (toetscombi/-code: Right)
Loop: Global – Transport – Toggle Loop Pattern (toetscombi/-code: =)
Stop: hetzelfde als Play, Qtractor heeft geen Stop knopje
Record: Global – Transport – Pause/Continue (toetscombi/-code: Shift+Space)

Je kan ook onderstaand config bestandje kopiëren naar het mapje ~/.config/koppi/, dat gaat wellicht sneller.

Qtractor shortcuts

Daarnaast kun je ook nog MIDI events mappen binnen Qtractor. Op deze manier heb ik alle schuifjes en draaiknopjes van de nanoKontrol gemapt zodat ik van de afzonderlijke tracks het volume en de panning kan regelen via de nanoKONTROL. Ook heb ik zo de trigger knopjes gemapt om tracks op Record of Mute te zetten maar dat werkt nog niet optimaal. Ik heb hier een .qtc bestandje van gemaakt dat je in Qtractor kan importeren.

Midi events vertalen naar toetscombinaties