Skip to main content

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

PropertyValue
Web Audio nodeBiquadFilterNode, type highshelf
Shelf frequency3 800 Hz
Range−26 dB to +12 dB
Default0 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

PropertyValue
Web Audio nodeBiquadFilterNode, type peaking
Center frequency1 000 Hz
Q0.9
Range−26 dB to +12 dB
Default0 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

PropertyValue
Web Audio nodeBiquadFilterNode, type lowshelf
Shelf frequency200 Hz
Range−26 dB to +12 dB
Default0 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

PropertyValue
Web Audio nodeBiquadFilterNode (type changes dynamically)
Knob range−1.0 to +1.0 (internal)
Default0.0 (open / flat)
Display labelOFF 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

PropertyValue
Web Audio nodeGainNode (send) → DelayNode → feedback GainNode loop
Delay timeCalculated as (60 / baseBPM) * 0.75 seconds (dotted eighth note) when a track is loaded; default ~0.35 s
Feedback0.38
Wet send scalingknobValue * 0.85
Knob range0 – 1 (displayed as 0 – 100)
Default0 (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

PropertyValue
Web Audio nodeGainNode (send) → ConvolverNode
Impulse response1.8 s synthetic room tail (decaying stereo noise buffer)
Wet send scalingknobValue * 0.9
Knob range0 – 1 (displayed as 0 – 100)
Default0 (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
PositionDeck A VolumeDeck 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.
PadKeyDurationDescription
⬆ RISER12.2 sBand-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.
📢 AIRHORN21.1 sFour 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.
💥 IMPACT31.6 sSine 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.
⚡ ZAP40.4 sSquare oscillator pitch-drops from 1 800 Hz to 120 Hz in 0.4 s with a fast fade-in and exponential fade-out.
🌀 FLANGER53.3 sMomentary 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 STOP6~0.7 sTape-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.
🔊 ECHO72.6 sMomentary 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

Build docs developers (and LLMs) love