No description
  • C++ 88%
  • C 9%
  • Objective-C++ 1.9%
  • CMake 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
100mountains 3ca212cee9 fonts: runtime UI-face switch + vendor a font library for the picker
StbFontAtlas::setBaseFont(name,size) overrides the text face for the next build (winning over SND_UI_FONT); GlWindow::setUiFont rebuilds the atlas and re-uploads the texture live, building into a probe first so a bad face leaves the current one intact. Vendor 31 faces into third_party/fonts (IBM Plex Sans/Mono, Inter, Cooper Hewitt, Centre Forward, Bluu Next, Advent Pro, Source Code Pro, JetBrains Mono, Barlow, Rajdhani, Titillium, Oxanium, Alatsi, Open Sans, Sugar) so the app can offer them by name. widget-shots gains specimen/label/chromerow shots used to compare faces on the real bar.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 17:48:31 +01:00
.claude Complete retained UI menu and graph accessibility 2026-07-10 00:55:07 +01:00
cmake Windows: plugin editor windows (HWND host window + WGL client view) 2026-07-08 22:40:42 +01:00
docs Make retained popup menus scrollable 2026-07-14 05:24:36 +01:00
examples/snd-example Unify retained modal overlay API 2026-07-14 16:07:32 +01:00
include/snd fonts: runtime UI-face switch + vendor a font library for the picker 2026-07-17 17:48:31 +01:00
site Unify retained modal overlay API 2026-07-14 16:07:32 +01:00
src fonts: runtime UI-face switch + vendor a font library for the picker 2026-07-17 17:48:31 +01:00
test M2 closed: snd::ui::keyboard (piano widget, velocity from hit depth, glissando, lit-notes overlay), client processors gain MIDI-out, SND Demo Synth instrument (8-voice sine, host MIDI + own keyboard via RT-safe UI queue, VST3+standalone); per-plugin ObjC class names (target_compile_definitions -- source-file props are file-scoped and collide); selftest 21/21: hosted synth noteOn peak 0.170, silent tail after release 2026-07-07 21:32:05 +01:00
third_party fonts: runtime UI-face switch + vendor a font library for the picker 2026-07-17 17:48:31 +01:00
tools fonts: runtime UI-face switch + vendor a font library for the picker 2026-07-17 17:48:31 +01:00
.gitignore Prepare repo for public release 2026-07-09 15:01:57 +01:00
AUDIT.md Record retained list style fix 2026-07-14 10:57:15 +01:00
CMakeLists.txt Polish retained UI resizing and widgets 2026-07-14 13:47:51 +01:00
DESIGN.md Polish retained UI resizing and widgets 2026-07-14 13:47:51 +01:00
LICENCE Prepare repo for public release 2026-07-09 15:01:57 +01:00
PROGRAMMING-GUIDE.md Polish retained UI resizing and widgets 2026-07-14 13:47:51 +01:00
README.md Repair retained UI contracts 2026-07-14 10:21:18 +01:00
ROADMAP.md ui: add graph surface and platform helpers 2026-07-14 01:58:36 +01:00
UI_PROGRAMMING_GUIDE.md Unify retained modal overlay API 2026-07-14 16:07:32 +01:00

SND

SND is a small, in-house audio+UI foundation library — cross-platform audio I/O, a GUI shell, plugin hosting, and a write-once plugin SDK. Apps build on SND instead of on JUCE/iPlug. Free for any noncommercial use; commercial use needs a licence — see License.

Modules

  • snd::audio — device playback/capture, file decode (wav/aiff/flac/mp3/ogg), streaming reads, encoders (FLAC, MP3), resampling, a gapless Player
  • snd::ui — shared audio UI toolkit with two front ends: retained/aGooey (snd_ui_retained_gl, no ImGui target) and Dear ImGui compatibility (snd_ui_imgui). Widgets share paint helpers for knobs, meters, faders, keyboard, pattern grid, sequencer matrix, envelope editor, graph surface, menus, and custom painter hooks. The retained tree adds layout, keyboard focus, and accessibility semantics. See UI_PROGRAMMING_GUIDE.md.
  • snd::plugin — VST3 + AU hosting (editor GUIs in native windows, MIDI, host transport) and a client SDK: write a Processor + ImGui editor once and build it as VST3, AU, and a standalone app. Multichannel buses, an inter-plugin control-bus API, out-of-process crash-safe scanning.
  • snd::midi — MIDI events + CoreMIDI/ALSA/WinMM device I/O
  • snd::dsp — real FFT + COLA STFT (PFFFT)
  • snd::state — a ValueTree-shaped state tree with XML round-trip + undo
  • snd::platform — native file dialogs, per-OS config dir

Mac, Linux, and Windows are supported. DESIGN.md records the architecture, PROGRAMMING-GUIDE.md the how-to, and AUDIT.md the current architecture audit.

Build & test

tools/build.sh            # configure + build + run --selftest
tools/build.sh --no-test  # configure + build only

Or by hand (same steps — use these on Windows):

cmake -S . -B build
cmake --build build
./build/snd-example --selftest   # headless checks
./build/snd-example --selftest-retained # focused retained UI contract
./build/snd-example              # window + audio device demo

--selftest verifies real behaviour, not just compilation: decode+playback, capture, VST3/AU hosting (parameter behaviour + stable-ID state round-trip), and the plugin-client SDK.

There is no CI here, and there won't be — private-repo Actions minutes are metered and easy to over-trigger. This repo only builds when someone runs the script by hand.

What's vendored vs. original

  • Vendored, unmodified, pinned (via CMake FetchContent): miniaudio, Dear ImGui, GLFW, VST3 SDK, Apple AudioUnitSDK, PFFFT, NFD, imgui-knobs, libFLAC
  • Original: everything under include/snd/ and src/ — SND's own API and the backends behind it

Dev workflow

See AGENTS.md for the multi-agent dev workflow that applies to work in this repo.

License

SND is source-available, not open source. It is licensed under the PolyForm Noncommercial License 1.0.0: free to use, modify, and share for any noncommercial purpose (personal projects, research, education, non-profits, evaluation).

Commercial use requires a separate commercial licence from the author. If you want to ship SND — or anything built on it — in a product or service for commercial advantage or monetary compensation, open an issue at https://github.com/100mountains/snd or contact @100mountains on GitHub to arrange one.

Copyright 2026 100mountains. The dependencies SND fetches keep their own licences (mostly permissive: ImGui, GLFW, miniaudio, PFFFT, NFD, libFLAC, imgui-knobs, nanosvg, stb_image, AudioUnitSDK). One to note: the VST3 SDK is GPLv3-or-Steinberg — if you build VST3 targets, your use of that SDK is governed by Steinberg's terms, separately from SND's licence.