Audio setup old
Specific notes on my Linux audio workflow.
What do I like to do?
- All controller and keyboard, no mouse interaction
- Live recording and looping of MIDI patterns to a click track
- Generation of MIDI patterns
- Dynamic MIDI routing
- MIDI velocity scale
- MIDI key change
- MIDI scale alteration/filtering
- MIDI chord generation
- MIDI gating
- MIDI apreggiation
- MIDI delay/loop
- Soundfonts and sample bank synthesis
- Drum, bass, pad and lead synthesis
- Audio FX - gating, reverb, delay, distortion, filters, etc.
- Synchronised audio loop capture and loop FX
- Have a system that is expressive enough for both live and studio use
- Have a system that is quick to navigate and configure a workflow in
- Have a system with robust session management
- Ideally touching no Win VST
MIDI control hardware
- Yamaha DJX
- Korg Nanokontrol 2
- Numark DJ2GO
- MIDI to USB adapter for DJX
- QWERTY keyboard to MIDI via midikb
Audio setup
- Audio systems
- ALSA
- PulseAudio - sending PA app outputs to jack sinks
- JACK - jackd 2, multiprocessor, D-Bus enabled
- Cadence - good JACK configuration utility, automatic ALSA/PulseAudio/MIDI bridging
cadence # JACK config and start/stop non-session-manager -- --session-root ~/audio/NSM # same session root directory for all projects # alias the command "nsm" for this, starting in a terminal for output/error messages
Session management
- Non Session Manager
- buggy but works.
- JACKPatch - NSM tool to save JACK patch connections - known to loose configuration when programs crash
- dynamic tiling window manager with i3 layout saving features, automatic session save with i3session
jackpatch # nsm specific util to save and restore jack connections # can occasionally bugs out and lose settings on some systems
From the commandline, in the project directory
aj-snapshot projectname.aj.bak # backup JACK connection snapshot as JACKPatch can lose its memory on a bad crash or accidental NSM entry removal
- Carla
- Can start/stop JACK engine
- Provisional JACK app launcher - buggy, not enough ports can be exposed.
- Catia
Hosts and routing
- Carla - plugin host and graph patcher
- LV2, LASDSPA, DSSI, Linux/Win VST
- plugin tempo sync
- internal/external Patchbay - buggy, no grid
- MIDI automation CC per parameter but no MIDI learn
- no channel strips
- Patchage - JACK/ALSA patchbay - same graph engine as Ingen
- Looks better than Catia, though Carla has an internal rack patchbay view
- Ingen - modular host with internal units and inline LV2 plugins, MIDI learn
- no channel strips
- needs webkitgtk, which doesn't have an Arch binary package and takes more than a day to build
- Qtractor - plugin host and channel routing
- SDI interface is hard to work with
- Ardour - plugin host and channel routing
- very good channels/routing
- no tempo change on JACK Transport tempo change
- Non Mixer - modular mixer with MIDI2OSC learn
- LV2 hosting with falktx fork
- mixer format so automatic channel strips
- interface is slow to work with
- alsa_in/alsa_out - for adding to JACK additional input and output devices beyond the primary sound device
carla # plugin host nsm-proxy patchage -A # GUI patch graph manager, less frustrating than that of Carla # via nsm-proxy for the -A argument to not load ALSA # Ctrl-g to sort, Ctrl-f to fit-to-screen zoom ( nsm-proxy nsm-ingen # via nsm-proxy, hack of sequencer64 script above, copies in a blank project, starts ingen modular host engine and gui # ingen -eg project.ingen ) ( nsm-proxy alsa_out -j "USB Out 1" -d hw:5 -q 1 2>&1 1> /dev/null & nsm-proxy alsa_out -j "USB Out 2" -d hw:6 -q 1 2>&1 1> /dev/null & # additional 2 stereo outputs, USB soundcards for DJ main and headphone )
Live recording and looping of MIDI
Software options:
- sequencer64 - no MIDI record control or MIDI learn
- harmonySEQ - no recording. sequences and LFOs with multiple patterns, MIDI learn for: sequence toggle/one-shot, note/chord/octave change, pattern change, tempo and sequence sync.
- Multi-Arp - ncurses MIDI looper, beta, TUI with typed commands
- Giada - MIDI/audio looper, limited MIDI mapping
nsm-proxy nsm-seq64 # via nsm-proxy, requires an empty midi file # make sure set to jack transport master
- seq64 - beta features
- variset feature (commandline flag) - allows larger set sizes/dimensions
- indep mainwids feature - allows viewing three sets at a time
- seq64 - part/pattern progression layout and switching process
- follows a mostly vertical direction
- how is set play meant to work? move up/down in column feature request? manual.
- follows a mostly vertical direction
- seq64 - MIDI hardware mapping to seq64 MIDI control - see Audio#sequencer64
- start -
- stop - nano stop - cc42
- pause (stop/start toggle) - nano play - cc41
- screen-set up - nano marker > - cc 62
- screen-set down - nano marker < - cc 61
- screen-set play - nano marker set - cc 60
- bpm page down - dj2go left jog - cc#25 - value 127
- bpm page up - dj2go left jog - cc#25 - value 1
- mod thru toggle/on/off -
- mod record -
- mod queue - b4
- mod solo toggle/on/off
- mod replace - c5
- mod snapshot - c#5
- mod group learn - d5
- mod group mute select - d#5
- pattern toggle - 0-31 in sequencer64 - c2 (32)-g4
Key for configuration syntax:
[OPR INV STAT D1 D2min D2max] (toggle / enable / disable), where;
- OPR=on/off
- INV=inverse
- STAT=MIDI status byte(channel ignored)
- D1=data1
- D2min=data2 min
- D2max=data2 max
to redo:
# bpm up: 64 [0 0 0 0 0 0] [1 0 176 24 0 2] [0 0 0 0 0 0] # bpm down: 65 [0 0 0 0 0 0] [1 0 176 24 3 127] [0 0 0 0 0 0] # screen set up: 66 [0 0 0 0 0 0] [1 0 176 62 1 127] [0 0 0 0 0 0] # screen set down: 67 [0 0 0 0 0 0] [1 0 176 61 1 127] [0 0 0 0 0 0] # mod replace: 68 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # mod snapshot: 69 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # mod queue: 70 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # mod gmute: 71 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # mod glearn: 72 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # screen set play: 73 [0 0 0 0 0 0] [1 0 176 60 1 127] [0 0 0 0 0 0] # Extended MIDI controls: # start playback (pause, start, stop): 74 [1 0 176 41 1 127] [0 0 0 0 0 0] [0 0 0 0 0 0] # performance record: 75 [1 0 176 45 1 127] [0 0 0 0 0 0] [0 0 0 0 0 0] # solo (toggle, on, off): 76 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # MIDI THRU (toggle, on, off): 77 [1 0 176 44 1 127] [0 0 0 0 0 0] [0 0 0 0 0 0] # bpm page up: 78 [0 0 0 0 0 0] [1 0 176 25 0 2] [0 0 0 0 0 0] # bpm page down: 79 [0 0 0 0 0 0] [1 0 176 25 3 127] [0 0 0 0 0 0] # reserved for expansion: 80 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # reserved for expansion: 81 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # reserved for expansion: 82 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0] # reserved for expansion: 83 [0 0 0 0 0 0] [0 0 0 0 0 0] [0 0 0 0 0 0]
Kick | Kit | Perc | Bass | Pad | Phrase A 1 | Phrase B 1 | Phrase C 1 |
Kick | Kit | Perc | Bass | Pad | Phrase A 1 | Phrase B 1 | Phrase C 1 |
Kick | Kit | Perc | Bass | Pad | Phrase A 1 | Phrase B 1 | Phrase C 1 |
Kick | Kit | Perc | Bass | Pad | Phrase A 1 | Phrase B 1 | Phrase C 1 |
Channel and output conventions:
- Drums: output 1, channel 10
- Bass: output 2
- Pad: output 3
- Lead: output 4
- midifilter.lv2: MIDI Duplicate Blocker - for live vs. seq64 notes
Generation of MIDI patterns
- MIDI generation tool options
- Euclidean Pattern Generator - Java
- MIDI Agent System - Java
- SoundHelix - Java
- Políssonos - Java
- https://github.com/x37v/pdlv2
See also Audio#Algorithmic / generative
- MIDI generator, related to fractions of bpm
- either momentary or toggled.
- passing beats between parts
- harmonyseq can be used to map MIDI events to one shot or repeating notes/chords/patterns, hard to send the tempo float over osc to....
Dynamic MIDI routing
- a2jmidid - via Cadence, as jackd 2 doesn't do the Metadata API yet so hardware interface names are opaque.
- mididings - filtering, scripting, switching via 'scenes' and MIDI program change messages. m_mididings.py
- jack_midi_dump - MIDI monitor, prints to terminal stdout.
nsm-proxy a2jmidid -eu # because cadence misses -u arg nsm-proxy mididings -f path/to/m_control.py [1] # docs: MIDI routing nsm-proxy livedings -l 56801 -p 56800 -T -f "Sans 22 bold" -F "Sans 22 bold" -w 50 -n "control" nsm-proxy mididings -f path/to/m_drums.py [2] # drum selection. to redo. nsm-proxy livedings -T -f "Sans 22 bold" -F "Sans 22 bold" nsm-proxy xterm -e jack_midi_dump # MIDI monitoring
- toggle between sequencer64 controls and playing notes/chords - e5?
- mididings scene mod between toggle and on and off?
- MIDI controlled MIDI routing/switching using mididings scenes
- find a better workflow
- use cc toggle more? (overtone nanokontrol 2 config?)
- need "if note held, this, else"?
- scenes for
- nano control of seq64 horizontal column level selection?
- delay sends - function key select scene, nano buttons to send, nano rotary for feedback? nano cycle to toggle momentary or toggled send
- gate/lfo sends - function key select scene, nano buttons to send, nano rotary for level, nano cycle to toggle momentary or toggled send
- drum midi receive select, allows one/some/all.
- mididings outputs for ersdrums, drum kit sf, drmr - scenes: ersdrums, kit, drmr, ersdrums+drmr, ersdrums+kit, ersdrums+kit+drmr
- harmonic control
- set the key - kick/bass/synth
- play various kinds of chord progressions - synth
- Piz: midiProgramChange - can be sent to mididings for scene changes
Midi velocity scale
MIDI key transpose
- MIDI Keys Transpose
- MIDI Chromatic Transpose
- midiForceToKey - no GUI
- midiTranspose - no GUI
MIDI scale alteration/filtering
- MIDI Enforce Scale
- Cales - need to apply changes and use presets
- AutoTonic Player - Windows app not VST. no.
- midiScaleChanger - no GUI
- midiBlackKeyFilter
- tonespace
MIDI chord generation
- MIDI Chord / Harmonizer - midifilter.lv2
- tonespace - standalone, VST
- chordemux - Haskell
MIDI gating
- Piz: midiCCToggle - momentary to toggle
- SuperCutSequencer - Cut "On/Off" Sequencer (8 steps with smooth) synced to Midi-Clock Beats and Midi-Clock Start/Stop
MIDI apreggiation/automation
- arpage - MIDI Arpeggiator w/ JACK Transport tempo dync
- QMidiArp - an advanced MIDI arpeggiator, programmable step sequencer and LFO
- Hypercyclic - no Jack Transport sync
MIDI delay/loop
MIDI misc
- MIDI filtering
- midifilter.lv2: ScaleCC - scale CC range sent to delay down for easier time sync length selection
- midifilter.lv2: MIDI Note to CC - note to CC
- MIDI to sort
- midiAlias
- midiDelay
- midiNoteGroups
- midiProbability
- midiSimpleLFO
- midiStrum
- midiSwing
- AudioToCC
Soundfont and sample bank synthesis
For velocity layers: Hydrogen, DrumGizmo, Fabla2, avldrums
- Sampler (live)
- Fabla2
- Samplers (file based)
- samplv1 - one sample, various pitches. effects but no sample editing.
- drumkv1 - many samples, one pitch. effects but no sample editing.
- Sample slicing
- shuriken - file based beat slicer, MIDI controllable, soundfont generator. no MP3.
- freecycle - file based beat slicer
- Soundfont hosts
- Carla - sf2/sfz/gig host (compiled in fluidsynth backend)
- DrMr - Hydrogen kit based sampler, 16 voices - LV2
- DrumGizmo - drumgizmo format
- avldrums.lv2 - self-contained soundfonts; Red Zeppelin stereo, Red Zeppelin multi-out, Black Pearl stereo, Black Pearl multi-out - LV2
- Konfyt - additional soundfont and performance management, uses Carla (fluidsynth) as backend
- SFZero - untested
- Hydrogen - multilayer
Drum synthesis
- Metronome
- Bleep - synth, seq64 clicktrack
- Single drum synth
- KickMaker - kick drum, 4 osc+envelope plus output envelope - Win VST
- TW-Opkicker - kick drum, Win VST
- TW-Percussion1 - 2.5 osc, various presets - Win VST
- Mixed drum synth
- ErsDrums - drum machine, phat, track mono/stereo and stereo out options - Win VST
- KMT2 - 8 voices, individual outs, sensitive controls - Win VST
- Stegosaurus - hard to use, kick: c4, snare: d4, closed hat: e4, open hat: f4 - LV2
- DrumSynth - Linux VST
Bass, pad and lead synthesis
- Synths
- ZynAddSubFX - good, no host temp sync yet - LV2
- ObXd - nice. Oberheim OB-X
- Dexed - Yamaha DX7
- Tyrell N6
- setBfree - A DSP Tonewheel Organ emulator
- Synths w/ host tempo sync
- TAL Noizemak3r - nice - LV2
- triceratops - LV2
- Infamous Cellular Automaton Synth - LV2
- synthv1 - standalone, LV2
- PHASEX - standalone
- basic65 - chip tune - Win VST
- Crystal - pad - Win VST
- Diodow - atmospheric - Win VST
- dlM entropy - Win VST
- TheBlooo, TheScrooo - Win VST
Audio routing
- Audio mixing
- MixerStereoEight - 16 ins and outs, 8 stereo channel control
- AVL Drums Multi out control
- m_mixer_S4toS32 [3] - lv2, 4 stereo to 8 stereo sends each - for fx sends
- AMS Stereo Mixer 8 channels (alsa modular) - lv2, 8 mono to l/r stereo
- AMS Stereo Mixer 2 channels (alsa modular) - lv2, 2 mono to l/r stereo mixdown
- MixerStereoEight - 16 ins and outs, 8 stereo channel control
Used: MixerStereoEight to AMS Stereo Mixer 2 channel
- Audio routing hardware control
- nano2 faders / solos
- dj2go master vol - master vol out
- QWERTY keyboards (main for seq64 and secondary via midikb)
- Mechanism with hotkeys for general mute (+volume?) groups
- drums
- synths
- effects
- Mechanism with hotkeys for effect send trigger/application
- Seq64 patterns for effect automation
- audio level fade change cc pattern
- Visualisation
- x42 Stereo/Frequency Scope
- Ardour channels as hosts has bugs, see section below
Audio FX
- gating, reverb, delay, distortion, filters, etc.
todo:
- box off an fx plugin rack
- delay - cc range filter/alter for fine synced delay time control - tal dub - better plugin for delay time sync (options as spectrum of length, not grouped)?
- gate -
- eq - dj hi/low pass? - dj2go three faders for low mid hi. eq over master out?
- filter -
- autopanner -
- fuck shit up plugin - anarchy rhythms?
- Metronome - seq64 will have one soon
- JVMetro - visual
- something for extended section length
- Reverb
- mverb - lv2
- Tal-Reverb-III - all plate reverbs
- EQ
- x42-eq - LV2
- Lv2fil - Stereo and mono LV2 plugins, four-band parametric equalisers
- HiLoFilter - vst
- Gate
- mda Dynamics - lv2, vst
- GT10QM / GT10QS - lv2
- Gates with host tempo sync:
- SuperCutSequencer - carla doesn't load? - LV2
- dfx skidder - fun but tempo sync doesn't work properly - Win VST
- dlM moot - Win VST
- StormGate1 - Win VST
- dlM gator - meh? - Win VST
- gate3 - meh? - Win VST
- Delays with host tempo sync:
- TAL-Dub-3 - LV2
- Anarchy Rhythms - Win VST
- Calf Vintage Delay, Calf Reverse Delay, ZamDelay (mono), Della (mono), Leet Delay 2 (Win VST), TigerDelay (Win VST), Spaceship Delay (Win VST), PPD Echobox (Win VST), Tapatiki (Win VST), Delazi (Win VST), Rubbadub (Win VST), KR-Delay FS, SoundHack +delay (Win VST)
- Filters
- TAL-Filter-2 (filter) - LV2
- ams-lv2, avw.lv2, Fomp, BLOP
- mda: Re-Psycho! - Drum loop pitch changer, RezFilter - Resonant filter with LFO and envelope follower, Round Panner - 3D panner
- Channelswap, MAutopan, Spectral Autopan
- Ducka (side-chain envelope), ndcTrem+ (tremelo), dlM bent (desync), Masha (beat grinder), dfx buffer override (stutter), dlM thrummaschine (distortion) Kitchen Sync (complex LFO), The Modulator 2 (amplitude/ring/frequency modulation), dlM sfilter (sequenced filter), dlM pfilter (probabalistic filter), dlM manic (glitch sampler), Livecut (glitch), Muchacho (stutter), Phase Seq (glitch), dlM truc/2 (multi), Frakture (multi), Hysteresis (multi)
- kn0ck0ut-LV2 - an LV2 plugin to perform spectral subtraction. It can be used to achieve a wide variety of effects, most notably removing or extracting the center of a two channel audio file. As Kn0ck0ut is only a plugin, you will need a host for LV2 plugins in order to use it, such as Ardour, Qtractor, Ingen, jalv, lv2_jack_host, or lv2file.
- ArtyFX
- rkrlv2
- Pitch shifting:
- talentedhack
- x42-autotune (fat1.lv2)
- TAL-Vocoder
- VocProc
- mod-pitchshifter
- lv2vocoder
- Distortion
- mod-distortion
- gx_vobtb.lv2 - fuzzbox
- deteriorate-lv2
- Deathcrush
- bitfilter.lv2
- bitrot
- Granular
- Argotlunar - tempo sync, multiplatform VST
- grANALiser - Windows VST
- 23_words - Host-synced randomised sample player/modulator. Windows VST
- Muchacha - Applies David Haupt's granulator to clock-synced probability sequencer. Windows VST
- Looping
- SuperBeatRepeater - Carla doesn't see?
- beatslash-lv2
- InstaLooper - vst
- Tempo Sync Reverser
- SooperLooper - larger, proper
- Luppp - Ardour-like
- Compression
- Radium Compressor - over master out
- New Visual Compressor - LV2
Synchronised audio loop capture/FX
Structures
ABAC, etc. with length and intensity as a varying state.
AB either harmonic relation or on/off.
Kick
- 4/4 - variations of
- Swung / offbeat
- Matching bass
Bass
- 8 beats one tone, 8 another
- 64 beats one tone, 64 another
Bugs
(and nitpicks)
- Cannot yet do/use/is annoying
- Session management
- NSM - undeveloped UI, can't delete/move/rename sessions, no delete confirmation, new session/client button confusion, nsm-proxy doesn't save label first time. no jackpatch connection state file save/argument, loses states on bad crash. mostly does its job though..
- i3 - working towards a sound layout save and restore process..
- Carla - plugin state has to be manually loaded, plugin windows need to be manually opened (nsm?) [4]
- Carla - takes a while to close [5]
- Carla - no NSM portability yet [6]
- Routing
- jack2 - lacks Metadata API so no pretty device port names [7]
- Patchage - doesn't auto-refresh when a client changes input/output ports.
- Carla - crashes after a plugin is renamed [8]
- Carla - has a max plugin instantiation limit of 10s, ErsDrums loads only 50% of the time depending on load
- Carla - cannot reorder/group plugins in rack [9]
- MIDI
- MIDI controlled MIDI looping - no software good enough enough yet, would allow live loop of mute and effect changes. seq64 is closest.
- sequencer64 - no MIDI start/stop/arm just yet [10].
- sequencer64 - can't change BPM whilst running yet [11].
- sequencer64 - can't see if text field is active or button is selected (accidental space) in editor window
- Giada - audio/midi looping - problems between nanoKONTROL2s no button off note off CC and parameter scales [12]. fiddly midi control; learn but no 'mod' like sequencer64, i.e., no MIDI 'channel' (sample/sequence) select or channel groups - every item requires unique MIDI CCs and learns for each of it's functions.
- External interactive tempo changes
- klick doesn't do JACK transport and OSC mode (from gtklick) at same time [13]
- Jack Director only has set bpm presets triggerable by midi
- InConcert doesn't take external input or display bpm, crashes often
- DAW
- LMMS - no LinuxVST or LV2 [14]
- Qtractor - doesn't see some VSTs linked by Airwave..
- Qtractor - plugin MIDI ports are exposed through jack "system" block?! name is unuseful "midi_playback_13"
- Qtractor - clicking on a bus option bus not changing it, then clicking another bus prompts to save (no) change
- Qtractor - ERSDrums - on a MIDI track and no audio outs, on a Audio track and no MIDI ins?
- Ardour - can't undo various tasks
- Ardour - "Add New Subgroup Buss" doesn't work
- Ardour - can't create busses in routing page
- Ardour - plugin output channel numbering reversed/whack! (ERSDrums at least)?
- Ardour - no virtual piano to plugin MIDI input for testing
- Ardour - metronome is a fixed pattern, faster would enable quicker beatmatching with external source [15]
- Ardour - no VST tempo sync? :( [16]
- Ardour - no Jack tempo sync! [17] also no MIDI Clock sync [18]
- Ardour or sequencer64 - with seq64 as Jack Transport Masteer, Ardour starts but doesn't use the correct tempo
- Synthesis
- Samples
- petri-foo - broken, always starts from 0 :(
- Shuriken - no mp3 at least until the end of 2017 due to patents [21] [22]
- Shuriken - playback line position becomes incorrect after change to/from Zoom Original scale [23]
- Shuriken - cannot zoom in after enabling or disabling Slice [24]
- Shuriken - sometimes crashes when rearranging samples [25]
- Shuriken - major problems with Export As... feature [26]
- Session management