关于 audio-to-midi
将音频转录为 MIDI 和 MusicXML,并生成节奏、调性、和弦等分析结果,适用于音乐制作和乐谱整理。可选择钢琴专用或通用转录引擎,也可先分离音轨。
主要功能
- 01音频转为 MIDI 与 MusicXML
- 02分析节奏、调性和和弦
- 03钢琴专用转录引擎
- 04Demucs 音轨分离
- 05调整音符检测参数
适用场景
- 01将钢琴录音转成 MIDI
- 02把混音分轨后分别转录
- 03从音频生成和弦与节奏分析
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ maystudios/ claude-skills --skill audio-to-midi安装后在 Claude Code 中输入/audio-to-midi确认已加载。
附带文件scripts/transcribe.py
详细介绍
音频转 MIDI
将音频文件转换为 MIDI 和 MusicXML,并进行完整的音乐分析(节奏、调性、和弦、力度、乐器)。
工具
脚本: scripts/transcribe.py —— 封装了 Basic Pitch、Demucs、librosa 和 music21。会自动安装依赖。
工作流
- 确定输入音频文件(MP3、WAV、FLAC、OGG、M4A)
- 确定选项:
- 分离音轨? 添加
--stems,先使用 Demucs 分离人声/鼓/贝斯/其他 - 输出目录? 使用
-o path,或默认输出到输入文件所在目录 - 跳过分析? 如果只需要 MIDI/MusicXML,添加
--no-analysis - 跳过 MusicXML? 如果只需要 MIDI,添加
--no-musicxml
- 分离音轨? 添加
- 运行转录脚本
- 向用户报告输出文件和分析摘要
引擎
| 引擎 | 标志 | 最适用于 | 准确率 |
|---|---|---|---|
| Basic Pitch | --engine basic-pitch(默认) | 混合/复调音乐 | 良好 |
| Piano Model | --engine piano | 钢琴/键盘音乐 | 96.7% F1 |
对于钢琴或键盘音乐,始终使用 --engine piano——它能捕捉延音/踏板,幽灵音符少得多,生成的 MIDI 也准确得多。
用法
# 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-analysis
输出文件
对于输入文件 song.mp3:
song.mid—— MIDI 文件(适用于 DAW、乐谱软件)song.musicxml—— MusicXML(适用于 MuseScore、Finale、Sibelius、Dorico)song_analysis.json—— 完整分析(节奏、调性、和弦、力度、频谱)
使用 --stems 时,每个音轨都会生成各自的 MIDI 和 MusicXML:
vocals.mid、vocals.musicxmldrums.mid、drums.musicxmlbass.mid、bass.musicxmlother.mid、other.musicxml
分析输出
_analysis.json 包含:
- tempo_bpm:检测到的 BPM
- key:检测到的调性和调式(例如,“A minor”)
- key_confidence:0-1 的置信度分数
- chords:带时间戳的和弦进行
- unique_chords:去重后的和弦列表
- dynamics:平均/最大/最小 dB、动态范围
- spectral:频谱质心、带宽、滚降、ZCR
- instrument_hints:检测到的乐器类别
调优参数
| 标志 | 默认值 | 效果 |
|---|---|---|
--onset-threshold | 0.5 | 值越高,幽灵音符越少,但可能漏掉较轻的音符 |
--frame-threshold | 0.3 | 值越高,音符检测越严格 |
--min-note-length | 58 | 最短音符时长,单位为 ms |
对于干净的录音(钢琴、吉他):默认值效果良好。
对于复杂的混音:使用 --stems 可获得最佳效果。
对于打击乐音乐:将起音阈值调低至 0.3-0.4。
依赖项
首次运行时自动安装:basic-pitch、librosa、music21、pretty_midi、numpy、onnxruntime。
使用 --stems 时:还会安装 demucs(包含 PyTorch)。
需要:Python 3.12(py -3.12)、ffmpeg(用于 MP3 解码)。
重要: 使用 py -3.12(而非 python)运行脚本。Python 3.14 与机器学习软件包存在兼容性问题。脚本会为 Basic Pitch 自动选择 ONNX 后端(兼容性最佳)。
支持的输入格式
MP3、WAV、FLAC、OGG、M4A、AAC、WMA