Files
Soundgen/Cargo.toml
T
Emil c7d6c40683 Initial release: 8-bit sound synthesizer with LLM/MCP integration
Soundgen is a Rust workspace for generating 8-bit/chiptune sound effects,
UI sounds, and ambient textures for game audio assets. It features JSON-first
sound specs, an MCP server for LLM tool-use, an egui GUI editor, and a
runtime library with NES-authentic DAC emulation.

Features:
- 6 voice types: pulse, triangle, noise, DPCM, wavetable, FM
- Effects: ADSR envelope, frequency sweep, biquad filter, vibrato
- 13 built-in presets (SFX/UI/ambient) as JSON data files
- MCP server: list_presets, generate_sfx, render_sound tools
- Pattern-based sequencer (JSON song format)
- egui GUI: virtual keyboard, preset browser, channel editor, undo/redo
- Runtime: NES nonlinear DAC + SoundBank for game embedding
- 90 tests, 0 warnings

Crates:
- soundgen-core: synthesis engine (no I/O)
- soundgen-fmt: SoundSpec JSON schema + PresetRegistry
- soundgen-io: WAV writer + audio playback
- soundgen-seq: sequencer (patterns, songs)
- soundgen-cli: gen/render/render-song/list-presets
- soundgen-mcp: MCP server for LLM integration
- soundgen-gui: egui editor
- soundgen-runtime: NES DAC + SoundBank
2026-06-21 22:07:05 +03:00

35 lines
851 B
TOML

[workspace]
members = [
"crates/soundgen-core",
"crates/soundgen-fmt",
"crates/soundgen-io",
"crates/soundgen-seq",
"crates/soundgen-cli",
"crates/soundgen-mcp",
"crates/soundgen-gui",
"crates/soundgen-runtime",
]
resolver = "2"
[workspace.package]
version = "0.1.0"
edition = "2021"
license = "MIT"
repository = "https://github.com/emil/soundgen"
[workspace.dependencies]
soundgen-core = { path = "crates/soundgen-core" }
soundgen-fmt = { path = "crates/soundgen-fmt" }
soundgen-io = { path = "crates/soundgen-io" }
soundgen-seq = { path = "crates/soundgen-seq" }
soundgen-runtime = { path = "crates/soundgen-runtime" }
hound = "3"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
clap = { version = "4", features = ["derive"] }
cpal = "0.15"
eframe = "0.28"
egui = "0.28"
egui-file-dialog = "0.6"