Document: | Eureka Sampler / DAW
Author: | bsp
Date: | 26-May-2026

# 1 About

"Eureka" is a sampler, synth, plugin host, and multi-track recorder designed for low latency audio.
It is the audio companion app to the MIDI-only "Synergy" sequencer.

# 2 Table of Contents

# 3 Features

- arbitrary number of instrument tracks
  - arbitrary number of lanes per track
  - alternative MPE, lane-per-channel (LPC), voice-round-robin (VRR), drum pad sampler (drum kit), and timeline modes
  - side chain inputs
  - mid / side processing
  - routing between lanes, tracks and outputs
    - arbitrary number of outputs per track and lane
  - track mod matrix
    - for modulating module parameters via MIDI
    - cubic bezier curve note velocity, pitchbend, pressure, and CC / RPN / NRPN controller shaping
    - note and velocity range filters
    - continuous controller filters
- built-in lane modules
  - sampler
  - delay
  - gain / pan / stereowidth
  - 3-band equalizer
  - mid / side conversion
  - (cross-track) sync (+- 100ms)
  - Audio to MIDI RPN
  - MIDI RPN to Audio
  - Gate to Audio
  - Idle detection
  - CLAP plugin (plugin database)
  - VST2 plugin
  - STFX plugin
- sampler
  - arbitrary number of instances
  - arbitrary number of samples
    - stored as `.wav` + `.esa` files
    - (optional) YAML export for Rossum-Electro Assimil8or eurorack sampler
      - set `b_write_yml_project = true;` to enable this (see `eureka_config.tks`)
  - up to 32 sample namespaces
    - e.g. for separating audio clips and drum kits from regular samples
  - seamless sample switching
    - via MIDI program change or RPN
  - extensive (per voice) mod matrix
    - up to 16 entries per sample zone
    - up to 16 matrix variations per sample zone
    - 207 sources
    - 213 destinations
    - log / lin / exp curve per entry
    - slew per entry
      - can also be used to generate attack / decay mini-envelopes
    - 4 per-voice scratch registers
    - 4 per-samplebank global registers
    - 13 op modes per entry (add, mul, replace, blend, compare, step, ..)
    - support for 14 bit hi-res continuous controllers (CCs)
      - modwheel (CC#1), breath control (CC#2), foot control (CC#4), expression (CC#11)
  - arbitrary number of zones (layers) per sample
    - mono or stereo
    - note, velocity, modulation (e.g. modwheel) filters
    - "alt" groups
    - "mutex" groups
  - up to 32 voice buses
    - for routing audio between sample zones
    - sample zone cross modulation (RM, AM, FM, ..)
  - arbitrary number of sample loops per zone
    - pitch or time based number of repeats
    - oneshot, forward, backward, pingpong, xfade loop modes
    - loops can be selected and switched via MIDI and mod matrix
    - modulatable granular/overlap loops
  - monophonic and polyphonic glide
    - time or pitch based
    - separate up / down settings
    - sample / envelope / LFO / modseq legato retrig settings
    - free-running sample option
  - 1D / 2D wavetables
    - static cycle length (2..4096 frames)
    - dynamic, pitch-dependent cycle length ("lo-fi timestretch")
  - additive (re-)synthesis
    - up to 256 partials
    - configurable stereo spread
    - up to 8 realtime-interpolatable resynthesis parameter sets
    - partial bit and sample rate reduction
    - conversion to regular wavetables (export to sample clipboard)
  - 4x3 ASR cubic bezier envelopes per voice
    - modulatable attack / decay+sustain / release speeds and levels
    - loopable sustain section
  - 4 LFOs per voice
    - sine / saw up+down / triangle / pulse / noise shapes
    - configurable start phase (fixed or random)
    - delay and fade-in
    - oneshot and loop modes
    - global or per-voice
  - 4 mod sequencers per voice
    - oneshot and loop modes
    - slew
    - forward, backward, pingpong, random, random(no repeat) play modes
    - time, note on, note off, mod rise / fall / edge / zcross step modes
    - up to 16 patterns, selectable via MIDI / mod matrix
  - MIDI or threshold triggered sampling
    - polyphonization of monophonic (oscillator) sound sources
      - update rate is ~300Hz
  - sample start and loop point modulation
    - random, velocity-based, and / or mod matrix controlled
    - snap to zero-crossing (optionally)
  - per-sample-frame volume and pitch interpolation
  - volume ramping (fade in and out)
  - sample and bit rate reduction
  - linear, Lancsoz and variable-sample-rate (VSR) interpolation modes
  - configurable anti-aliasing / anti-imaging filter
  - voice calibration tables
    - for (subtle) voice modulation
    - up to 6 lanes
  - microtuning
    - import `.scl` and `.tun` files
  - per-voice plugins
    - free and open source STFX plugin format
    - filters, waveshapers, ring-modulation, distortion, oscillators, ..
    - sample FM (sample read-rate modulation, `SR` plugin destination)
    - sample AM (amplitude modulation, `AM` plugin destination)
    - envelopes / modulation (`VM1`..`VM8` plugin destinations)
  - Cycle software modular
    - "offline" sample synthesis
    - can also generate native code / realtime STFX voice plugins
  - procedural mono+stereo track rendering
    - zero disk space audio clips
    - can also be used for generating multi-samples
- sample editor
  - cut / copy / paste / trim / fade-in+out / crossfade / invert / reverse / normalize / declick / ..
  - high quality resampling and other effects via SoX
  - time stretching / pitch shifting via Rubberband
  - undo / redo
  - snap to zero crossings or quarter notes (BPM based)
  - automatic region detection
  - automatic pitch detection
  - automatic loop point detection
  - `.wav`, `.8svx`, `.aiff`, `.aiffc`, `.au`, `.caf`, `.cdda`, `.cdr`, `.flac`, `.ogg`, `.opus`, `.sds`, `.txw`, `.voc`, `.w64` import
- sample import from field recorders
  - audition sample (regions) via keyboard or MIDI
    - oneshot or loop playback
  - copy selected samples to local folder
  - tested with Zoom H4n pro and Tascam DR-05x
- instrument and effect plugin host
  - CLAP (Windows, macOS, Linux(todo: editor UIs))
  - VST2 (Windows, macOS, Linux(todo: editor UIs))
  - STFX (Windows, macOS, Linux)
  - plugin browser(s)
  - patch browser(s)
    - import / export `.clp` (CLAP)
    - import / export `.fxp` / `.fxb` (VST2)
  - generic parameter editors with filterable parameter selection
    - in addition to plugin editor UIs
  - up to 32 MIDI-controllable parameter sets per module instance
    - abs and smooth interpolation modes
    - up to 5 parameter set groups per track
- multi-core rendering
  - automatic or explicit track CPU core assignment
- multi-track stem recording
  - `.wav` export
  - recorded audio (regions) can immediately be played via MIDI
    - "live capture" mode: record+autotrim incoming audio
  - various options for creating new multi-samples from recorded audio
- multi-track timeline editor
  - `Timeline` track mode
    - arbitrary number of simultaneous timelines (one per track)
  - up to 128 MIDI-program-changeable variations per timeline
    - e.g. for splitting larger timelines into sections which are then arranged in Synergy
    - or for switching audio timelines in a live performance
- (not released, yet): stand-alone player library
  - up to 256 tracks
  - supports (almost) every sampler feature
  - supports procedural samples (Cycle)
  - supports (custom) STFX voice and track plugins

# 4 Prerequisites

Hardware:

- a PC running Windows 10 or higher
- or a PC or other computer running Linux (e.g Debian 12)
- or a Mac running macOS 10.12+ (x64) or 13.x+ (arm64)
- an audio interface capable of low-latency I/O (required on Windows, recommended on macOS)

Software:

- Synergy sequencer

| For building custom STFX plugins from Cycle patches, a C compiler is required (e.g. Clang or GCC). Please see the "STFX plugin export: compiler command line" section in `eureka_config.tks` or the Cycle manual for installation details.

# 5 Installation

1. install Synergy
2. open the "stop button" menu and select `Start "Eureka" audio host..` to launch the application
3. in Eureka, open the preferences dialog (`Prefs..` button), and configure the audio device, sample rate, paths, .. as required.
   - The settings will be saved to `eureka_config_local.tks` when the preferences dialog is closed.

## 5.1 MIDI loopback (deprecated)

| since v20230803, Synergy and Eureka come with a built-in virtual MIDI driver ("LocalMIDI") so the following MIDI loopback configuration is not necessary anymore.

1. install MIDI loopback device driver (e.g. loopMIDI on Windows), or use the built-in IAC driver on macOS
2. add two loopback devices named `remote_audio` and `remote_seq`
3. add four loopback devices named `vst_a`, `vst_b`, `vst_c`, `vst_d` (optional: also add `vst_e`..`vst_h`)
4. set `b_enable_localmidi = false;` in both `synergy_config.tks` and `eureka_config.tks`

| on macOS, launch the `Audio MIDI Setup.app`, select `Window ⇒ Show MIDI Studio`, double click the IAC driver (red), set Device Name to "" (empty string), then add the `remote_audio`, `remote_seq`, `vst_a`, `vst_b`, `vst_c`, `vst_d`, `vst_e`, `vst_f`, `vst_g`, `vst_h` MIDI ports, and click "Apply".

## 5.2 Optional

1. open `eureka_config.tks` in a text editor
2. adjust `b_minimal_startup` variable (`false`=enable VST/voiceplugin/samplecache scans)
3. adjust `rootpath` variable
4. adjust `audiotrack_wav_rootpath` variable
5. adjust `exported_samples_wav_rootpath` variable
6. adjust `project_samples_wav_rootpath` variable
7. adjust `sample_rootpath` variable
8. adjust `b_force_single_thread` variable (set to `false` to enable multicore rendering (default on macOS))
9. adjust `clap_paths` / `vst_paths` variables
10. adjust `atrk_rec_skip_num_frames` (latency compensation) as required (default=-80)

| on macOS, multi-threaded audio rendering is enabled by default

| on Windows, for best multi-core performance, clone of the `SetAffinity_*()` functions in `eureka_config.tks` and adjust it to your CPU (CPU core info is printed to console during startup, look for `[dbg] cpuinfo`).

## 5.3 Audio input and output channel aliases

1. open `eureka_config_local.tks` in a text editor
2. edit the `audio_in_aliases` and / or `audio_out_aliases` arrays

# 6 UI

## 6.1 Windows and dialogs

- RMB-clicking a window title bar closes the window (e.g. the Scope or wave browser)
- LMB-clicking outside a popup-type dialog or pressing `ESCAPE` closes it (most other windows)

## 6.2 FloatParams

- vertical RMB-drag or cursor `UP` / `DOWN` coarse edits the value
- horizontal RMB-drag fine edits the value
- holding `lshift` before / while starting to drag increases the coarse / fine precision (ten-fold)
- holding `lctrl` snaps to integers
- LMB-click during RMB-drag reverts the value (same with sliders and dials)
- mouse WHEEL up / down increments / decrements the value in coarse steps
- `lshift` WHEEL or cursor `UP` / `DOWN` increments / decrements the value in fine steps
- LMB-hold-click or `p` shows the preset combobox popup (if there are any presets)
- LMB-double-click cycles through reset values
- RMB-click or `SPACE` shows FloatParam dialog (dial + range edit + reset)
  - note: some parameters have auto-extending ranges which can be reset here
- `t` / `r` scale the value by +-50%
- `i` / `u` double / halve the value
- `n` flips the sign
- `h` toggles hexadecimal mode
- `m` toggles mouse drag precision (float value decimal places, default=enabled)

| many floatparam widgets use different precisions (decimal places) for mouse drag and text editing (i.e. mouse drag is often less precise)

## 6.3 Statusbar

- displays messages
- doubles as a command line for executing "page commands" (e.g. resize / allocate waveform on sample page)
  - `lctrl-backtick` (or `^`) sets keyboard focus
  - RMB click shows presets commands (with default args)
  - `UP` shows history
  - `DOWN` shows presets

## 6.4 Tables

- MMB-click toggles between paging and row selection mousewheel scrolling mode
- `a` opens the context menu (if any)
- RMB-click previews the selected item or starts cell editing (when available)
- RMB-drag or `lshift`-LMB-click selects multiple items / range (when available) (`lctrl` click toggles item selection)
- `SPACE` or `RETURN` selects item (same as double-clicking row)

# 7 Keyboard Shortcuts

| shortcuts assume a US keyboard layout (unless stated otherwise).

## 7.1 Global

a | open context menu (e.g. in tables)
lshift - q | quit
RCTRL | toggle recording
numpad ENTER \= |
BACKSPACE | stop all voices
q | toggle scope
SCROLL-LOCK |
h BACKQUOTE | hold to play 261.63Hz (middle C) reference tone

Global keyboard shortcuts

## 7.2 "Audio" page

ESCAPE LMB double-click | show projects page
F1 | show samples page
n | Create new audio track
SPACE | Start / Stop audio track replay
PAGEUP | Select previous audio track
PAGEDOWN | Select next audio track
lalt - i | Show sample import dialog
lalt - l | Load sequencer project
lctrl - 2 | show Project page
lctrl - 3 | show Track page
lctrl - 1 lctrl - 5 | show Samples page

Audio Page keyboard shortcuts

## 7.3 "Samples" page

ESCAPE LMB double-click | cancel sample filter, or hide sample browser, or return to previous page
F2 | edit sample or zone name (when table has keyboard focus)
F9 lctrl - 9 | toggle WAV sample browser
F10 lctrl - 0 | toggle zone drumpad view
F11 | show synth dialog (Cycle)
w | show synth dialog (Cycle) OR show FM Stack editor
lctrl - TAB | toggle zone table model (show names or velocity/mod ranges)
LEFT s | Focus previous table
RIGHT d | Focus next table
lshift - f | Focus sample name filter
lctrl - f | Focus namespace filter and show selector (UP focuses sample table)
lctrl - lshift - f | Focus sample namespace and show selector (UP focuses sample table)
1 | select all zones
2 | select previous zone
3 | select next zone
4 | edit previous ModSample OR previous sample pad of parent track
5 | edit next ModSample OR next sample pad of parent track
b | show sample patch browser (add new sample(s))
lshift - b | show sample patch browser (replace sample)
c | show Cycle synth editor + curve editor (if sample is procedural)
lctrl - x d | post-rec re-init drum sample
e | select and zoom to highlighted (loop) area in sample view OR exec default row action (e.g. edit cycle patch)
g | show param editor dialog for currently selected voice plugin
lshift - n | create new zone from clipboard
lctrl - s lctrl - x s | save sample as
t | edit sample tags
lctrl - t | auto-assign (guess) sample tags
lshift - t | show sample tags menu
v | edit last edited volume envelope
lshift - v | show volume envelope quick-preset selector
m | show sample mixer dialog
F1 | show Audio page
lctrl - 1 | show Audio page
lctrl - 2 | show Project page
lctrl - 3 | show Track page

Samples Page keyboard shortcuts
..when samples table has keyboard focus:

F2 | edit sample name
INSERT | create new sample
lshift - INSERT | clone selected sample
DELETE | delete selected sample
lctrl - DELETE | delete selected sample without confirmation
lctrl - UP | move selected sample up
lctrl - DOWN | move selected sample down

Samples Page Sample Table keyboard shortcuts
..when zone table has keyboard focus:

F2 | edit zone name
INSERT | create new zone
lshift - INSERT | clone selected zone
lctrl - INSERT | clone zone synth (Cycle)
DELETE | delete selected zone
lctrl - DELETE | delete selected zone without confirmation
lctrl - UP | move selected zone up
lctrl - DOWN | move selected zone down

Samples Page Zone Table keyboard shortcuts
..when loops table has keyboard focus:

INSERT | add loop
lshift - INSERT | clone loop
DELETE | delete loop
lctrl - UP | move selected loop up
lctrl - DOWN | move selected loop down

Samples Page Loops Table keyboard shortcuts
..when voice plugins table has keyboard focus:

F12 | rescan+reload voice plugins
DELETE | set current plugin slot type to "-"
INSERT | set focus to plugin type combobox and show selector
g | show param editor dialog

Samples Page Plugin Table keyboard shortcuts
..in sample zone envelope curve dialog:

ESCAPE v | hide dialog
1 | edit attack envelope
2 | edit sustain envelope
3 | edit release envelope
4 | edit last edited freq envelope
5 | edit last edited volume envelope
6 | edit last edited pan envelope
7 | edit last edited aux envelope

Samples Page Plugin Table keyboard shortcuts

| see Cycle curve editor for all bezier editor shortcuts

..in sample modseq curve dialog:

| LMB-click modseq editor panel to set keyboard focus

RMB-click a
LMB
lshift - LMB
lctrl - LMB
RMB
i
o
f
lshift - f
x
c
v
r
lshift - r
s
lshift - s
e
lshift - e
d
lshift - d

Samples Page ModSeq keyboard shortcuts
..in Cycle synth patch main dialog:

ESC OR F11 | hide dialog
a | show tools menu
c | show curve editor
lctrl - c | copy patch to clipboard
d | force sample recalc / plugin export
lctrl - d | cycle through auto-recalc modes
e | show machine source editor
f | fit dialog to #args
lctrl - n | add new sine lane
RALT lctrl - p | rebuild + reload voice plugin or recalc sample
lctrl - lshift - p | toggle auto-export / auto-recalc
lctrl - TAB | show curve editor
lctrl - SPACE | show machine source editor
r | randomize last selected arg group
lshift - r | randomize all arg groups
lctrl - s | force sample recalc / plugin export
lctrl - lshift - s | save machine preset
lctrl - v | paste patch from clipboard
lshift - v lctrl - w | paste shared patch from clipboard rebuild + reload voice plugin or recalc sample
lctrl - lshift - w | toggle auto-export / auto-recalc

Cycle source editor keyboard shortcuts
..in Cycle synth patch machine source editor:

ESC lctrl - SPACE | hide source editor (and save source changes)
lctrl - f | find text (press again to find next occurence)
lctrl - g | edit include file (or template) under cursor (press esc to return to machine source)
lctrl - h | copy include file pathname under cursor to clipboard (e.g. for external editors)
lctrl - i | expand current input under cursor
lctrl - p | rebuild + reload voice plugin or recalc sample
lctrl - s | save source changes (and auto-rebuild / recalc when enabled)
lctrl - t | show selection dialog and insert `inc` statements for selected (template-)includes
lctrl - w | rebuild + reload voice plugin or recalc sample
TAB | increase indentation of line or block OR select / edit curve (alt: RMB-click) OR edit number under cursor (when there is no selection and cursor is placed after first word)
lshift - TAB | decrease indentation of line or block
lctrl - TAB | show curve editor dialog
lctrl - x TAB | set keyboard focus to embedded curve editor
lalt - LEFT | show previous patch-buffer
lalt - RIGHT | show next patch-buffer

Cycle source editor keyboard shortcuts