Unaware of a Direction

Ben bezig het ideetje van wat blogjes terug verder uit te werken.

The Infinite Repeat – Unaware of a Direction Creative Commons License

Heb de gitaar er nog even uitgelaten en heb zang en bas toegevoegd. Voor de bas heb ik Guitarix gebruikt, machtig modelling programmaatje. Goeie preamp en gain stages en bovendien een zogenaamde convolution engine zodat je met behulp van impulse response bestandjes ook de beschikking hebt over goed klinkende cabinet simulaties. Voor deze opname heb ik een IR bestandje gebruikt van, uiteraard, een Ampeg baskast.

Heb de hele sessie gescript zodat ik met één Bash scriptje de hele boel kan aanroepen, inclusief JACK connecties. Ik zou ook zoiets als Ladish kunnen gebruiken maar dat is weer meer overhead, weer een programma aanleren en bovendien zijn nog niet alle audio apps goed compatibel met Ladish. Daarnaast heb je voor Ladish Jack2 nodig en ik gebruik nog Jack1. Session management onder Linux is sowieso een heet hangijzer op het moment, wacht wel tot de storm is gaan liggen en het sterkste scheepje is blijven drijven. Tot die tijd script ik het zelf wel, hou ik ook volledige controle. En leer ik nog eens wat bij over Bash.

Unaware of a Direction

JACK en GStreamer

Smasher heeft geen support voor JACK dus ben gaan uitzoeken hoe ik Smasher toch zou kunnen gebruiken met JACK. Kwam er al snel achter dat Smasher het GStreamer framework gebruikt om geluid uit te sturen en GStreamer heeft wél support voor JACK (de JACK plugin zit in gst-plugins-bad). Maar hoe kan ik nou GStreamer met JACK laten praten? Daar is het progje gstreamer-properties voor:

gstreamer-properties

Hierboven zie je ook wat je in moet vullen in de verschillende velden. De output van Smasher (maar ook van andere apps die GStreamer gebruiken, zoals Rhythmbox) wordt nu doorgestuurd naar JACK. Nadat ik dit zelf had uitgevogeld kwam ik nog het volgende artikeltje tegen: Setting up Jack Audio for GStreamer, Flash, and VLC

JACK en GStreamer

JACK en Flash

Op mijn muziek PC gebruik ik geen PulseAudio en alleen JACK. Flash kan niks met JACK dus ik kan wel Flash filmpjes bekijken maar dan alleen zonder geluid. Onhandig natuurlijk. Dus een oplossing voor proberen te vinden. Uiteindelijk op drie mogelijke opties uitgekomen:

  1. De PulseAudio modules laden die met JACK kunnen praten.
  2. Libflashsupport-jack compileren en installeren.
  3. De JACK ALSA plugin installeren.

Optie 1 viel af, ik gebruik immers geen PulseAudio. Optie 2 ook want kennelijk is libflashsupport niet echt heel stabiel en bovendien heel beperkt. Dus ben voor optie 3 gegaan, wat me zelf ook wel de elegantste oplossing leek. Het libasound2-plugins pakketje van Ubuntu mist weliswaar de JACK plugin maar een versie met de JACK plugin staat in de PPA van Motin. Deze geïnstalleerd, een werkend .asoundrc bestand gefabriekt  en in mijn homedirectory gezet. Browser herstart, Youtube filmpje aangezet en nu dus mooi wel met geluid via mijn Firewire kaart.

JACK en Flash

Laagst mogelijke latency met USB

Een tijdje terug kwam er een draadje voorbij op de Linux Audio User mailinglijst over wat de laagst mogelijke softwarematige latency zou kunnen zijn. USB geluidskaarten draaien kennelijk het beste met een latency die een veelvoud is van 1ms omdat dat de “interrupt period” van USB apparaten is. Kan zo snel niet vinden wat dat nou precies inhoudt, een “interrupt period”, maar dit verklaart wel waarom er veelal wordt aangeraden om USB geluidskaarten op 48000Hz en een buffer van 3 in te stellen. Hierdoor wordt de latency inderdaad een veelvoud van 1ms. De minimale latency die je op deze manier met een USB geluidskaart zou kunnen bereiken zou dan 4ms moeten zijn (48000 Hz en een buffer van 3 met 64 frames: 64/48000 * 3 = 4ms) want met een frames waarde van 32 zal JACK gaan protesteren. Maar is de waarde 64 voor het aantal frames echt het laagste wat je kunt gaan? Wat nu als je bijvoorbeeld 48 frames gebruikt en een buffer van 2 zodat het rekensommetje 48/48000 * 2 = 2ms wordt? Heb de proef op de som genomen met mijn Edirol UA-25 en inderdaad, het werkt. En nog redelijk stabiel ook. Niet dat het veel zin heeft want wat is nou een verschil van 2ms op de totale latency, maar voor real-time applicaties, zoals effecten op akoestische analoge bronnen, kan het nog van pas komen.

Laagst mogelijke latency met USB

MIDI USB Keyboard gebruiken in Ubuntu

