NEON DJ is not limited to its built-in synthesized loops. Every deck has a file-loading button — the 📁 icon sitting next to the track selector — that opens the operating system’s native file picker and lets you drop any audio file straight into the mixer. Once loaded, the file is decoded by the browser’s Web Audio API into anDocumentation 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.
AudioBuffer in memory, the waveform is drawn on the deck’s canvas, and you can play, cue, loop, and mix it exactly like the built-in tracks. Everything happens locally inside the browser tab: no file is ever uploaded to a server.
How to Load a File
Locate the file button on the deck
Find the 📁 button on the deck you want to load into (Deck A on the left, Deck B on the right). It sits immediately to the right of the track-selector dropdown, inside the
.track-row area above the turntable.Open the file picker
Click the 📁 button. Your operating system’s standard file-open dialog appears, filtered to
audio/* MIME types so only audio files are shown by default.Select your audio file
Navigate to and select any supported audio file. The dialog closes and the deck’s track-name label immediately changes to
"Cargando…" while the file is being read.Wait for decoding
The browser reads the file into an
ArrayBuffer using the File API (file.arrayBuffer()), then passes it to AudioContext.decodeAudioData(). For most files this completes in well under a second; very large or high-bitrate files may take a moment longer.Mix your track
Once decoded, the file name appears in the
.track-name label above the waveform, the waveform is drawn from the decoded AudioBuffer, and the BPM display is updated with the detected tempo. The PLAY, CUE, LOOP, SYNC, pitch fader, EQ knobs, and all other deck controls are now active for your file.BPM Detection for Custom Files
When a custom file is loaded, NEON DJ runs a lightweight autocorrelation algorithm calleddetectBPM() against the decoded audio data. It analyses the amplitude envelope in 20 ms windows and finds the inter-onset period that scores highest across a candidate range of 70–180 BPM:
3/4 of a beat). If the track is outside the 70–180 BPM detection range or has an unusual rhythmic structure, the estimate may be inaccurate — you can compensate with the pitch fader or the SYNC button.
Waveform Display
After loading,loadBuffer() calls draw() on the deck, which reads the raw PCM samples from the AudioBuffer and draws a scrolling amplitude waveform onto the deck’s <canvas> element. The canvas updates in real time during playback to show the current playhead position.
Supported Formats
NEON DJ accepts any format that the browser’sAudioContext.decodeAudioData() method can handle. Browser support varies:
| Format | Chrome | Firefox | Safari | Edge |
|---|---|---|---|---|
MP3 (.mp3) | ✅ | ✅ | ✅ | ✅ |
WAV (.wav) | ✅ | ✅ | ✅ | ✅ |
OGG Vorbis (.ogg) | ✅ | ✅ | ⚠️ Limited | ✅ |
AAC / M4A (.m4a, .aac) | ✅ | ⚠️ Limited | ✅ | ✅ |
FLAC (.flac) | ✅ | ✅ | ✅ | ✅ |
Opus (.opus) | ✅ | ✅ | ✅ (v16+) | ✅ |
WebM Audio (.webm) | ✅ | ✅ | ⚠️ Limited | ✅ |
Using Custom Files Alongside Built-in Tracks
Custom files coexist naturally with the synthesized library. You can have a built-in loop on one deck and your own file on the other at the same time — there is no conflict. Loading a custom file on a deck simply clears that deck’sselect dropdown value (this.el.select.value = ""), leaving the other deck’s selection untouched.
All deck features work the same way with custom files as with built-in tracks:
- Pitch fader — adjusts playback rate ±50 % in 0.1 % steps
- SYNC — matches this deck’s playback rate to the other deck’s BPM
- LOOP — sets loop points around the current playhead
- Hot Cues (HOT 1/2/3) — saves and recalls jump points
- EQ knobs (High / Mid / Low) — shelving and peaking filters on the audio chain
- Echo and Reverb — send-return effects shared with built-in tracks
- Scratch — drag the vinyl graphic to scrub through the
AudioBuffer
Privacy and Local File Access
File access is entirely local and private. NEON DJ uses the browser’s File API (
file.arrayBuffer()) to read the selected file directly into memory. No data is sent to any server, no temporary files are written to disk, and no third-party service ever sees your audio. The file is held in RAM as a decoded AudioBuffer for the duration of the page session and discarded when you close the tab.Built-in Track Library
Browse all 18 synthesized tracks included with NEON DJ, with BPM values and style descriptions.
Track Generation Reference
Learn how
generateTrack and the synthesis helper functions work under the hood.