Skip to main content

Overview

AudioPod’s audio-to-MIDI engine transcribes bass, vocals, and piano in a recording into note-level MIDI — bass is the strongest instrument. Guitar is supported too but is opt-in/experimental. Use it standalone on a full mix (we split it into stems first, then transcribe each requested stem) or as an add-on to a stem-separation job you already ran (transcribe-only, no re-split).
This is a starting-point transcription, not a note-perfect one. Bass is the strongest instrument; expect to tidy timing and note lengths by ear in your DAW. Dynamics (velocity) are approximate. Drums aren’t transcribed yet — a requested drums (or other) stem is accepted but comes back in skipped_stems. Guitar is opt-in and experimental — it over-detects on busy mixes, so it isn’t requested by default. Detected tempo is surfaced as detected_tempo_bpm.

Key Features

  • Standalone or add-on: convert a raw file/URL, or transcribe stems from an existing stem-separation job
  • Per-stem + multitrack output: individual .mid per stem, plus a merged multitrack .mid with tempo metadata
  • Tempo detection: auto-detected via beat tracking, or pass an explicit tempo_bpm override
  • Presigned downloads: direct URLs for every output file

Installation

Authentication

Get your API key from the API Keys Dashboard.

Convert From a File or URL

Standalone conversion splits the mix into stems, then transcribes each requested stem. Provide either file or url — not both. stems defaults to ["bass", "vocals", "piano"] — the strongest instruments — when omitted. guitar is supported but opt-in/experimental (it over-detects on busy mixes), so pass it explicitly if you want it. drums and other are accepted but are never transcribed — they always come back in skipped_stems.

Options

Tunables forwarded to the audio-to-MIDI engine, passed as options (a JSON object):

Convert From an Existing Stem-Separation Job

If you already ran stem separation, transcribe its output directly — no re-split, so it bills the add-on rate only. stems must be a subset of the stems the source job produced, and defaults to all of them when omitted — drums/other stems still come back in skipped_stems (never transcribed), and guitar remains opt-in/experimental.
If the source stem job’s output has expired under your plan’s retention window, this returns 410 Gone — re-run stem separation first.

Job Status & Stages

stage tracks pipeline progress for a PROCESSING job:

Other Job Endpoints


Output Format

Completed Job Response:
  • midi_urls — presigned download URL per transcribed stem’s .mid file
  • merged_midi_url — a single multitrack .mid with all transcribed stems as separate tracks plus tempo metadata
  • stem_urls — the separated stem audio (standalone mode only, so you can preview what was transcribed)
  • skipped_stems — stems requested but not transcribed (always drums and other, if requested — they’re not part of the transcribable set)
  • failed_stems{stem: error_message} for any stem the engine couldn’t transcribe; the job still completes if at least one stem succeeded
All download URLs are presigned and expire — call the status endpoint again to mint fresh ones.

Status Codes


Pricing

See audiopod.ai/pricing for current rates, or check your estimated cost before converting via the API Wallet.

Next Steps

Stem Separation

Separate a mix into stems before (or instead of) converting to MIDI.

API Wallet

Manage billing and view usage history.