Using the Tascam US-144MKII with Linux

Today I got a Tascam US-144MKII from a colleague because he couldn’t use it anymore with Mac OSX. Apparently this USB2.0 audio interface stopped working on El Capitan. Tascam claims they’re working on a driver but they’re only generating bad publicity with that announcement it seems. So he gave it to me, maybe it would work on Linux.

Tascam US-144MKII
Tascam US-144MKII

First thing I did was plugging it in. The snd_usb_122l module got loaded but that was about it. So much for plug and play. There are reports though that this interface should work so when I got home I started digging a bit deeper. Apparently you have to disable the ehci_hcd USB driver, which is actually the USB2.0 controller driver, and force the US-144MKII to use the uhci_hcd USB1.1 driver instead so that it thinks it’s in USB1.1 mode. This limits the capabilities of the device but my goal for today was to get sound out of this interface, not getting the most out of it.

I quickly found out that on my trusty XPS13 forcing USB1.1 was probably not going to work because it only has USB3.0 ports. So I can disable the ehci_hcd driver but then it seems the xhci_hcd USB3.0 driver takes over. And disabling that driver effectively disables all USB ports. So I grabbed an older notebook with USB2.0 ports and disabled the ehci_hcd driver by unbinding it since it’s not compiled as a module. Unbinding a driver is done by writing the system ID of a device to a so-called unbind file of the driver that is bound to this device. In this case we’re interested in the system ID’s of the devices that use the ehci_hcd driver which can be found in /sys/bus/drivers/ehci-pci/:

# ls /sys/bus/pci/drivers/ehci-pci/
0000:00:1a.7  bind  new_id  remove_id  uevent  unbind
# echo -n "0000:00:1a.7" > /sys/bus/pci/drivers/ehci-pci/unbind

This will unbind the ehci_hcd driver from the device with system ID 0000:00:1a.7 which in this case is an USB2.0 controller.When plugging in the USB interface it now got properly picked up by the system and I was greeted with an active green USB led on the interface as proof.

$ cat /proc/asound/cards
 0 [Intel          ]: HDA-Intel - HDA Intel
                      HDA Intel at 0xf4800000 irq 46
 1 [US122L         ]: USB US-122L - TASCAM US-122L
                      TASCAM US-122L (644:8020 if 0 at 006/002

So ALSA picked it up as a device but it doesn’t show up in the list of sound cards when issuing aplay -l. This is because you have to tell ALSA to talk to the device in a different way then to a normal audio interface. Normally an audio interface can be addressed by using the hw plugin which is the most low-level ALSA plugin that does nothing more than talking to the driver and this is what most applications use, including JACK. The US-144MKII works differently though, its driver snd_usb_122l has to be accessed with the use of the usb_stream plugin which is part of the libasound2-plugins package and that allows you to set a PCM device name that can be used with JACK for instance. This can be done with the following .asoundrc file that you have to create in the root of your home directory:

pcm.us-144mkii {
        type usb_stream
        card "US122L"
}

ctl.us-144mkii {
        type hw
        card "US122L"
}

What we do here is creating a PCM device called us-144mkii and coupling that to the card name we got from cat /proc/asound/cards which is US122L. Of course you can name the PCM device anything you want. Almost all other examples name it usb_stream but that’s a bit confusing because that is the name of the plugin and you’d rather have a name that has some relation to the device you’re using. Also practically all examples use card numbers. But who says that the USB audio interface will always be card 0, or 1. It could also be 2, or 10 if you have 9 other audio interfaces. Other examples work around this by fixing the order of the numbers that get assigned to each available audio interface by adjusting the index parameter for the snd_usb_122l driver. But why do that when ALSA also accepts the name of the card? This also makes thing a lot easier to read, it’s now clear that we are coupling the PCM name us-144mkii to the card named US122L. And we’re avoiding having to edit system-wide settings. The ctl stanza is not strictly necessary but it prevents the following warning when starting JACK:

ALSA lib control.c:953:(snd_ctl_open_noupdate) Invalid CTL us-144mkii
control open "us-144mkii" (No such file or directory)

So with the .asoundrc in place you can try starting JACK:

$ jackd -P85 -t2000 -dalsa -r48000 -p512 -n2 -Cus-144mkii -Pus-144mkii
jackd 0.124.2
Copyright 2001-2009 Paul Davis, Stephane Letz, Jack O'Quinn, Torben Hohn and others.
jackd comes with ABSOLUTELY NO WARRANTY
This is free software, and you are welcome to redistribute it
under certain conditions; see the file COPYING for details

no message buffer overruns
JACK compiled with System V SHM support.
loading driver ..
apparent rate = 48000
creating alsa driver ... us-144mkii|us-144mkii|512|2|48000|0|0|nomon|swmeter|-|32bit
configuring for 48000Hz, period = 512 frames (10.7 ms), buffer = 2 periods
ALSA: final selected sample format for capture: 24bit little-endian in 3bytes format
ALSA: use 2 periods for capture
ALSA: final selected sample format for playback: 24bit little-endian in 3bytes format
ALSA: use 2 periods for playback

This translates to the following settings in QjackCtl:

QjackCtl Settings – Parameters
QjackCtl Settings – Parameters
QjackCtl Settings – Advanced
QjackCtl Settings – Advanced

Don’t expect miracles of this setup. You won’t be able to achieve super low-latencies but at least you can still use your Tascam US-144MKII instead of having to give it away to a colleague.

Using the Tascam US-144MKII with Linux

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

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

Flattr this

Na SpyMaze, Heifs, Twatter en FeestBoek is Flattr (aka PoepSpettr) nu hét ding. Inkomsten genereren door je “things” ge-“flattred” te krijgen, oftewel, kun je iets, doe je iets, maak je iets, zet het op Flattr, stort wat geld in je potje, flattr projecten die jij leuk vindt en hoop dan maar dat anderen jouw projectje (je “thing”) het waard vinden om te flattren.

Heb inmiddels ook een accountje en gelijk een aantal projecten ge-flattred (Qtractor, QjackCtl en a2jmidid). Ook zelf er wat opgezet, namelijk mijn Vocoder video tutorial, en prompt flattren de ontwikkelaars van a2jmidid en Qtractor/QjackCtl mijn tutorial.  Dat is natuurlijk een leuke boost om nog meer video tutorials te maken.

Vooralsnog vind ik Flattr een tof initiatief van de thepiratebay.org mensen. Het is nog wel wat Spartaans en er zijn onderdeeltjes die zeker verbeterd kunnen worden, maar het is wél een hele leuke en dynamische manier om geld te doneren aan de projecten en dingen die jij leuk vindt.

Flattr this

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

Als je het over de duivel hebt…

Trap je ‘m op zijn staart! Vandaag is er dus een nieuwe release beschikbaar van Qtractor, 0.4.3 oftewel Fussy Doula. Zit ik moeilijk te doen met pakketjes te fabrieken voor versie 0.4.2 met checkinstall, heeft de goede man gewoon de hele rambam al kant en klaar staan:

Qtractor 0.4.3 voor Ubuntu Jaunty Jackalope (64-bits)

Librubberband 1.4.0 voor Ubuntu Jaunty Jackalope (64-bits)

Rubberband 1.4.0 voor Ubuntu Jaunty Jackalope (64-bits)

Rubberband-LADSPA 1.4.0 voor Ubuntu Jaunty Jackalope (64-bits)

Misschien maar wat vaker op ctrl+F5 drukken of een RSS feed bookmarken. Heb gelijk wat geld gedoneerd via Sourceforge.

Als je het over de duivel hebt…