Anachronaut 2d24006fd9 Add 101-patch library organized by instrument family
Bass (7): SlapBass, FretlessBass, SynthBass1, PickBass, SubBass, RubberBass, FunkBass
Brass (7): Trumpet, Trombone, FrenchHorn, MutedTrumpet, SynthBrass, BrassSection, Tuba
Classic (1): WobbleBass
Drums (8): Kick808, Snare, HiHatClosed, HiHatOpen, Tom, Clap, Rimshot, Cowbell
Leads (7): SawLead, SquareLead, CaliopeLead, WhistleLead, MoogLead, PluckLead, DistortedLead
Mallets (8): Marimba, Xylophone, Glockenspiel, TubularBells, MusicBox, Vibraphone, SteelDrum, Celesta
Pads (7): PolyPad, SweepPad, ChoirPad, CrystalPad, DarkPad, MetallicPad, StringPad
Plucked (7): AcousticGuitar, NylonGuitar, ElectricGuitar, Harp, Lute, Mandolin, PizzicatoStrings
World (8): Sitar, Shakuhachi, Koto, SteelGuitar, Kalimba, Shamisen, Dulcimer, Bagpipe

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-07 22:33:17 -04:00
2026-07-07 19:36:40 -04:00

SoundThing

A polyphonic subtractive synthesizer for Linux, written in C with Raylib.

v0.9.5 beta  |  Linux  |  Windows (cross-compile)  |  C11  |  Raylib


What is SoundThing?

SoundThing is a self-contained polyphonic synthesizer application. It runs standalone on Linux, receives MIDI input from any connected device, and produces audio through your system's default output. No plugin host, no runtime dependencies beyond the system libraries — just a binary and a folder of patches.

The UI is built with a custom pixel-art sprite sheet and an embedded 8×8 pixel font, giving it a deliberately retro character while remaining fully functional as an instrument. All assets are compiled directly into the binary; nothing loose needs to ship alongside the executable.


Features

Module Description
Polyphony 8 voices, round-robin stealing
Oscillators 2 per voice — Sine, Triangle, Saw, Ramp, Pulse, Noise
Envelopes 2 × ADSR — Amp and Mod, independently routable
LFOs 2 × LFO with the same six waveforms as the oscillators
Filter TPT state-variable filter — LP, HP, BP; cutoff and resonance both modulatable
Modulation Per-parameter routing to Amp Env, Mod Env, LFO 0, or LFO 1
MIDI In-app device picker with rescan; CC Learn maps any knob to any CC
Patch browser Save, load, favourites, and folder-based organisation navigable in-app

Building from Source

Dependencies (Linux)

  • gcc
  • libraylib-dev — or build Raylib from source
  • libasound2-dev — ALSA
git clone https://github.com/Anachronaut/soundThing
cd soundThing
make
./bin/soundThing

Windows (cross-compile from Linux)

Additional dependencies:

  • x86_64-w64-mingw32-gcc
  • x86_64-w64-mingw32-windres
  • Raylib win64 MinGW distribution — set RAYLIB_WIN in the Makefile to point at it
make PLATFORM=windows

Note: Run make clean when switching between platforms to avoid mixing object files from different toolchains.

Makefile targets

Target Action
make Build for Linux (default)
make PLATFORM=windows Cross-compile for Windows
make clean Remove build/ and the binary
make run Build and run immediately

Running & Distributing

The Linux binary dynamically links against Raylib and ALSA as system libraries. The Windows .exe is statically linked and fully self-contained.

In both cases, the patches/ folder must sit alongside the executable. SoundThing changes its working directory to the executable's location at startup, so double-clicking from a file manager works correctly.

soundThing/
├── soundThing          (or soundThing.exe)
└── patches/
    ├── Classic/
    ├── Atmospheric/
    └── ...

The Patch System

Patches are plain JSON files stored in patches/ and its subdirectories. Organise them however you like in your filesystem — SoundThing's built-in browser lets you navigate into folders, save into whichever directory you're currently viewing, and mark favourites.

  • Open the patch browser from the Master panel.
  • Click a folder row (shown in blue) to navigate into it; click .. to go back.
  • Type a name in the save field and press the save button to write a new patch.
  • Star any patch to add it to your favourites list.

SoundThing ships with a library of presets across several categories: Classic, Atmospheric, Chiptune, and Keys.


MIDI Setup

Open the MIDI panel from the Master section to scan for and connect to an input device. The last-used device is remembered between sessions.

CC Learn

Any knob or slider can be mapped to a MIDI CC:

  1. Enable MIDI Lrn in the Master panel (it will pulse yellow).
  2. Click the knob or slider you want to control.
  3. Wiggle the physical control on your MIDI device.
  4. The mapping is saved automatically and restored on next launch.

The modulation wheel (CC 1) is pre-mapped to oscillator pulse width.


Built With

  • Raylib — graphics, audio streaming, and windowing (zlib license)
  • ALSA — Linux audio/MIDI (LGPL, dynamically linked)
  • WinMM — Windows MIDI (system library)

If SoundThing has been useful to you, consider supporting Raylib's development.


License

License TBD. All rights reserved until stated otherwise.


Made by Anachronautanachronautics@gmail.com

Description
Simple Subtractive Synth made with Raylib.
Readme 246 KiB
Languages
C 97.4%
Makefile 2.6%