Heb een kort video handleidinkje gemaakt hoe je in Ubuntu een MIDI USB keyboard aan een softsynth kan knopen en deze op YouTube gezet. Als screencast programma heb ik recordMyDesktop uit mijn eigen PPA gebruikt zodat ik de output van zowel mijn mic als de softsynth met recordMyDesktop kon verbinden mbv JACK. De mic output heb ik nog wel even door een lichte galm gegooid via JACK Rack anders klonk het zo droog. De video handleiding is wel in het Engels aangezien ik deze in eerste instantie naar aanleiding van een post op het Ubuntu forum had gemaakt.

MIDI USB Keyboard gebruiken in Ubuntu

JACK in main!

Voor Ubuntu Lucid Lynx zal de JACK sound daemon weer in de main repository worden opgenomen (link). Nu zit JACK nog in universe en dat zorgt voor een hoop ongemak. Daar staat helaas wel tegenover dat er geen real-time patch komt voor de kernel branch die 10.04 gaat gebruiken (2.6.32):

I’m going to switch 31-rt into maintaince mode (with or without he VFS patches) and concentrate on getting .33-rcX-rt out. Yes, there will be no .32-rt. The reason is simply that the locking changes which got merged into .33 are making my life easier and are the base to sort out more ready for the mainline stuff.

Bron: LWN.net

JACK in main!

JACK en meerdere geluidskaarten

JACK kan meerdere geluidskaarten aan, als ze maar dezelfde backend gebruiken (ALSA, FFADO, OSS). Je kan verschillende kaarten instellen voor de in- en output devices maar mocht je meerdere input en/of output devices willen gebruiken, bijvoorbeeld twee verschillende geluidskaarten voor de output tbv monitoring, dan is er de mogelijkheid om dat met de tooltjes alsa_in en alsa_out te doen.

Op mijn Fedora 12 installatie werkt dat prima maar op mijn Ubuntu machines kon ik deze tooltjes niet vinden. Even Googlen en snel de oorzaak achterhaald, kennelijk vergeten ze bij Ubuntu iedere keer JACK te compileren met libsamplerate. Mocht er behoefte aan zijn dan kan ik JACK packagen met de tooltjes die afhankelijk zijn van libsamplerate, zoals alsa_in en alsa_out. Heb wel al Karmic 64-bits pakketjes geüpload.

Een programma waar het tooltje alsa_out van pas zou kunnen komen is Mixxx met JACK als Sound API. Als je Mixxx samen met JACK gebruikt kun je voor je Master en je Headphones kanalen geen verschillende geluidskaarten instellen. Maar als je nadat je JACK hebt opgestart en voordat je Mixxx opstart het volgende terminal commando opgeeft kan dat wel:

alsa_out -j cmedia -d hw:1 -c 2 &

Dit commando is uiteraard wel afhankelijk van de configuratie van je geluidskaarten. Hoe dat ingesteld is kun je oproepen met het terminal commando aplay -l:

[jeremy@werkpc ~]$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Intel [HDA Intel], device 0: AD198x Analog [AD198x Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Intel [HDA Intel], device 1: AD198x Digital [AD198x Digital]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: default [C-Media USB Headphone Set  ], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

ALSA ziet de onboard HDA Intel kaart dus als card 0 (oftewel hw:0) en het ingeplugde C-Media USB geluidskaartje als card 1 (hw:1). Nu wordt het alsa_out commando hierboven ook gelijk duidelijker, als ik dat even snel ontleed staat er eigenlijk het volgende: gebruik device (-d) hw:1 (de C-Media USB geluidskaart) met 2 kanalen (-c 2) en geef deze ‘cmedia’ als naam voor JACK (-j cmedia). Je kunt nog meer instellingen meegeven maar voor dit voorbeeld volstaat bovengenoemd commando. Wat er nu gebeurt is dat er een nieuwe JACK ‘Writable Client/Input Port’ verschijnt in QjackCtl met de naam ‘cmedia’. Als je nu Mixxx opent kun je inderdaad via Options – Preferences – Sound Hardware de verschillende geluidskaarten instellen onder ‘Master’ en ‘Headphones’. ‘Master’ zet je dan op ‘system’ (in mijn geval de onboard HDA Intel) en ‘Headphones’ op ‘cmedia’. Koptelefoon aansluiten op de C-Media stick en stereotoren op de onboard kaart, voilà, monitoring op je koptelefoon en snoeiharde deathmetalitalodisco van Giörgiö Möröder op je stereo.

Al het bovenstaande gaat op voor wat in de wandelgangen wel jack1 wordt genoemd (versie 0.116.x), jack2 (versie 1.9.x, ook wel jackdmp genoemd, mp staat voor multiple processors) heeft deze functionaliteit al ingebakken, dus dan heb je alsa_in en alsa_out niet meer nodig.

JACK en meerdere geluidskaarten

MilkyTracker JACK fix

MilkyTracker bleef iedere keer ergens hangen als ik mijn XM’tjes afspeelde met JACK als driver. Ik wil weer wat gaan trackeren en MilkyTracker is dé open source FastTracker 2 opvolger. Maar na wat googlen kwam ik er achter dat er dus een bug zit in de JACK playback functie. Aan de patch te zien zijn ze één regeltje code vergeten. Heb een nieuw pakketje gemaakt met de patch, staat op mijn Downloads pagina. Heb mijn oude FastTracker handleiding nog liggen, kijken of ik weer eens wat nieuws kan brouwen voor Phonetik Cluster.

MilkyTracker JACK fix