A generative, dark-ambient audio engine for the web. Built with Tone.js to provide dynamic soundscapes and reactive UI sound effects.
Aether-LO is a class-based audio controller designed to bring web interfaces to life. It combines atmospheric pads, procedural percussion, and random arpeggiation to create a mood that shifts between "Dark", "Tension", and "Melodic" states automatically. Fully Modular
- 🎹 Generative Scales - Automatically weaves between Minor, Phrygian, Aeolian, and custom "Dread" scales.
- 🎛️ Dynamic Atmosphere - Real-time manipulation of Reverb, Stereo Width, and Lowpass filtering.
- 🥁 Procedural Rhythm - A 16-step sequencer handling Kick and Hi-hat patterns with swing logic.
- 🖱️ Reactive UI SFX - Built-in methods for
hoverandclickinteractions. - 🌊 Sidechain Logic - The background pads automatically "duck" (lower volume) when the kick drum hits.
- 🚀 Autostart Handling - Handles browser autoplay policies by binding to initial user interaction.
- A modern web browser.
- Tone.js library (Internet connection required for CDN).
-
Include Tone.js Add the Tone.js CDN to the
<head>of your HTML file.<script src="[https://cdnjs.cloudflare.com/ajax/libs/tone/14.8.49/Tone.js](https://cdnjs.cloudflare.com/ajax/libs/tone/14.8.49/Tone.js)"></script>
-
Add the Engine Download
sound.jsand link it after Tone.js.<script src="sound.js"></script>
-
Initialize The engine automatically initializes and attaches itself to
window.Seyric. It will wait for a click or keypress to start the audio context.
The engine attaches to the window object automatically. You can interact with it using the globally accessible Seyric object.
// The engine starts automatically on the first user interaction
// via the bind() method included at the bottom of sound.js.
// Check if running
if (window.Seyric.running) {
console.log("Audio Engine Active");
}
<button onmouseenter="window.Seyric.hover()">
Hover Me
</button>
<button onclick="window.Seyric.click()">
Click Me
</button>The engine manages its own state, but you can modify the starting parameters in the constructor within sound.js:
this.state = {
intensity: 0.3, // General volume modifier
tension: 0.2, // Likelihood of dissonant scales
emotion: "dark", // Starting mood
tempo: 80 // Starting BPM
};Created by Seyric