Music Energy Analyzer guide

Everything the app does, step by step. Version française

← Open the app

In short

The app listens to your tracks and places them on a perceived intensity scale from 0 (ambient) to 100 (paroxysmal). It also measures tempo, key, mood (dark ↔ bright), structure and timbre. With that, you can sort, compare playlists and generate sets that follow the energy curve you want.

Privacy. The analysis runs entirely in your browser. Your files are sent nowhere and not stored: only the measures are kept, in this browser (IndexedDB).

The score is a practical ranking tool, not a scientific measure. It adapts to your perception: corrections, lyrics ratings, duels, games, weights.

The interface is in English by default; switch to French in Settings › Language.

Getting started

You have your audio files

  1. Drop your files (MP3, WAV, FLAC, OGG, M4A…) or a whole folder in the area at the top of the app.
  2. The analysis starts by itself (several tracks in parallel). Follow the progress in the bar under the import area.
  3. Go to Library and open a track to see its curves and the detail of its score.

You have a Spotify playlist

  1. Spotify tab: create your developer app (once, see Spotify), log in and import the playlist.
  2. Live tab: the app plays each track on your Spotify and analyses it in real time.

You want to see how it works first

  1. Test bench tab › “Generate and analyse”: a series of synthetic tracks lands in the library.
  2. Live tab › tick Demo mode › “Start the scan”: the live scan, without Spotify.

Library open the tab ↗

Each row shows the name, a thumbnail of the intensity curve, the Music column (Camelot code, BPM, mood, genre), the score, the automatic score and any correction. ▶ plays the track: local files of this session play in the browser, tracks captured from Spotify play on your Spotify app (Premium, app open, logged in).

Next to the score, an arrow shows how it moved since the last algorithm update: green ▲ and the points gained, red ▼ and the points lost, a grey dash when it moved by 1 point or less. The same arrow shows in the Live tab's list.

Sorting and filtering

  • Score: choose how the intensity curve becomes a score. By default it is the mean of peaks (the 25 % most intense moments); you can also take the mean, the median, the peak or a perceptual mean.
  • Sort: by score, by curve statistic (start, end, variability), mood, BPM, Camelot order, genre, name or date.
  • Filters: status, intensity level, genre (a parent genre includes its sub-genres), vocals (sung, instrumental, to rate), and a box to hide the test tracks. The line under the filters says where the genres come from.

A track's details

  • Music: key (and the start and end keys), tempo and its steadiness, mood, structure in sections (a click plays from the section).
  • Genre and Lyrics: your labels (see Genres and Tuning it to how you feel).
  • Over time: the intensity curve, every sub-score, BPM, relative level, distortion, kick speed… A click on the curve plays from that point (local file, or Spotify for a capture).
  • Why this score?: the 8 dimensions, with their measures on hover.
  • Tracks with a close timbre, then the raw features and the history.
  • ⚑ Report for analysis: see Data, backup and reports.

Understanding the score

The track is analysed in 6 s windows, every 3 s. For each window, 8 dimensions are computed, then combined into an intensity. The track's score is the aggregation of that curve. The weights and the final calibration were fitted (algorithm 2.0) on a real 100-track library rated by ear, from ambient piano to extratone.

DimensionWhat it measures
EnergyOverall activity: spectral motion, attacks, tight dynamics, crushed master.
TempoSpeed of events (attacks per second), BPM weighted by its reliability, and the kick speed, never folded into 60–180: speedcore at 280 BPM or extratone at 600+ BPM count as fast.
DensityHow full the spectrum and time are.
BrightnessSpectral centre of gravity, energy in the highs.
HarshnessHow aggressive the timbre is: distortion (flat, saturated mids: guitars, saturated synths), noisy highs, clipping, compression. It weighs the most.
PressureKicks and bass that hit: low-end attacks, kick punch, crushed master; a little the weight of the low end. Independent of the file's volume.
ComplexityUnpredictability: irregular rhythm, non-repetitive pulse, changing timbre.
NoiseNoise character: flat spectrum, few notes. Pushes towards 100, but only tracks that are already intense or harsh.

Levels: Ambient (0–9), Calm (10–19), Soft (20–29), Laid-back (30–39), Groovy (40–49), Lively (50–59), Energetic (60–69), Powerful (70–77), Intense (78–85), Fierce (86–92), Extreme (93–96), Paroxysmal (97–100).

