mcpField
A
audio-to-midi

audio-to-midi

github.com/maystudios创意与媒体26105 次安装11 周前更新
代码仓库

关于 audio-to-midi

将音频转录为 MIDI 和 MusicXML,并生成节奏、调性、和弦等分析结果,适用于音乐制作和乐谱整理。可选择钢琴专用或通用转录引擎,也可先分离音轨。

主要功能

  1. 01音频转为 MIDI 与 MusicXML
  2. 02分析节奏、调性和和弦
  3. 03钢琴专用转录引擎
  4. 04Demucs 音轨分离
  5. 05调整音符检测参数

适用场景

  1. 01将钢琴录音转成 MIDI
  2. 02把混音分轨后分别转录
  3. 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。会自动安装依赖。

工作流

  1. 确定输入音频文件(MP3、WAV、FLAC、OGG、M4A)
  2. 确定选项:
    • 分离音轨? 添加 --stems,先使用 Demucs 分离人声/鼓/贝斯/其他
    • 输出目录? 使用 -o path,或默认输出到输入文件所在目录
    • 跳过分析? 如果只需要 MIDI/MusicXML,添加 --no-analysis
    • 跳过 MusicXML? 如果只需要 MIDI,添加 --no-musicxml
  3. 运行转录脚本
  4. 向用户报告输出文件和分析摘要

引擎

引擎标志最适用于准确率
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.musicxml
  • drums.mid、drums.musicxml
  • bass.mid、bass.musicxml
  • other.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-threshold0.5值越高,幽灵音符越少,但可能漏掉较轻的音符
--frame-threshold0.3值越高,音符检测越严格
--min-note-length58最短音符时长,单位为 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

评论

支持 Markdown