使用方法
- 复制安装命令,在自己的智能体环境安装前先检查源码包。
- 从原始文档核对所需工具、凭据和支持的宿主。
- 说明输入材料与期望交付物,并对照来源检查输出。
npx skills add https://github.com/maystudios/claude-skills --skill audio-to-midi开始前需了解
- 安装不包含模型订阅、API 额度或访问文件的权限。
- 仓库星数和安装量反映活跃情况,不等于独立质量或安全测试。
按源仓库内容呈现,保留标题、案例、代码、表格、链接以及原文引用的演示图片。
Audio-to-MIDI Transcription
Convert audio files to MIDI and MusicXML with full music analysis (tempo, key, chords, dynamics, instruments).
Tool
Script: scripts/transcribe.py -- wraps Basic Pitch, Demucs, librosa, and music21. Auto-installs dependencies.
Workflow
- Identify the input audio file (MP3, WAV, FLAC, OGG, M4A)
- Determine options:
- Stems? Add
--stemsto separate vocals/drums/bass/other with Demucs first - Output dir? Use
-o pathor default to input file's directory - Skip analysis? Add
--no-analysisif only MIDI/MusicXML needed - Skip MusicXML? Add
--no-musicxmlif only MIDI needed
- Run the transcription script
- Report output files and analysis summary to user
Engines
| Engine | Flag | Best for | Accuracy |
|---|---|---|---|
| Basic Pitch | --engine basic-pitch (default) | Mixed/polyphonic music | Good |
| Piano Model | --engine piano | Piano/keyboard music | 96.7% F1 |
For piano or keyboard music, always use --engine piano — it captures sustain/pedal, has far fewer ghost notes, and produces much more accurate MIDI.
Usage
# Piano music (recommended for piano/keyboard)
py -3.12 scripts/transcribe.py "piano.mp3" --engine piano
# General music (default engine: Basic Pitch)
py -3.12 scripts/transcribe.py "song.mp3"
# With stem separation (Demucs): each stem gets its own MIDI + MusicXML
py -3.12 scripts/transcribe.py "song.wav" --stems
# Custom output directory
py -3.12 scripts/transcribe.py "song.mp3" -o ./output --engine piano
# Tuning Basic Pitch sensitivity
py -3.12 scripts/transcribe.py "song.mp3" --onset-threshold 0.6 --frame-threshold 0.4
# MIDI only (skip MusicXML)
py -3.12 scripts/transcribe.py "song.mp3" --no-musicxml
# MIDI + MusicXML without analysis
py -3.12 scripts/transcribe.py "song.mp3" --no-analysisOutput Files
For input song.mp3:
song.mid-- MIDI file (for DAWs, notation software)song.musicxml-- MusicXML (for MuseScore, Finale, Sibelius, Dorico)song_analysis.json-- Full analysis (tempo, key, chords, dynamics, spectral)
With --stems, each stem produces its own MIDI + MusicXML:
vocals.mid,vocals.musicxmldrums.mid,drums.musicxmlbass.mid,bass.musicxmlother.mid,other.musicxml
Analysis Output
The _analysis.json contains:
- tempo_bpm: Detected BPM
- key: Detected key and mode (e.g. "A minor")
- key_confidence: 0-1 confidence score
- chords: Time-stamped chord progression
- unique_chords: Deduplicated chord list
- dynamics: Mean/max/min dB, dynamic range
- spectral: Centroid, bandwidth, rolloff, ZCR
- instrument_hints: Detected instrument categories
Tuning Parameters
| Flag | Default | Effect |
|---|---|---|
--onset-threshold | 0.5 | Higher = fewer ghost notes, may miss quiet notes |
--frame-threshold | 0.3 | Higher = stricter note detection |
--min-note-length | 58 | Minimum note duration in ms |
For clean recordings (piano, guitar): defaults work well. For complex mixes: use --stems for best results. For percussive music: lower onset threshold to 0.3-0.4.
Dependencies
Auto-installed on first run: basic-pitch, librosa, music21, pretty_midi, numpy, onnxruntime. With --stems: also installs demucs (includes PyTorch). Requires: Python 3.12 (py -3.12), ffmpeg (for MP3 decoding).
Important: Use py -3.12 (not python) to run the script. Python 3.14 has compatibility issues with ML packages. The script auto-selects the ONNX backend for Basic Pitch (most compatible).
Supported Input Formats
MP3, WAV, FLAC, OGG, M4A, AAC, WMA


