A minimal, browser-based bass arpeggiator that generates infinitely varied, human-feeling bass lines.
Steppe creates evolving bass patterns with musical intelligence. Every time you hit Pattern, it generates a new bass line with:
- Real chord progressions — not random notes
- Groove personalities — driving, bouncy, hypnotic, broken, minimal
- Human imperfections — timing drift, velocity variation, pitch wobble
- 8 voice presets — from clean sine waves to heavy distortion
Perfect for producers needing bass inspiration, live performers, or anyone who wants endless generative bass loops.
- Download
steppe.html - Double-click to open in your browser
- Click the splash screen to initialize audio
- Press Play
That's it. No installation, no server, no dependencies to install.
- Any modern web browser (Chrome, Firefox, Safari, Edge)
- Internet connection on first load (Tone.js library caches after)
Tempo Slider — Set BPM (40-120)
Density Slider — Control how many notes play (sparse to dense)
Voice Button — Cycle through 8 synth voices
Pattern Button — Generate a new bass line
Play/Stop — Start/stop the sequence
The 4 dropdowns represent the chord for each bar of your 4-bar loop. When you hit Pattern, these are automatically set to a musical progression, but you can manually override them.
Click Export Loop (.wav) to capture exactly one 4-bar loop as an audio file. The pattern will play through once and automatically stop recording.
Steppe doesn't just randomize notes. Every pattern has:
- Scale-aware melodies — Minor, Phrygian, Dorian, Minor Pentatonic
- Chord progressions — Classic sequences like i-VI-III-VII, i-iv-v-i
- Phrase structure — 8-bar phrases with build/release dynamics
- Melodic contour — Notes move with direction, not random jumps
Each generation picks a rhythmic personality:
- Driving — Four-on-floor, relentless energy
- Bouncy — Syncopated, danceable
- Hypnotic — Minimal downbeats, off-beat emphasis
- Broken — Sparse, glitchy textures
- Minimal — Spacious, meditative
Every note has subtle imperfections:
- Timing drift — ±15ms humanization
- Velocity variation — Simulates inconsistent finger pressure
- Pitch wobble — Analog-style VCO instability (±30 cents)
- Articulation variety — Staccato to sustained notes
- Pure — Clean sine wave, warm sub bass
- Thick — Rounded sine with light saturation
- Wooden — Triangle wave, hollow character
- Solid — Triangle with more drive, focused
- Tube — Square wave, vintage warmth
- Grime — Heavy square wave, aggressive
- Fuzz — Sawtooth with distortion
- Heavy — Maximum saturation, industrial
- Start at 60-70 density for a full pattern
- Hit Pattern until you find a groove you like
- Adjust density to taste (sparse = minimal, dense = busy)
- Cycle voices to match your track's energy
- Tweak individual key selectors for chord variations
- Set a slow tempo (40-60 BPM) and high density for ambient drones
- Fast tempo (100-120 BPM) + minimal groove = techno stabs
- Leave it running — patterns never repeat exactly the same
- Generate patterns until you find one you love
- Lock in your tempo and density
- Click Export Loop (auto-stops after 4 bars)
- Import the .wav into your DAW
- Time-stretch, pitch-shift, resample as needed
- Tone.js — Professional audio synthesis and scheduling
- Tailwind CSS — Minimal UI styling
- Web Audio API — Low-level audio processing
- Dual oscillator design (main + sub)
- Filter envelope modulation with velocity sensitivity
- Waveshaper distortion with 4x oversampling
- Compression + limiting on master bus
- Sample-accurate scheduling (no timing jitter)
Tested on:
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
Q: Why does the first note sometimes sound different?
A: Audio context needs user interaction to start. Click the splash screen first.
Q: Can I use this offline?
A: After first load, Tone.js is cached. You'll need internet once, then it works offline.
Q: The patterns sound too random. How do I get more structure?
A: Lower the density slider. Sparse patterns reveal the underlying groove better.
Q: Can I customize the voices?
A: Yes! Edit the voices array in the code. Each voice has oscillator type, filter settings, envelope params, and distortion amount.
Q: Is this royalty-free?
A: Yes. All generated audio is yours to use commercially. MIT license.
Potential future features:
- Swing/shuffle control
- MIDI export
- Custom scale input
- Reverb/delay sends
- Pattern lock (prevent regeneration)
Found a bug? Have an idea? Open an issue or submit a pull request.
MIT License — use it, modify it, sell music made with it.
Created for musicians who need bass lines that feel alive.
Built with Tone.js by Yotam Mann.
Steppe — Minimal tool. Maximum groove.
