- 1 Concept
- 2 Jack Draft
- 3 Other Stuff
- 3.1 Jack Session
- 3.2 Tutorials
- 3.3 Screen Blanking
- 3.4 Want To Know What's compiled Into Your Kernel?
- 3.5 Apps that would be nice to have in AUR and archaudio.org
- 3.6 Rumors and stuff
- 3.7 jack connection dialog idea (possibly using ncurses)
- 3.8 Traverso manual working draft
Concept of wiki documentation accompanying infrastructure and audio applications that are present in binary or source form in the official arch repositories, in AUR and in the archaudio.org repository.
Due to limited workforce documentation focus should be on:
- Base audio system (jack et. al.)
- applications present in the official binary repo
- applications present in the archaudio.org binary repo
- applications present in the archaudio.org source repo
- applications present in AUR
Organisation of information through use of categorization as tagging system (multiple categories per article describing the basic functionality) and extensive use of hyperlinks between articles in the wiki as well as to external pages like manuals and tutorials.
- Some kind of portal, replacement for the proaudio page, reuse content if possible
- tagging structure (categories)
- Infrastructure: jack, alsa, midi (jackmidi, alsamidi ?)
- plugin APIs: ladspa, dssi, lv2, (vst-native, vst-windows?),
- kind of application: sequencer, plugin host, synth, ..
- ... what else and what exactly?
- One page per application (at least for core applications)
- link to homepage, manual, tutorials..
- own manual/tutorial if external information insufficient
- arch specific information
- "What needs to be done?"-page
Part One: Beginners Guide
Who is this Jack? Do I need him?
If all you want to do is listen to music and watch videos you don't need it. It could get into the way or could be useful for special tasks, it all depends on your exact usecase.
Jack is designed with two goals in mind: low-latency and flexible connections.
- Low-latency is especially useful in professional-grade recording applications, to be able to hear what you play or hear without noticeable delay. In this respect jack performs at least as well as similar systems on other operatingsystems.
- Flexible connections is an outstanding possibility that only jack provides. It allows you to route audio output from one application to another to three others to the next two back to anotherone, record it with yet another one and to your speakers. Or so, or any other way you can imagine.
So do you need jack? If you plan on Linux in a recording or audio production environment, be it a professional grade studio or your bedroom, you almost certainly need it to achieve lowest possible latencies and make full use of the available applications. Also the connection possibilities make it a very useful component in many special applications, be it a complicated multi-speaker setup or just for adding some compression and room equalisation when watching movies. The possibilities are there, pretty much all you need is your imagination.
Show and explain how to get a basic setup that should work for most users. On commandline and in qjackctl
How to make connections in qjackctl -> connect and in patchage (maybe even brief example on commandline)
What are they? (Why didn't I have them on Windows/OSX?) What can I do to get rid of them?
Xruns are either buffer-over or buffer-underruns, so basically some part of your audio chain couldn't keep up and data got lost. It's therefor quite essential to avoid them.
You used audio applications on Windows or OSX and never heard of something like that? Be assured that this problem exists there as well, the applications there often just don't tell you what's going on, you just end up with crackling noises in your recordings.
So how do you avoid them? There are many things that can cause them or influence their occurence which in concequence means that there are many things you can try.
Part Two: Additional Information
List of content without order:
- devices by alphanumeric name, cat /proc/asound/cards
0 [UA25 ]: USB-Audio - UA-25 EDIROL UA-25 at usb-0000:00:10.0-2, full speed
the thing in brackets -> UA25 or try 'aplay -l',
- performance tweaks (move these to a dedicated audio system tweaks page?)
- usage tricks
- killing qjackctl without killing jack (move to qjackctl page?)
- killall qjackctl
- start jack before qjackctl
- killing qjackctl without killing jack (move to qjackctl page?)
- additional hardware latency compensation: -I and -O in frames
- alsa_in, alsa_out: can be used to get in-/output on another audio interface to interact with jack. Usage example: alsa_out -dhw:1 -n3 -r48000
- per application portlimit (256, needs change in source)
- jack with dbus and implications
- dbus applications, jack_control
- "JACK_NO_START_SERVER" env variable
timers, hpet, hrtimer
hpet is a very high precission timer available for newer motherboards. Using it might enable better midi timing than using older timers. Jackd can use hpet if run with the options '-c h', but it's not totally clear to me if this improves midi timing and in which cases it improves it.
I couldn't test it since I still have troubles.
How to check whether hpet is available:
$ ls -l /dev/hpet crw-rw---- 1 root root 10, 228 2009-11-10 10:13 /dev/hpet
It seems like you have hpet, but it's not a certainty. I got this through adding hpet=force to the kernel command line:
$ dmesg | grep -i hpet Kernel command line: root=/dev/disk/by-uuid/3e47466f-5ca1-499b-85fc-152074f36364 ro hpet=force pci 0000:00:11.0: Failed to force enable HPET
As you can see, it failed, so hpet isn't available, yet I have /dev/hpet.
I recommend to try:
$ dmesg | grep -i hpet
If hpet isn't enabled it will tell you. If you don't have a BIOS option to enable it, you could try hpet=force, but chances are your mainboard just doesn't have it, as in my case.
/dev/hpet is a userspace interface to hpet, only jack uses it. If you run jack with the option '-c h' you might get a message saying:
This system has no accessible HPET device (Permission Denied)
Which means you need to change the ownership group of /dev/hpet to audio:
(sudo) chgrp audio /dev/hpet
If jack still complains and says: This system has no accessible HPET device (Device or resource busy)
Something is still wrong..
check whether alsa uses hrtimer as default source:
$ zgrep CONFIG_SND_SEQ_HRTIMER_DEFAULT /proc/config.gz CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
This annoys me a lot, and seems to even cause xruns, at least on my laptop. Here's a good resource I found on this: http://www.shallowsky.com/linux/x-screen-blanking.html Theoretically the manpage should help:
However, the syntax is rather strange. This is more or less what should keep the screen from turning off:
xset s off xset 0 0 0 xset -dpms
To query the status of xset:
These settings can be made permanently in xorg.conf, but don't ask me about the syntax. I don't use the xorg.conf and put it into xinit.rc. Actuall, these two lines are likely enough, but I didn't test it:
xset s off xset -dpms
Want To Know What's compiled Into Your Kernel?
zcat /proc/config.gz | $PAGER
zcat /proc/config.gz | grep ACL
Other useful stuff seems to be: zless/zmore
Apps that would be nice to have in AUR and archaudio.org
In most cases simply no-one did package them yet, for various reasons. Often the program is new and not well known, in other cases the packaging would require a significant amount of effort. Have a look at those apps, add new ones, or package one and remove it from the list.
GUI version of some LV2 plugins - http://sourceforge.net/projects/teliasopia/
Note visualization tool - http://clam-project.org/wiki/Chordata_tutorial
Musical midi accompainment - http://www.mellowood.ca/mma/ thanks to elb
LADSPA plugins, probably nice - http://www.studionumbersix.com/foo/
New plugins - http://sourceforge.net/projects/pxu/
Matrix jack connection manager, in early development afaik - http://svn.fuzzle.org/jsweeper/trunk/ thanks to oiata
Genetic algorithm synthesizer, it looks fun - http://www.pawfal.org/Software/fastbreeder/
DAW based on libardour - http://ayyi.org/
DAW with fltk GUI - http://non-daw.tuxfamily.org/ thanks go to hm_b
Mixer with fltk GUI - http://non-mixer.tuxfamily.org/ thanks go to hm_b
Phonetics analysis software - http://www.fon.hum.uva.nl/praat/ thanks to jpate
Audio/Video synthesis/composition tool - http://avsynthesis.blogspot.com/
System for real-time, in-performance sequencing, sampling, and looping - http://gabe.is-a-geek.org/composite/
Converts between jackmidi and CV - http://git.fuzzle.org/cgit/jm2cv.git/
LV2 synth plugin - http://git.fuzzle.org/cgit/psyn/
midi splitter - http://fuzzle.org/~petern/music.html
jackmidi looper - http://fuzzle.org/~petern/mloop.html
jack audio trigger - http://hg.atheme.org/users/daste/users/daste/jack-trigger/
blepvco, three anti-aliased, minBLEP-based, hard-sync-capable oscillator LADSPA plugins - http://www.smbolton.com/linux.html
audio file player with timestretching and pitch shifting - http://www.teuton.org/~gabriel/stretchplayer/ thanks to schivmeister
neilsequencer, fork of the discontinued aldrin tracker - http://sites.google.com/site/neilsequencer/
boodler, soundscape tool - http://boodler.org/ thanks to gt_swagger
conviction, a jconvolver frontend - http://sourceforge.net/projects/conviction/
jack.plumbing, a CLI patchbay - http://slavepianos.org/rd/f/207983/
luaAV, using lua for multimedia - http://lua-av.mat.ucsb.edu/about.html
Foo YC-20, Yamaha YC-20 software synthesizer - http://code.google.com/p/foo-yc20/
rt-tests, a set of tests for the rt kernel - git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
rteval, a test/benchmarking tool for the rt kernel - git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rteval.git
naspro, bridges from LADSPA, DSSI, and more to LV2 - http://naspro.atheme.org/about
vocoder ladspa, fixed version - http://www.nekosynth.co.uk/browser/wip/vocoder/trunk
nama, GUI/TEXT frontend for ecasound - http://ecmdr.infogami.com/
synthclone, sample your synth - http://code.google.com/p/synthclone/
rivendell, radio automation system - http://www.rivendellaudio.org/
tapstart, tap your tempo - http://www.arnoldarts.de/drupal/?q=TapStart
sauditor, sample auditor for jack - http://dis-dot-dat.net/index.cgi?item=/code/sauditor/
spectmorph, analyze samples and create hybrid sounds - http://space.twc.de/~stefan/spectmorph.php
jacksampler, a jack MIDI/AUDIO sampler - http://space.twc.de/~stefan/jacksampler.php
spek, a simple offline spectrum analyzer - http://www.spek-project.org/
JACK NetSource GUI - http://gtk-apps.org/content/show.php/JACK+NetSource+GUI?content=122327
russolo suite, LV2 synth and effect - http://intonarumori.sourceforge.net/
eq10q, 10 band parametric lv2 eq - http://eq10q.sourceforge.net/
jackctl, a cli jack connections manager - http://www.akjmusic.com/software/jackctl20100526.py (newer versions might be available, check the parent directory)
Rumors and stuff
ZynAddSubFX Qt GUI - http://metellius.mine.nu/zynexperimental.png
jack connection dialog idea (possibly using ncurses)
The basic idea is to have a patchbay similar to qjackctl that is fast to work with and works well with a large number of channels. IMHO requiring X is just a burden on such a thing, however, if ncurses is not usable for such a thing then it might be necessary to use some kind of GUI toolkit.
The basic idea is to just have two lists, one left for outputs, one right for inputs. The list should be ordered in a sane way (by name?). There needs to be a way to select a whole block of ports at once. It should then be possible to select an equally sized block on the right side to connect the output block to. In fact, it should be possible to connect the just connected block of output ports to any number of input port blocks. Maybe this should also work the other way around, from inputs to outputs?
My main concern atm.: how to display connections? ascii art? Would it be possible to keep an overview? Would colors help?
<Example of what it could look like>
Traverso manual working draft
Traverso Working Document.
This document is intended as suggested additions to the current manual with the view towards the next release. For the sake of continuity, the next releaee is referred to in this document as Traverso 0.50.0. In this document, the old paragrpah is listed first, followed by a new paragraph with suggested alterations.
Traverso can also connect to the jack soundserver, which provides advanced routing features and zero-latency connections between clients. If you don’t want to use these features and ALSA works for you, there’s no advantage in using jack. We recommend to use qjackctl, which allows to easily setup jack for your system. Start the jack daemon by pressing Start in qjackctl. When it is running, set the driver in Traverso’s configuration dialog (fig. 4.3) to jack and press OK. The menu bar should display jack if the driver was loaded correctly. Now go back to qjackctl and open the Connect dialog. Important: You must set up the connection manually, otherwise you won’t hear any sound. Select the Traverso entry in the left part (“Readable Clients”), and alsa pcm in the right part (“Writable Clients”), then press connect. If a line connecting the two clients is drawn, the sound system is set up correctly.
Traverso can also connect to the jack soundserver, which provides advanced routing features and zero-latency connections between clients. If you don’t want to use these features and ALSA works for you, there’s no advantage in using jack. In Traverso 0.50.0 the internal structre has changed, and this has an impact on the use of the JACK sound server. When creating a new track, the user is presented with a dialog which gives him options to set for the new track.
<picture of track dialog> (4.4)
In the picture (fig. 4.4), you can see the option to set the track name, which type of track you want, either a track, mono or stereo, or a subgroup buss, again mono or stereo. Once you're happy with the parameters you've set, you can either close the dialog, or simply add a new track. When creating a jack port, Traverso automatically creates the input and output busses for that track, with the busses taking the track name, so it's important to get the name right, then hit apply. When a track is created it has a single input and a single output. Both inputs and outputs will show up in your patchbay client (in our demonstrations case, Qjackctl) and you can then route these ports, as for any jack application. You may decide to route your new jack tracks within Traverso, to a subgroup buss, and this can be done by opening the track properties dialog using the key < E > (when the track header is highlighted, for qwerty users), or simply left clicking on the output indicator in the track, to open a list of available output busses the track can be routed to.
<picture of new track properties box, as for a track>(4.5)
In our track properties dialog, we can see quite clearly the input and output buss selectors. The user adds an input from the list, and likewise for the output. Please note that if you wish to connect to a subgroup buss, then it makes sense to create the subgroup buss first, so it appears in your output list for a track, as an option to connect to, otherwise you'll have to open the track properties dialog again, to change the output and repeat this process unnecessarily.
<picture of new track properties bix, for subgroup buss>(4.6) The track properties dialog changes for the creation of subgroup busses. In the pic you can see the inputs selector only contains an add button, not add new. This is because the subgroup buss will accept multiple inputs from existing inputs, usually tracks. The same procedure for creating a subgroup buss applies. Select the inputs you want to route into the subgroup buss, and in the viewable list, they will appear, so you have a quick visual cue of what's being routed to the subgroup buss. Traverso by default connects all tracks to the sheet master, which are in turn automatically connected to the MASTER. To hear sound from your jack track, you will need to ensure that the path from initial track input, to MASTER output is connected correctly for the entire path. Subgroup busses can accept multiple track inputs, so you can route several tracks to that subgroup buss, and have a single output buss. This is also true for the MASTER, where you can connect subgroup busses from any sheet. The MASTER, a "global" project master out, can be seen on all sheets, and this makes it easier to organise your routing without having to switch sheets. As for any jack application, the MASTER out will need to be connected to your playback ports in Qjackctl, so you can hear your sound.
Key actions for qwerty use only.
As well as Traverso's intelligent soft selection mechanism, Traverso now boasts a "qwerty use only" option for users. All actions, commands, and navigation can be manipulated with the qwerty, without using a mouse as all. The mousecursor is replaced by an "Edit Point", a smaller teardrop shaped cursor that sits on the workcursor (WC) to indicate the current vertical position for the user.
< close up picture of the edit point cursors, with a text label for each > (4.7)
At any time, the user can switch his usage from qwerty to mouse and back again, by leftclicking on the mouse (entering mouse use), or moving the WC (which enables qwerty use).
Where possible, Traverso seeks to provide as few keys for the user to remember as possible, and uses a common structure for navigation, and function commonality.
As for the soft function framework, the following is valid:
[ some key ] is a hold function. The user holds this key.
< somekey > is a press once function. The user presses this key and releases it quickly.
Some common keys for qwerty users are as follows:
[ W ] is the workcursor (WC) binding, and is used for all actions and navigation for the workcursor.
[ V ] is the playback cursor (PB) binding, and is used for all actions and navigation for the playback cursor.
[ W ] + < V > means hold W (WC) and press V (PB) once, and release. This action moves the WC to the PB.
[ V ] + < W > is the opposite of the above, and moves the PB to the WC.
[ G ] + Up/down keys. This function adjusts gain, dependent on the layer you are in.
[ P ] + left/right arrows. This function adjust pan, in the track layer.
[ D ] + left/right/up/down arrows. This function enables the movement of a object, dependent on which layer you're in.
[ E ] This function opens a dialog, dependent on which layer you're in. (This function, in the clip layer, enables the movement of clip edges.)
[ F ] + left/right arrows. This function adds and edits fades. (in the clip layer.)
[ N ] This function adds a node in the visible line in curve mode. (In the effects layer.)
< M > Add markers to the timeline ruler.
< CTRL + X > This function splits a clip.
[ SHIFT ] + up/down keys. This function changes the layer you are in.
[ U ] This is the mute function, dependent on which layer you're in. (Toggle)
[ O ] This is the solo function. (Toggle)
[ A ] This is the track record arm/disarm function. (Toggle)
F2 This is the action for enabling curve mode. (F1 disables curve mode)
F5 This is the action for opening the plugin dialog. (Applicable for track and clip layers, dependent on which is the active layer)
< SPACE > playback/stop. (Toggle)
< CTRL + SPACE > Commences recording.
< DELETE > Deletes selected objects.
The arrow keys are your directional navigation keys, and as one would expect, left goes left, and right goes right. Up goes up and down goes down.
Depending on the task you are intending to perform, the speed of movement of the WC and PB can be adjusted on the fly. This is achieved with the qwerty number keys, the page up/down keys, or the numpad keys. the number 0 represents the slowest speed, and 7 is the fastest. As an example, you want to move your PB quite some distance to the right of where you are, and you want to get there quickly. [ V ] is the PB key, and is held down. The user can set the speed they want the PB to travel at, so let's use numpad 7, and then tap or hold the right arrow. The PB moves across the screen quickly. When we arrive near our intended destination, we want to slow down a bit to make the PB stop in the right place. We can do this on the fly, and while the [ V ] is still held down, and the arrow is still pressed, we tap the 2 key on the numpad, and the cursor speed slows considerably.
The speed change mechanism is called Varispeed, and is applicable to functions requiring the ability to move long distances quickly, or make very fine movement adjustments.
An example is using the WC to add and adjust fade lengths in a clip. The user moves the WC to a clip, and the edit point appears in the exact centre of that clip. Now he or shoe wants to add a fade to left and right of the clip. Using the arrow keys left/right, the user simply nudges the WC to the left or right of the centre, and then presses and holds the [ F ] key. If the user is adding and adjusting the left fade (fade in), he will set a fairly slow speed (numpad 2 for example) and tap or hold the right arrow key. The fade appears, and can be adjusted to suit. The user might then want to add and adjust a fade out, on the right of the clip. He moves the WC to the right of the clip centre, and holding [ F ], taps or holds the left arrow, adjusting to suit. (once the fade is created, left and right arrows on either end of the clip move the fade size, and the fade can be reduced to nothing if the user wishes.)
For any function that accepts a speed change, varispeed can be adjusted on the fly or before the event.
There are some basic tools and edit functions that users expect to use, and for qwerty users, some of these are as follows:
[ C ] + < L/R/U/D arrows > This is the copy function. The user selects a clip with the Edit Point, presses and holds [ C ], and presses the arrows key for the direction he wants to move the copy of the clip. (If the user taps a Varispeed number first, he can control the speed of this function.) ASssuming as an example the user wants to copy a clip to the track below the current clip position, then he would use [ C ] + down arrow, to perform this event.
[ D ] + < L/R/U/D arrows > This is the move function. The user selects the clip he wants to move, presses and holds [ D ] + the arrow key for the direction he wants to move the clip. This function uses Varispeed, to control the speed of movement.
L/R/U/D arrows. By default, the arrows keys, on their own, move the WC/Edit Point. This function uses Varispeed.
Traverso's screen is built in layers, and these are, the track layer, the clip layer, and the effects layer. The Edit Point cursor has a letter in it, defining the layer you are in, so the Track layer has a T, the clip layer has a C, and the effects layer has an F. The user can navigate the layers with [ SHIFT ] + Up/Down arrow keys. (See Fig. 4.7)
The track layer, denoted with an Edit Point "T" cursor, allows the Edit Point to move up and down, or left and right, across the screen. It ignores clips, and simply traverses strictly by track (and this is a Varispeed function). In this layer, the functions for all track based events can be used and modified. An example is the track properties dialog. The user presses < E >, and the track properties dialog opens. Another example is changing the gain of a track, holding the [ G ] and using the up/down arrows to raise or lower the gain. Track pan is changed here too, holding the [ P ] and using left/right arrows to move the pan left or right.
The clip layer, "above" the Track layer, denoted with an Edit Point "C" cursor, move the Edit point by clip, up and down, or left and right. The Edit Point will jump to the exact centre of each clip (and this is a varispeed function). For all your clip related functions, including moving, copying, and editing, this is the layer that enables all those functions. The first example is changing the gain of a clip, which is performed with the [ G ] + up/down arrow keys. The second is opening the clip parameters dialog, which is performed with the < E > key. The third is the [ E ] key as a hold function, which enables you move the edges of the clip, left or right, after you've moved the WC to the left or right of centre.
Note the commonality of functions with the track layer. The layer currently selected determines which common set of functions apply to which layer.
The effects layer, "above" the clip layer, denoted with an Edit Point "F" cursor, enables further editing functions and effects, for the clip. An example is pressing F2 and entering curve mode (F1 to exit), which displays the gain curve for the clip, and enables the user to add nodes ( < N > ) to the curve, which can then be cycled through (left and right arrows), and moved up and down or left and right ( [ D ] + L/R/U/D arrows ), changing the shape of the gain curve according to user's wishes.