/transcribeConvert songs and instrument stems to MIDI
Send a full song or an isolated instrument stem. Your app or agent gets editable MIDI notes for arranging, practice, playback, analysis, or sound replacement.
How this endpoint works
Use this API to build an audio-to-MIDI converter, transcription tool, practice app, arrangement assistant, or DAW feature. Split a full song into stems first when users need separate bass, drum, vocal, and instrument MIDI. MuScriptor supports automatic or selected instruments and optional note quantization.
- 1
Choose the song or stem
Pass the audio ID and optionally select one isolated stem or the instruments to detect.
- 2
Wait for transcription
Save id and poll the MIDI transcription job until it finishes or fails.
- 3
Download the MIDI
Download the .mid file and open it in your app, DAW, piano roll, or notation pipeline.
Common use cases
Choose this operation when it matches the source and result your pipeline needs.
Learn an instrument part
Turn an isolated bass, drum, vocal, or instrument stem into notes users can inspect and practice.
Reorchestrate a song
Import the MIDI into a DAW, change instruments, correct notes, and reshape the arrangement.
Replace sounds with a VST
Use the detected notes to trigger drums, synths, samplers, or another instrument in your software.
Processing used by 80,000+ music makers
Results people rely on
“It can bring back clarity without making everything sound too artificial or overprocessed. Stem separation is also surprisingly clean.”
R.
Audio restoration and stem separation
“Does amazing job in restoring Audio from bad quality MP3s and badly extracted audio from CDs. Always my go to for audio restoration.”
N.
MP3 and CD audio restoration
“Amazing tool for audio. Clean, simple, and effective. I would spend hours in RX to get the same results. Give it a try. I can save you hours of production time.”
Dan Campbell ~Riffster
“Easy to use and high quality results.”
Bjark
Hear audio-to-MIDI results
These MIDI transcriptions were shared by users of the same processing system exposed through the API.
Choose how the MIDI tracks are created
MuScriptor Large
model="muscriptor-large"This model transcribes music into a MIDI file with multiple instruments. Its large training dataset and the computing power of the GPU it uses give it impressive performance. Note: this model does not generate note velocities.
Parameters
instrument_modeInstrument track modestringControls how instrument tracks are created. auto detects instruments, select uses the instruments list as guidance, and combine_melodic combines melodic parts. Omit it to infer the mode from instruments.
Allowed values
autoAutoDefaultRecommendedselectSelect instrumentscombine_melodicCombine melodic instruments
instrumentsInstrument guidanceArray<string>Guides which instrument tracks MuScriptor should transcribe. Transkun always produces one acoustic-piano track. Leave the list empty to detect instruments automatically. Use supported instrument IDs such as acoustic_guitar or their display names, such as Acoustic Guitar; names are normalized before processing. Accepts up to 128 names, each between 1 and 64 characters.
Allowed values
electric_bassBassacoustic_bassAcoustic BassdrumsDrumsacoustic_guitarAcoustic Guitarclean_electric_guitarClean Electric Guitardistorted_electric_guitarDistorted Electric Guitaracoustic_pianoAcoustic Pianoelectric_pianoElectric PianoorganOrgansynth_leadSynth Leadsynth_padSynth Padsynth_stringsSynth Stringsorchestra_hitOrchestra Hitstring_ensembleString EnsembleviolinViolinviolaViolacelloCellocontrabassContrabassorchestral_harpOrchestral HarpvoiceVoicechromatic_percussionXylophonetimpaniTimpanibrass_sectionBrass SectiontrumpetTrumpettromboneTrombonefrench_hornFrench HorntubaTubasoprano_and_alto_saxSoprano & Alto Saxophonetenor_saxTenor Saxophonebaritone_saxBaritone SaxophoneflutesFlutesclarinetClarinetoboeOboeenglish_hornEnglish HornbassoonBassoon
quantize_precisionNote quantizationstring | nullSets the timing grid for MIDI note starts and releases. Use null to preserve the timing detected by the transcription model.
Allowed values
1/41/81/8T1/161/16T1/321/32T
Transkun V2
model="transkun"This high-quality model turns a piano performance into a MIDI track. It captures the notes, their velocities, and pedal controls. Magical for piano, but not useful for other instruments.
Parameters
quantize_precisionNote quantizationstring | nullSets the timing grid for MIDI note starts and releases. Use null to preserve the timing detected by the transcription model.
Allowed values
1/41/81/8T1/161/16T1/321/32T
Code examples
Server-side example
import { writeFile } from "node:fs/promises";
const API_URL = "https://api.neuralanalog.com";
const API_KEY = process.env.NEURALANALOG_API_KEY;
async function waitForCompletion(objectType, objectId) {
while (true) {
const response = await fetch(`${API_URL}/status/${objectType}/${objectId}`, {
headers: { "X-API-Key": API_KEY },
});
if (!response.ok) {
throw new Error(`Status check failed with ${response.status}`);
}
const status = await response.json();
if (status.is_failed) {
throw new Error(status.error_message || `${objectType} processing failed`);
}
if (status.is_complete) {
return status;
}
await new Promise((resolve) => setTimeout(resolve, 5000));
}
}
const requestResponse = await fetch(`${API_URL}/transcribe`, {
method: "POST",
headers: {
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"audio_id": "6c62f8e7-02a3-48c0-a5b5-5de87ed9c31a",
"model": "muscriptor-large",
"instrument_mode": "auto",
"quantize_precision": "1/16"
}),
});
if (!requestResponse.ok) {
throw new Error(`Transcription request failed with ${requestResponse.status}`);
}
const result = await requestResponse.json();
const jobId = result["id"];
const status = await waitForCompletion("transcription", jobId);
const downloadResponse = await fetch(
`${API_URL}/download/transcription/${jobId}`,
{ headers: { "X-API-Key": API_KEY }, redirect: "follow" },
);
if (!downloadResponse.ok) {
throw new Error(`Download failed with ${downloadResponse.status}`);
}
await writeFile("transcription.mid", Buffer.from(await downloadResponse.arrayBuffer()));Parameters
Send the API key from a trusted server. Never expose it in client-side JavaScript.
JSON request body
audio_idIdentifies the parent audio to transcribe.
modelSelects MuScriptor Large for multi-instrument transcription or Transkun for piano transcription.
Default: "muscriptor-large"
instrument_modeControls how instrument tracks are created. auto detects instruments, select uses the instruments list as guidance, and combine_melodic combines melodic parts. Omit it to infer the mode from instruments.
Default: "auto"
chunkingControls MuScriptor scheduling. overlap uses overlapping 5-second windows with non-overlapping 4-second output cores; continuous uses one sequential lane of non-overlapping 5-second chunks; lane_interleave batches independent 30-second-or-longer lanes and propagates held notes within each lane.
Default: "lane_interleave"
instrumentsGuides which instrument tracks MuScriptor should transcribe. Transkun always produces one acoustic-piano track. Leave the list empty to detect instruments automatically. Use supported instrument IDs such as acoustic_guitar or their display names, such as Acoustic Guitar; names are normalized before processing. Accepts up to 128 names, each between 1 and 64 characters.
Example: ["acoustic_piano","electric_bass"]
quantize_precisionSets the timing grid for MIDI note starts and releases. Use null to preserve the timing detected by the transcription model.
source_transcription_idTranscription rendered into temporary_mix_key; retained as source lineage.
source_effects_appliedWhether the rendered source includes FX; false preserves live FX when selecting the output.
stem_idSelects one stem from the parent audio as the transcription source.
upscaled_idSelects a restored version of the parent audio as the source.
mastered_idSelects a mastered version of the parent audio as the source.
temporary_mix_keyShort-lived Current Main Mix or Current All Stems Mix R2 source key.
selectionLimits transcription to a start and end time in seconds. Omit it to transcribe the full selected source.
Successful response
idID of the queued transcription.
Example: "d66cf940-bf26-45bb-80f7-332f26b6859a"
statusQueueing status for the transcription job.
Example: "starting"
messageHuman-readable queueing result.
Example: "MIDI transcription started successfully"
Errors
X-API-Key returns an authentication error. Validation errors use the declared 422 response below.detailNo description provided.