User talk:Hollunder

From ArchWiki

Documentation Concept

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:

  1. Base audio system (jack et. al.)
  2. applications present in the official binary repo
  3. applications present in the archaudio.org binary repo
  4. applications present in the archaudio.org source repo
  5. 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.


Structure:

  1. Some kind of portal, replacement for the proaudio page, reuse content if possible
  2. tagging structure (categories)
    1. Infrastructure: jack, alsa, midi (jackmidi, alsamidi ?)
    2. plugin APIs: ladspa, dssi, lv2, (vst-native, vst-windows?),
    3. kind of application: sequencer, plugin host, synth, ..
    4. ... what else and what exactly?
  3. One page per application (at least for core applications)
    1. Description
    2. link to homepage, manual, tutorials..
    3. own manual/tutorial if external information insufficient
    4. arch specific information
  4. "What needs to be done?"-page

Jack Draft

Part One: Beginners Guide

Who is this Jack? Do I need him?

JACK stands for Jack Audio Connection Kit. It's homepage is http://jackaudio.org/.
It is a soundserver and sits between Applications and hardware drivers (see jack#backends).

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.

Basic Configuration

Show and explain how to get a basic setup that should work for most users. On commandline and in qjackctl

Connections

How to make connections in qjackctl -> connect and in patchage (maybe even brief example on commandline)

Xruns

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?)
    • rt-kernel
    • rtirq
  • usage tricks
    • killing qjackctl without killing jack (move to qjackctl page?)
      • killall qjackctl
      • start jack before qjackctl
  • backends
    • alsa
      • 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
    • oss
    • freebob
    • ffado
    • netjack
  • jack2
    • 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

Other Stuff

Jack Session

status: http://trac.jackaudio.org/wiki/WalkThrough/User/jack_session

Tutorials

http://www.64studio.com/tutorials

http://www.straightedgelinux.com/videoBlender/

Screen Blanking

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:

man xset

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:

xset -q

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

example:

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 to the list, or package one and remove some.

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/jackctl20100528b.py (newer versions might be available, check the parent directory)

jack_midi_clock, get midi clock signal from jack transport - http://www.teuton.org/~gabriel/jack_midi_clock/

jack scrolling scope - http://das.nasophon.de/jack_oscrolloscope/

neat looking sonogram (java app) - http://www.christoph-lauer.de/Homepage/Sonogram.html

autotalentlv2, with midi i/o - http://code.google.com/p/autotalentlv2/

JACK NetSource GUI - http://gtk-apps.org/content/show.php/JACK+NetSource+GUI?content=122327

mverb - http://martineastwood.com/wordpress/?p=180

lv2 version of autotalent - http://code.google.com/p/talentledhack/

connie organ simulator - http://bitbucket.org/horo/connie

check mp3 files for errors - http://jo.ath.cx/soft/mp3check/

catia py2/qt patchbay - git clone git://repo.or.cz/w/cadence.git && make && src/catia.py

ceres spectral audio editor - http://archive.notam02.no/arkiv/src/

control jack transport + clock - http://gjacktransport.sourceforge.net/

mdaEPiano, lv2 - https://github.com/rekado/lv2-mdaEPiano

bigband - http://members.chello.nl/w.boeke/bigband/index.html

jack for an effects framework - http://sourceforge.net/projects/fxjackpack/

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?
  • Further ideas:
    • select only ever Nth port
    • reduce/expand number of ports to connect to -> which logic?
    • use screen width
      • each port could show its connections in the center
<TODO: Example of what it could look like>