Every file is first brought to a reference loudness (-14 LUFS): a loudly mastered track gets no advantage. A low peak-to-loudness ratio only counts when there are attacks: a sustained pad is not “crushed”.
The distortion and kick speed measures come with extractor 1.4. Tracks analysed before keep a score computed with an approximation; analyse them again (file, or a new Live scan with “Re-analyse”) to use them.

Key, tempo, structure, mood

  • Key: for example “Am · 8A”. The Camelot code helps with transitions: same number, ±1, or the same number with the other letter mix well. The reliability says whether the key is clear.
  • Tempo: the BPM, its steadiness, and the alternative octave (a track at 87 BPM can feel like 174). The Set treats half and double tempo as compatible.
  • Structure: Intro, Build-up, Peak, Break, Section, Outro, from changes of timbre, harmony and level. It is only computed when the whole track was heard in one go (not for an analysis by excerpts).
  • Mood: from 0 (dark) to 100 (bright), from the major or minor mode, brightness, tempo, consonance and saturation. Combined with intensity, it gives a label: Euphoric, Dark / raging, Serene, Melancholic…

Tuning it to how you feel

The score is off

In the details, “The score is off” asks a few targeted questions (too calm? not aggressive enough?) and shows the old and new score before applying. You can also set a manual score, which wins over everything else.

Lyrics

A sung track does not feel the same depending on what it says. In the details, with the “Rate the lyrics” button of the library banner, or directly in the Live tab while a track is scanned, say whether the track is sung, then the mood of its lyrics, on three levels: joyful, tender, neutral, sad, dark or violent. Violent lyrics raise the perceived intensity (up to +9), tender ones soften it; the mood is adjusted too.

Assistant shortcuts: 1–6 for the mood, I for instrumental, → to skip.

When the open MusicBrainz database tags a track or its album “instrumental”, the app marks it so for you. Your own answer always wins.

Duels

The library's “Duels” button: “which one is more intense?”. The app picks pairs it hesitates about. After at least 6 answers, “Fit the weights” proposes new weights that respect your answers better. If your answers are not explained better, the current settings are kept. Shortcuts: ←, → and =.

Weights

Settings: the importance of each dimension in the intensity. “Learn from my corrections” proposes weights fitted to your corrections.

