Documentation Index
Fetch the complete documentation index at: https://mintlify.com/kepabilbao67-bot/musicplayer2/llms.txt
Use this file to discover all available pages before exploring further.
NEON DJ’s signal processing chain gives every deck six rotary knobs — three EQ bands, a morphing filter, an echo send, and a reverb send — all wired as live Web Audio API nodes so changes are instantaneous and glitch-free. Below the decks, a row of seven FX pads trigger dramatic one-shot and momentary effects routed directly to the master bus.
The Six Knobs Per Deck
Each deck has a row of six knobs rendered as 42 × 42 px circular elements. The indicator line starts at center (12 o’clock) and sweeps ±135° across a 270° arc.
Knob Interaction
- Click and drag vertically to change a value: dragging up increases it, dragging down decreases it. The sensitivity is
120px of drag per full range travel.
- Double-click any knob to instantly reset it to its default (center) value.
- Values are shown in a small numeric readout below each knob label.
Double-clicking any knob resets it to its center/default value. This is the fastest way to undo an EQ boost or kill a filter sweep mid-mix.
HIGH — High-Shelf EQ
| Property | Value |
|---|
| Web Audio node | BiquadFilterNode, type highshelf |
| Shelf frequency | 3 800 Hz |
| Range | −26 dB to +12 dB |
| Default | 0 dB (unity gain) |
Boosting HIGH adds brightness and air above 3.8 kHz. Cutting it rolls off cymbals and high-frequency energy, useful when bringing in a second track with competing highs.
MID — Peaking EQ
| Property | Value |
|---|
| Web Audio node | BiquadFilterNode, type peaking |
| Center frequency | 1 000 Hz |
| Q | 0.9 |
| Range | −26 dB to +12 dB |
| Default | 0 dB |
The mid knob targets the 1 kHz presence range. Cutting MIDs thins out vocals and snares for a cleaner blend; boosting adds punch and forward presence.
LOW — Low-Shelf EQ
| Property | Value |
|---|
| Web Audio node | BiquadFilterNode, type lowshelf |
| Shelf frequency | 200 Hz |
| Range | −26 dB to +12 dB |
| Default | 0 dB |
The classic DJ trick: kill the bass of the incoming track (LOW to minimum) while bringing in the other deck’s bass, then swap. Because both use independent BiquadFilterNode instances, neither deck’s EQ affects the other.
FILTER — Morphing High/Low-Pass
| Property | Value |
|---|
| Web Audio node | BiquadFilterNode (type changes dynamically) |
| Knob range | −1.0 to +1.0 (internal) |
| Default | 0.0 (open / flat) |
| Display label | OFF at center, LP when negative, HP when positive |
The filter knob is a single control that morphs between two modes:
- Center (|value| < 0.03): Filter type is
lowpass with cutoff at 22 000 Hz and Q ≈ 0 — effectively transparent.
- Left half (value < −0.03): Switches to
lowpass, Q = 4. Cutoff sweeps from ~8 000 Hz down to 200 Hz as you rotate left. Useful for dark, muffled buildups.
- Right half (value > 0.03): Switches to
highpass, Q = 2. Cutoff sweeps from ~190 Hz up to ~5 040 Hz as you rotate right (formula: 40 + v × 5000 Hz, where v starts at 0.03 just past the dead zone). Creates the classic filter sweep DJ effect.
ECHO — Delay Send
| Property | Value |
|---|
| Web Audio node | GainNode (send) → DelayNode → feedback GainNode loop |
| Delay time | Calculated as (60 / baseBPM) * 0.75 seconds (dotted eighth note) when a track is loaded; default ~0.35 s |
| Feedback | 0.38 |
| Wet send scaling | knobValue * 0.85 |
| Knob range | 0 – 1 (displayed as 0 – 100) |
| Default | 0 (dry) |
The echo send routes audio from channelGain through a GainNode (the send level) into a DelayNode, which feeds back into itself via a gain of 0.38. The delay output rejoins the signal chain at crossGain, so the echo is also subject to the crossfader. Raising the knob blends in a musical dotted-eighth delay — it doesn’t replace the dry signal, it adds to it.
REVERB — Convolver Send
| Property | Value |
|---|
| Web Audio node | GainNode (send) → ConvolverNode |
| Impulse response | 1.8 s synthetic room tail (decaying stereo noise buffer) |
| Wet send scaling | knobValue * 0.9 |
| Knob range | 0 – 1 (displayed as 0 – 100) |
| Default | 0 (dry) |
The reverb uses a ConvolverNode loaded with a procedurally generated impulse response: 1.8 seconds of stereo white noise multiplied by a (1 − i/len)^2.5 decay envelope. The impulse response is generated once and shared by both decks. Raising the REVERB knob sends the post-channel-fader signal into the convolver, adding a lush room tail without affecting the crossfader balance.
Signal Chain
Each deck’s audio flows through the following fixed chain before reaching the master:
AudioBufferSourceNode
→ eqLow (lowshelf, 200 Hz)
→ eqMid (peaking, 1 kHz)
→ eqHigh (highshelf, 3.8 kHz)
→ filter (lowpass/highpass morphing)
→ channelGain ← channel fader controls this
├─ → delaySend → delay → feedback loop ─┐
├─ → reverbSend → convolver │
└─ → analyser (VU meter source) │
→ crossGain ← crossfader controls this │
↑─────────────────────────────────────┘
→ masterGain → masterLimiter → AudioContext.destination
Channel Fader
Each deck has a vertical channel fader (<input type="range" class="chfader">) in the center mixer panel, range 0 – 100 (default 100). It directly sets channelGain.gain.value (as faderValue / 100). Deck A’s fader is colored magenta, Deck B’s is cyan via accent-color.
The channel fader controls the individual deck volume before the crossfader. Setting a channel fader to zero silences that deck regardless of crossfader position.
Crossfader
The horizontal crossfader slider (<input type="range" class="cross">) spans the full width of the center mixer panel, range 0 – 100, default 50.
The crossfader uses an equal-power curve so the perceived loudness stays constant as you sweep across:
const x = crossfader.value / 100; // 0..1
const gainA = Math.cos(x * 0.5 * Math.PI); // 1 at x=0, 0 at x=1
const gainB = Math.cos((1 - x) * 0.5 * Math.PI); // 0 at x=0, 1 at x=1
| Position | Deck A Volume | Deck B Volume |
|---|
| 0 (full left) | 1.0 (full) | 0.0 (silent) |
| 50 (center) | ~0.707 (−3 dB) | ~0.707 (−3 dB) |
| 100 (full right) | 0.0 (silent) | 1.0 (full) |
Keyboard shortcuts ← and → move the crossfader by 5 units per press.
Master Volume
The master volume knob is a horizontal range input (<input class="mvol">, range 0 – 100, default 85) in the header strip. It sets masterGain.gain.value directly. The master limiter (a DynamicsCompressorNode with threshold −3 dB, ratio 20:1) sits downstream and prevents clipping when multiple loud sources play simultaneously.
FX Pads
The FX bar runs below the console and contains seven pads. All effects play through masterNode() — the master gain bus — so they’re heard regardless of crossfader or channel fader position.
FX pads can be triggered with keyboard keys 1 – 7 as well as mouse clicks. See the Keyboard Shortcuts page for the full binding list.
| Pad | Key | Duration | Description |
|---|
| ⬆ RISER | 1 | 2.2 s | Band-pass filtered noise sweep (300 Hz → 9 kHz) layered with a sawtooth oscillator rising from 200 Hz to 2 000 Hz. Both fade in over 2.2 s and cut off sharply. |
| 📢 AIRHORN | 2 | 1.1 s | Four detuned sawtooth oscillators forming a chord (semitones 0, 0.5, 7, 7.5 above 233 Hz). Frequency slides slightly sharp at the start then settles. Filtered through a 3 500 Hz low-pass. |
| 💥 IMPACT | 3 | 1.6 s | Sine wave falling from 220 Hz to 28 Hz (body hit) layered with low-pass filtered noise sweeping 6 kHz → 200 Hz (the transient crack). Both decay exponentially over 1.6 s. |
| ⚡ ZAP | 4 | 0.4 s | Square oscillator pitch-drops from 1 800 Hz to 120 Hz in 0.4 s with a fast fade-in and exponential fade-out. |
| 🌀 FLANGER | 5 | 3.3 s | Momentary flanger: ramps the master flanger wet-send from 0 to 0.85 in 0.1 s, holds for 2.6 s, then fades to 0 over the final 0.7 s. The flanger LFO runs at 0.35 Hz with a 5 ms delay and 0.55 feedback. |
| 🛑 TAPE STOP | 6 | ~0.7 s | Tape-stop effect: ramps playbackRate of every playing deck to 0.001 over 0.7 s, then pauses those decks. Useful for a dramatic full-stop moment. |
| 🔊 ECHO | 7 | 2.6 s | Momentary echo throw: ramps the master echo wet-send to 0.6 in 0.05 s, holds for 2.0 s, then fades out over 0.6 s. Uses the same 0.34 s delay with 0.45 feedback as the per-deck echo. |
Riser — Technical Detail
noise buffer (3 s)
→ BiquadFilter (bandpass, Q=8)
frequency: 300 Hz → 9000 Hz (exponential, 2.2 s)
→ GainNode: 0 → 0.5 (ramp), then 0 (cut)
→ masterGain
OscillatorNode (sawtooth)
frequency: 200 Hz → 2000 Hz (exponential, 2.2 s)
→ GainNode: 0 → 0.12 (ramp), then 0 (cut)
→ masterGain
Airhorn — Technical Detail
[4 × OscillatorNode (sawtooth), semitones 0/0.5/7/7.5 above 233.08 Hz]
each: frequency slides from base*0.96 → base in 0.12 s
→ BiquadFilter (lowpass, 3500 Hz)
→ GainNode: 0 → 0.22 (0.04 s), hold, → 0 (0.2 s tail)
→ masterGain