Audio setup old

From Things and Stuff Wiki
Revision as of 09:36, 6 January 2018 by Milk (talk | contribs) (→‎Software)
Jump to navigation Jump to search



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?

  • Record midi pattern loops live to a click track
  • All controller and keyboard, no mouse interaction
  • 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 banks and 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

TODO:

  • mapping computer keyboard to MIDI keyboard - 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
    • no MIDI learn.
  • Patchage - JACK/ALSA patchbay - same graph engine as Ingen
  • Ingen - modular host with internal units and inline LV2 plugins, MIDI learn
  • Qtractor - plugin host and channel routing.
    • SDI interface is hard to work with
  • Ardour - plugin host and channel routing
    • No tempo change on JACK Transport tempo change
  • Non Mixer - modular mixer with MIDI2OSC learn
  • 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
)

MIDI sequencing / looping

  • 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
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.


  • 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]


seq64 pattern GUI layout:
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

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

MIDI generation

  • 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


  • MIDI automation
    • arpage
    • QMidiArp
    • Hypercyclic
    • BlueARP - Win VST
    • RandARP - Win VST
    • arp4midi - Win VST
    • Malt
    • MIDI Shape Shifter


MIDI tools

  • 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
    • midifilter.lv2: MIDI Duplicate Blocker - for live vs. seq64 notes
    • Piz: midiProgramChange - from the above to mididings for scene changes
    • Piz: midiCCToggle - momentary to toggle


  • MIDI key/scale/tonic alteration
    • midiForceToKey - no GUI
    • midiTranspose - no GUI
    • MIDI Chromatic Transpose
    • MIDI Keys Transpose
    • MIDI Enforce Scale
    • Cales - need to apply changes and use presets
    • AutoTonic Player - Windows app not VST. no.
    • midiScaleChanger - no GUI
    • midiBlackKeyFilter
    • tonespace


  • MIDI chords
    • MIDI Chord
    • tonespace
    • Chordz
    • Chordit
  • MIDI groove
    • Circuit
    • Phase Seq
  • MIDI other
    • MIDI Velocity Adjust
    • midiAlias
    • midiDelay
    • midiNoteGroups
    • midiProbability
    • midiSimpleLFO
    • midiStrum
    • midiSwing
    • midiVelocityScaler
    • AuioToCC


Sample 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

General 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

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


Effects

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

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
      • ZynAddSubFX / Yoshimi - no host tempo sync for lfo/etc. [19] [20]
    • 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]