Games open the tab ↗

  • 📅 Daily track: one track a day, drawn from the whole Spotify catalogue with the date as seed, so everyone gets the same one. Press play: it plays on your Spotify and is analysed live (Live tab's capture and settings) while you set your guess on the dial. The needle drops once the analysis is done. Results and your daily streak stay in this browser; afterwards, keep the track in the library or discard it (undecided tracks leave the library the next day).
  • 🎯 Guess the score: a track plays from its most intense passage, its score hidden (and its title too, if you like). Guess from 0 to 100 on the dial (drag the needle, type a number or use the arrows), reveal, compare with the model. If you disagree, keep your guess as the track's score, or type another one.
  • ⚖ Compare > < =: two tracks the model places close to each other. Listen to both, answer A > B, A = B or A < B (arrow keys work). Your answers are saved as duels (they feed “Fit the weights”), and you can fix either score on the spot, or just play.
  • 🔎 Find this score: the app draws a score, find a Spotify track outside your library that gets it. Each candidate is analysed live, the needle right in the Games tab. Tried tracks leave the library when you move on, unless you keep them.

Shortcuts: D G C H switch game, Enter reveals then goes to the next round.

Games use the tracks playable here: local files of the session, and Spotify captures when you are logged in (Premium, Spotify app open).

Genres

Genres are your own taxonomy, as precise as you like. Separate the levels with › (or / or >): “Electronic › Hardstyle › Rawstyle”.

  1. Label a few tracks: in the details (Genre block), or with the library's Genres button, which shows the most uncertain tracks first. Enter saves, 1–9 picks a suggestion.
  2. The other tracks get a suggestion (in italics, followed by “?”) from the closest labelled tracks: timbre, intensity, mood, tempo. If the neighbours hesitate between two sub-genres, the suggestion goes up to the parent genre.
  3. A wrong suggestion? Type the right genre, or click another suggestion: your label always wins. “✓ That's it” confirms a right one.

Automatic genres (MusicBrainz)

Spotify no longer gives genres to new apps, so the app asks the open MusicBrainz database. Every analysed track without a genre is looked up automatically in the background: by its ISRC when the file's tags or Spotify know it, else by artist and title. The genres voted for the track, its album and its artist are merged, the track's own first. One track per second; results are cached. “Refresh genres”, under the library filters, looks every track up again. Names are placed in a hierarchy: “rawstyle” becomes Electronic › Hard dance › Rawstyle, “roots reggae” becomes Reggae › Roots Reggae. They are the default genre and the models for the other tracks' suggestions: fix a track in one click, your label always wins.

Optional: with your own free Last.fm API key (Settings), tracks MusicBrainz does not know get Last.fm's tags instead. You can also turn the automatic lookup off there.

Search and group by style

  • The library search also looks into genres (e.g. “reggae”, “hard dance”).
  • “Group by family / style / exact genre”: the library in sections, from the calmest styles to the most intense.
  • “By style, then increasing intensity” order: in the Progression tab and for the playlist created on Spotify.
  • Splitting into playlists by genre in the Set tab.

Spotify open the tab ↗

Setting up (once)

  1. On developer.spotify.com/dashboard, create an app (tick Web API, do not put “Spotify” in the name). The account must be Premium.
  2. Redirect URIs: add the address shown in the app's Spotify tab.
  3. User Management: add your Spotify account's e-mail.
  4. Copy the Client ID into the tab, then “Log in to Spotify”. The Client secret is not used.

Using it

  • Import a playlist you own or collaborate on (Spotify's rule for apps in development). Imported playlists are remembered; “Already imported” switches between them.
  • Importing again shows the tracks added and removed since last time, with a button to scan the new ones.
  • Matching: your files are matched to the tracks (ISRC, then title, artist and length). Tracks captured in the Live tab are recognised directly.
  • Map: each track by intensity and mood. Compare with overlays another playlist and shows a table of statistics.
  • Genres: fetched automatically (see Genres).
  • New ordered playlist: creates a private playlist sorted by intensity, or by style then intensity (the original playlist is never changed). Tracks not analysed or without a matched file go at the end, in the original order, or are excluded. For a custom curve, use the Set tab.

Live: real-time scan open the tab ↗

The app plays each track of the imported playlist on your Spotify app, captures the sound coming out of the PC and analyses it live. The audio is never recorded: it is analysed in memory, then discarded.

Capturing the sound (Windows)

  • System audio: in Chrome or Edge, choose “Entire screen” and tick “Also share system audio”. Nothing else must play during the scan.
  • Silent scan: install VB-Cable, then Windows Settings › Sound › Volume mixer › Spotify › Output = “CABLE Input”. In the tab, pick the “CABLE Output” input.
  • In Spotify, turn off Normalize volume and crossfade.

Modes

  • Adaptive: 3 s probes cover the track (never more than 20 s apart, so a drop cannot slip between two), then the remaining budget goes to the most intense passages.
  • Fixed excerpts: N excerpts of L seconds, evenly spread.
  • Fast review: listens only to the drops a previous scan found, with no probes. With “Only re-analyse tracks analysed with an older version”, it re-analyses the library quickly after an extractor update. A track never scanned gets the adaptive scan.
  • Whole track: the most faithful, identical to a file's analysis.

What the screen shows

Intensity gauge, curve and sub-scores, parts of the track heard, dimension radar, spectrum and spectrogram, meters and loudness, 17 live measures, the scan queue (it scrolls by itself, the page does not move; pick its play order: playlist, random, title, artist, album, duration, date added or score; ▶ on a track analyses it right away, even during a scan: the interrupted track comes right after) and the spread of scores by level. Under the title, rate the lyrics of the current track (instrumental / sung, mood, strength): the rating is applied when the track is saved. A full analysis is redone at the end of each track.

Demo mode: tick “Demo mode” to try all this without Spotify or audio sharing. A fake Spotify plays test bench tracks, and the real capture chain analyses them.

Set open the tab ↗

  1. Pick a curve shape (warm-up → peak → cool-down, steady climb, waves, plateau, intervals, wind-down) or draw your own: drag the points, click to add one, double-click to remove it.
  2. Choose the source (the whole library or an imported playlist) and the target length (0 = every track).
  3. Set the criteria: follow the curve, intensity seams, close tempo, compatible keys, timbre, mood.
  4. Add constraints if needed: first and last track, never the same artist twice in a row. In the result, 🔒 keeps a track and ✕ excludes it.
  5. “Generate the set”. Each transition has a smoothness rating, with the detail on hover. Export as M3U or text, or “Create on Spotify”.

Split into several playlists: by intensity, mood, timbre or genre. Each group can be created on Spotify.

Progression open the tab ↗

The whole library from calmest to most intense. The order is adjusted locally to smooth the transitions, within the chosen flexibility. Big jumps show missing in-between tracks. M3U or text export.

Sort a Spotify playlist: pick one of your playlists and “Sort it on Spotify”. The playlist itself is reordered in this order, without creating a new one: analysed tracks in order, the others at the end. Tracks are only moved, so none is removed or added and their added dates stay. “Undo” puts back the previous order.

A playlist's progression: with one of your playlists selected in “Spotify playlist”, “Build a progression” orders only its tracks, and lists the ones not analysed yet at the end. ✕ removes a track from the playlist on Spotify; “Add” searches your library and Spotify and adds the track to the playlist (a file from your library is added as its Spotify match).

Preview the drops: plays the progression as a quick preview, 8 seconds of each track from just before its biggest drop (its most intense passage when it has no drop). ▶ on a track starts from that one; playing anything else stops it. Tracks play from your files, or on Spotify for Live captures.

Rhythm open the tab ↗

Splits an imported track into notes, grouped by instrument (one lane per instrument), to create a rhythm game map. Listen to the original, an isolated lane or cues on every note, follow notes per second (KPS) and difficulty, tune the splitting, and split or merge instruments.

Test bench open the tab ↗

Synthetic tracks made in your browser, that move a single variable from min to max: tempo, brightness, pressure, harshness, noise, density, complexity, dynamics, key, mood, overall intensity. Plus sweeps (tempo 80 → 170 BPM, brightness, the noise coming in) and a track with a known structure.

  1. Pick the variables and the length, then “Generate and analyse”.
  2. The grid compares what is measured with what is expected (green = pass). “Details” opens the track, for example to see a sweep's curve.
  3. Test tracks stay in the library, tagged “Test”. Hide them with the filter, or delete them in one click.
They are caricatures: they check that every measure reacts in the right direction and over its whole range, not that the score is right on real music.

Data, backup and reports

  • Measures, scores, corrections, genres and ratings are stored in this browser (IndexedDB). A file imported again is recognised by its fingerprint and not analysed again.
  • Settings › Export the database (JSON): a full backup, without audio. It also holds your duels (> < =, from the Duels button and the Games tab, each with the scores and algorithm version at the time of the answer) and your reports for analysis, so they can be used to tune a later version of the algorithm. Importing merges everything without duplicates and without losing your corrections.
  • ⚑ Report for analysis (in a track's details): saves everything the model knows about the track (every measure and its curve, sub-scores and how they are built) with your comment and the score you expect. Settings › Reports for analysis exports them in one file to send, to get the model fixed on those tracks.
  • Settings › Export the diagnostic: a compact file for the whole library (scores, measures, genres, corrections, duels; no audio or paths).
  • When the algorithm changes version, scores are recomputed from the cached measures, without reading the audio. When the measures themselves change, the details advise a re-analysis.

Troubleshooting

Playback or re-analysis of a track is greyed out

The audio is not stored: local files play and re-analyse only when imported in this session (import it again: it is recognised, without a new analysis). Spotify captures play on your Spotify app when you are logged in with playback rights (log in again if you logged in before this feature).

Live: “No sound captured”

Check that Spotify plays on this PC, that you ticked “Also share system audio” (entire screen) or picked the “CABLE Output” input, and that nothing else plays. To check the chain without Spotify, use the demo mode.

Spotify 403 or 404

Error 403: account not added in User Management, no Premium, or missing playback control rights (log in again). Error 404: no active Spotify device; open the Spotify app on the PC and play a track once.

No genres

Genres are looked up on MusicBrainz automatically; the line under the library filters shows the progress. Obscure tracks may be missing there: add a Last.fm key in Settings, or label a few tracks, the others get suggestions.

The key or BPM looks wrong

The reliability is shown next to it. A BPM at half or double is a common ambiguity (the alternative octave is shown). An unreliable key points to ambiguous or very noisy harmony.

Sharing with the developer

Optional (Settings › Share with the developer, when the cloud is set up): sign in with Google and turn sharing on to send your duels, reports and a small profile. Only the admins can read them. “Delete my cloud data” removes everything you shared.

Starting over

Settings › “Delete local data”, after a JSON export if you want to keep your corrections.