tunes
A standalone Rust library for music composition, synthesis, and audio generation. Build complex musical pieces with an intuitive, expressive API — no runtime dependencies required.
Perfect for algorithmic music, game audio, generative art, and interactive installations.
Features
- Music Theory: Scales, chords, patterns, progressions, and transposition
- Composition DSL: Fluent API for building musical sequences
- Sections & Arrangements: Create reusable sections (verse, chorus, bridge) and arrange them
- Synthesis: FM synthesis, filter envelopes, wavetable oscillators
- Sample Playback: Load and play WAV files with pitch shifting
- Rhythm & Drums: Drum grids, euclidean rhythms, 808-style synthesis, and pattern sequencing
- Instruments: Pre-configured synthesizers, bass, pads, leads, and more
- Effects, Automation and Filters: Delay, reverb, distortion, chorus, modulation, tremolo, autopan, gate, limiter, compressor, bitcrusher, eq, phaser, flanger, saturation, filters
- Musical Patterns: Arpeggios, ornaments, tuplets, classical techniques
- Tempo & Timing: Tempo changes, time signatures (3/4, 5/4, 7/8, etc.), key signatures with modal support
- Key Signatures & Modes: Major, minor, and all 7 Greek modes (Dorian, Phrygian, Lydian, etc.)
- Real-time Playback: Cross-platform audio output via cpal
- WAV Import/Export: Load samples and render compositions to WAV files
- MIDI Export: Export compositions to Standard MIDI Files with proper metadata
Installation
Add this to your Cargo.toml:
[]
= "0.1.0"
Platform Requirements
Linux users need ALSA development libraries:
# Debian/Ubuntu
# Fedora/RHEL
macOS and Windows work out of the box with no additional dependencies.
Quick Start: Super simple!!
Real-time Playback
use *;
Export to WAV
use *;
Sample Playback
use *;
MIDI Export
use *;
Comparison with Other Music Programming Libraries
tunes occupies a unique position in the music programming landscape:
| Feature | SuperCollider | Sonic Pi | Leipzig | Strudel | tunes | Music21 |
|---|---|---|---|---|---|---|
| Type safety | No | No | No (Clojure) | Partial (TS) | Yes (Rust) | No |
| Real-time audio | Yes | Yes | Yes (Overtone) | Yes (Web Audio) | Yes | No |
| Sample playback | Yes | Yes | Yes (Overtone) | Yes | Yes | No |
| WAV export | Yes (manual) | No | Via Overtone | No (browser) | Yes (easy) | Yes |
| MIDI export | Yes | No | No | No | Yes | Yes |
| Easy to learn | No | Yes | Medium | Yes | Yes | Yes |
| No dependencies | No (needs SC) | No (needs Ruby) | No (Clojure+SC) | No (browser/Node) | Yes | No |
| Algorithmic patterns | Yes | Yes | Yes | Yes | Yes | Yes |
| Music theory | Manual | Manual | Yes | Some | Yes (built-in) | Yes |
| Standalone binary | No | No | No | No | Yes | No |
| Embeddable | No | No | No | No | Yes | No |
When to use tunes
tunes excels at:
- Building Rust applications with music generation (games, art installations, tools)
- Algorithmic composition with type-safe APIs
- Offline music generation and batch processing
- Learning music programming without complex setup
- Prototyping musical ideas with immediate feedback
Use alternatives if you need:
- SuperCollider: Extreme synthesis flexibility and live coding ecosystem
- Sonic Pi: Classroom-ready live coding with visual feedback
- Leipzig: Functional composition with Clojure's elegance
- Strudel: Browser-based collaboration and live coding
- Music21: Academic music analysis and score manipulation
tunes' unique position
tunes is the only standalone, embeddable, type-safe music library with synthesis + sample playback. It compiles to a single binary with no runtime dependencies, making it ideal for:
- Rust game developers (Bevy, ggez, etc.)
- Desktop music applications
- Command-line music tools
- Embedded audio systems
Documentation
Run cargo doc --open to view the full API documentation with detailed examples for each module.
Testing
- The library includes 550 comprehensive tests and 150 doc tests ensuring reliability and correctness.
Examples
Run the included 50 examples to hear the library in action:
# Sample playback (WAV file loading and playback)
# Export to WAV file
# Synthesis showcase (FM, filters, envelopes)
# Theory and scales
# Effects and effect automation (dynamic parameter changes over time)
# And many more...
Note: Use --release for examples with complex synthesis to avoid audio underruns.
License
MIT OR Apache-2.0
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.