Audio setup old
Revision as of 00:38, 7 January 2018 by Milk (talk | contribs) (→Synchronised audio loop capture and loop FX)
Specific notes on my Linux audio workflow.
Hardware
- MIDI control hardware
- Yamaha DJX
- Korg Nanokontrol 2
- Numark DJ2GO
- MIDI to USB adapter for DJX
- QWERTY keyboard to MIDI via midikb
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
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 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....
- MIDI generation tools
- Eckel - euclidean
- Hyperion/HyperCube
- Skunk
- Populus
- Machina
- S-Midi-Random
- Midiball
- BoxySeq
- Políssonos
- https://github.com/x37v/pdlv2
Windows VST:
- Circuit - Circuit's algorithm is designed to create natural feeling rhythms by evening the distribution of beats and rests.
- Phase Seq - easily generates unquantised looping MIDI sequences that are more difficult to achieve in some hosts. Up to eight events are triggered at manually set phase positions and three columns of sliders are dedicated to modulating the position of each trigger by the LFOs.
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 Velocity Adjust
- PIZ midiVelocityScaler
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
- tonespace
- Chordz
- Chordit
MIDI gating
- Piz: midiCCToggle - momentary to toggle
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
- Wollo Drone - pad - Win VST
- 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