Skip to content
nhthnPublic

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

3 watching

Forks

Latest commit

 

History

87 Commits

Folders and files

Repository files navigation

SNAPS

SNAPS (Scale Navigator Particle System) is a SuperCollider library for creating real-time sound collages that conform to a particular key or scale. SNAPS is meant particularly to interface with the Scale Navigator. It is also Nathan Turczan's personal software for electronic music performance, and it is largely built by Nathan Ho.

SNAPS requires a database of samples that have been manually tagged with pitch class information. It takes MIDI input, whose notes are interpreted as the pitch classes of the desired scale. Although this MIDI input is designed to work with the Scale Navigator, one can use any MIDI input, such as a keyboard. SNAPS then draws randomly from the sample database to produce samples whose pitch classes are the subset of the scale. Additionally, if a sample can be transposed in pitch to match the scale, SNAPS will repitch it using simple varispeed playback to make it in key. If the scale changes, SNAPS does something special: sample playback rates are changed to match the new scale, but with slow portamento. This lends a unique effect where a scale "melts" into another.

SNAPS is structured more as a library than a complete instrument. The file nt.scd is an example of SNAPS in practice, mapping SNAPS's various parameters to a MIDI interface. Edit config.json to map MIDI controls and select sample categories.

AI disclosure: I built SNAPS for my client. My client has contributed to the repo using LLM coding tools. I do not use any LLM coding tools myself. --Nathan Ho

Requirements

SuperCollider

SNAPS runs in SuperCollider. Download and install it for your platform.

Audio Routing

SNAPS outputs 8 stereo pairs (16 channels) of audio, one per player. You need virtual audio routing software to receive these channels individually in a DAW or other application.

Platform Software Notes
macOS Loopback by Rogue Amoeba Create a virtual device with 16 channels (8 stereo pairs).
Windows Voicemeeter Potato by VB-Audio Use the ASIO driver for low latency and multi-channel support.
Linux JACK Audio Connection Kit Most Linux audio setups already use JACK. Use a patchbay (e.g. QjackCtl, Carla) to route channels.

To find your audio device name, run this in SuperCollider:

ServerOptions.devices;

Then set the "device" field in your config.json to the exact string shown (see Configuration below).

MIDI Controller

SNAPS is designed to be controlled with an Akai MIDI Mix hardware controller. If you don't have the hardware, you can use the web-based MIDI Mix emulator which runs in Chrome or any browser that supports Web MIDI. The emulator sends identical MIDI note and CC messages to the physical controller.

Installation

  1. Launch SuperCollider IDE.
  2. Run Platform.userExtensionDir (Shift+Enter). This prints your extensions path.
  3. Move or symlink the SNAPS directory into that extensions directory.
  4. In SuperCollider IDE, click Language > Reboot Interpreter.

Configuration

SNAPS uses two JSON config files that are not tracked by git (they contain machine-specific settings). Example templates are provided:

  • config_example.json — copy to config.json
  • library_example.json — copy to library.json

config.json

Field Description
device Your audio device name. Run ServerOptions.devices in SuperCollider to see available devices. See platform-specific examples below.
bpmCC MIDI CC number for the BPM knob.
rhythms Array of rhythm patterns (subdivisions in beats).
loopPlayers Array of looping sample players.
alphanumericPlayers Array of alphabetical one-shot players.
players Array of random one-shot players.

Device name by platform:

Platform Example device value
macOS + Loopback "Loopback Audio"
Windows + Voicemeeter Potato "ASIO : Voicemeeter Potato Insert Vi..."
Linux + JACK "JackRouter"

Player fields:

Field Description
startStopMidiNote MIDI note number that toggles the player on/off.
reRandomizeMidiNote (Loop players only) MIDI note to pick a new random sample.
rhythmCC MIDI CC for the rhythm subdivision knob.
maxParticlesCC MIDI CC for the max simultaneous particles knob.
categoriesCC MIDI CC to crossfade between two sample categories.
category / categories Sample category name(s) from library.json.
MidiChannel MIDI channel for Scale Navigator input to this player.

library.json

Field Description
root Absolute path to your samples directory.
paths Map of category names to subdirectory names inside root.

Each sample subdirectory should contain audio files tagged with pitch class information.

Quick Start

  1. Copy config_example.json to config.json and edit:
    • Set "device" to your audio device (see Configuration above).
    • Set "MidiChannel" on each player to match your Scale Navigator setup.
    • Set sample categories to match your library.
  2. Copy library_example.json to library.json and edit:
    • Set "root" to the absolute path to your samples folder.
    • Map category names to subdirectories.
  3. Open nt.scd in SuperCollider IDE.
  4. Run the blocks top to bottom (select each block and press Ctrl+Enter / Cmd+Enter):
    • Block 1 — Loads config and sets the audio device.
    • Block 2 — Boots the server, defines synth defs, and loads the sample library.
    • Block 3 — Connects MIDI and clears MIDI Mix LEDs.
    • Block 4 — Sets up all players, clock, and CC mappings.
  5. Press buttons on the MIDI Mix (or web emulator) to start and stop players.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages