What is Conjur.in?
Conjur.in is a browser-based sound effect synthesizer. Design custom sounds using oscillators, filters, and envelopes, then export them as WAV files or tiny JSON recipes.
Keyboard Shortcuts
Space — Play sound
Ctrl+E — Export WAV
Ctrl+C — Copy recipe (when not selecting text)
Esc — Close menus/dialogs
Quick Start
1. Choose a waveform (sine, square, sawtooth, triangle, or noise)
2. Adjust frequency start/end for pitch sweeps
3. Set duration and volume
4. Enable filter or envelope for more control
5. Press Space to preview
6. Export as WAV or copy the recipe JSON
Why Recipes?
A typical sound effect WAV is 10-50KB. A Conjur.in recipe? ~200 bytes. That's 100-250x smaller. For a game with 50 sound effects, that's the difference between 2MB of audio files and 10KB of JSON.
Recipes are generated at runtime by Knell.js, a tiny (~8KB) synthesis engine. No audio files to load, instant playback, and your sounds are infinitely tweakable. Learn how to integrate it →
Presets
Click "Presets" in the header to browse 35+ pre-made sound effects across 9 categories: Pickup, Laser, Explosion, Powerup, Hit, Jump, UI, Retro, and Misc.
What is Knell.js?
Knell.js is the standalone audio synthesis engine that powers Conjur.in. Use it in your own projects to play recipe JSON at runtime — no audio files needed!
Download knell.js (8KB)
Basic Usage
import { SynthEngine } from './knell.js';
// Create and initialize (requires user interaction)
const synth = new SynthEngine();
await synth.init();
// Play a recipe
synth.play({
layers: [{
wave: 'sawtooth',
freq: { start: 800, end: 100 },
volume: { start: 0.7, end: 0 },
duration: 0.15
}]
});
Recipe Format
{
name: 'laser-zap', // Optional name
layers: [{ // Array of sound layers
wave: 'sawtooth', // sine|square|sawtooth|triangle|noise
freq: { start: 800, end: 100 }, // Hz (or single number)
volume: { start: 0.7, end: 0 }, // 0-1 (or single number)
duration: 0.15, // Seconds
delay: 0, // Layer start delay (optional)
filter: { // Optional filter
type: 'lowpass', // lowpass|highpass|bandpass
freq: { start: 2000, end: 500 },
Q: 2
},
envelope: { // Optional ADSR envelope
attack: 0.01,
decay: 0.05,
sustain: 0.5,
release: 0.1
}
}],
master: { volume: 0.8 } // Master volume (optional)
}
Export to WAV
const blob = await synth.exportWAV(recipe);
const url = URL.createObjectURL(blob);
// Use url for download or playback
Tips
- User interaction required: Call
init() after a click/keypress due to browser autoplay policies
- Multiple layers: Stack layers for richer sounds (coin arpeggios, explosions with sub-bass)
- Frequency sweeps: Use
{ start, end } for pitch bends — lasers sweep down, powerups sweep up
- File size: A recipe is ~100-300 bytes vs 10-50KB for a WAV file