Audial reads a song's BPM and key from the audio alone: drop the track on the Stem Separation tab and its BPM and key controls start at what was detected, or ask the API, the Python SDK (audial.analyze) or the analyze MCP tool, and an analysis adds a tempo map with every beat and bar.
$10 a month or $100 a year. Unlimited runs, cancel any time. 2 free runs to try it first.
Tempo and key are the first two things you need to know about a track, and Audial reads both from the audio, with nothing to tap and no file tags needed. On the website, drop a track on the Stem Separation tab: before anything is split, its BPM and key controls start at the tempo and key that were detected. Over the API it is one call to /functions/run/primary-analysis, in Python it is audial.analyze, and from Claude or Cursor it is the analyze MCP tool. Each gives you the BPM as a whole number and the key as a short name such as Amin.
When one number is not enough, run an analysis. It reads only the mix and in about half a minute returns the BPM, whether the tempo is constant or variable, the time signature, where bar 1 lands, and a tempo map: the track as constant-tempo pieces, from which every beat and bar time follows. A track that drifts, as live recordings do, comes back as more pieces instead of one tempo forced onto the whole song. Get audio features on the same analysis adds the key, its mode (major, natural minor, dorian and six more) and the loudness.
You rarely have to ask, either: when a stem split, analysis, sample pack or MIDI job arrives without a tempo or key, the API detects the ones it needs first, so a file is all you send.
What you get
- BPM and key from the audio alone: nothing to tap, no file tags needed
- On the website, the Stem Separation tab shows the detected BPM and key before you split
- One REST call, one Python line (audial.analyze) or one MCP tool (analyze)
- An analysis adds a tempo map: constant or variable tempo, time signature, bar 1 and every beat
- Audio features add the mode (nine of them, with a confidence) and the loudness
- Detected for you whenever a stem split, analysis, sample pack or MIDI job needs it
Hear it
- Lead-in
- Intro
- Up
- Chorus
- Up
- Chorus
- Down
- Outro
Audial's analysis of this mix: 129 BPM at a constant tempo, bar 1 at 5.77 s and 208 bars, with the sections drawn to scale. Hover a block for its times.
Audial vs doing it by hand
| Task | Audial | By hand |
|---|---|---|
| Tempo | Audial: Read from the audio: one BPM, or a tempo map from an analysis | By hand: Tap along or count beats against a clock; quick on a steady dance track |
| Key | Audial: Read from the audio, as a name such as Amin | By hand: Find the tonic on a keyboard and decide major or minor by ear |
| Tempo changes | Audial: An analysis marks the tempo constant or variable and maps each piece | By hand: Tap through the whole song and note every place it moves |
| Half time or double time | Audial: Reports one answer; it cannot know which feel you want | By hand: You decide how the track feels, which is what counts in a DJ set or a remix |
| Cost | Audial: The BPM and key check never counts as a run | By hand: Free, apart from your time |
Use it from code
# BPM and key in one call. The answer carries them as original.bpm and original.key.
curl -X POST "https://api.audialmusic.ai/api/functions/run/primary-analysis" \
-H "X-API-Key: your_api_key" -H "X-User-ID: your_user_id" \
-F "userId=your_user_id" \
-F "fileURL=@/path/to/track.mp3"
# The tempo map as well: analyse the mix (keep the exeId), then read the analysis.
curl -X POST "https://api.audialmusic.ai/api/functions/run/segmentation" \
-H "X-API-Key: your_api_key" -H "X-User-ID: your_user_id" \
-F "userId=your_user_id" \
-F "original=@/path/to/track.mp3"
curl "https://api.audialmusic.ai/api/db/your_user_id/execution/exe_12345abcde/analysis" \
-H "X-API-Key: your_api_key" -H "X-User-ID: your_user_id"import audial
audial.config.set_api_key("your_api_key")
audial.config.set_user_id("your_user_id")
info = audial.analyze("track.mp3")
print(info["bpm"], info["key"]) # a whole-number BPM and a key such as "Amin"
# The tempo map: constant or variable tempo, bar 1, and every beat and bar
seg = audial.segment("track.mp3")["audio_segmentation"]
print(seg["bpm"], seg["tempo_mode"], seg["time_signature"], seg["bar1"])
print(len(seg["grid"]["pieces"]), "constant-tempo pieces,", seg["grid"]["bar_count"], "bars")# In Claude, Cursor or any MCP client with audial-mcp installed:
"What are the BPM and key of ~/Music/track.mp3? Then tell me where bar 1 starts."Frequently asked questions
Drop the track on the Stem Separation tab of audialmusic.ai: before anything is split, its BPM and key controls start at the tempo and key Audial detected. From code, post the file to /functions/run/primary-analysis or call audial.analyze in Python, and both come back in the answer.
No. The BPM and key check is never counted as a run, on the website or over the API. A full analysis, with its sections and tempo map, counts as one run.
A short name: the root note followed by maj or min, such as Amin or Cmaj. Audio features on an analysis also give the mode, one of nine (major, natural, harmonic and melodic minor, dorian, mixolydian, lydian, phrygian and locrian), with a confidence from 0 to 1.
The quick check gives one whole-number BPM for the song. An analysis goes further: it says whether the tempo is constant or variable and describes the beats as a tempo map of constant-tempo pieces, so a track that speeds up or drifts gets a new piece wherever it moves.
Yes, where it is used: the MIDI job takes a bpm for its note timing, and an analysis takes the key as segmentationParameters.keyString, which the audio features then use. Leave them out and they are detected.
Yes. Post the file to https://api.audialmusic.ai/api/functions/run/primary-analysis with your X-API-Key and X-User-ID headers; the Python SDK wraps it as audial.analyze and the Audial MCP server as analyze. For the tempo map, post the mix to /functions/run/segmentation and read the analysis.
