名称: voice-note-to-midi
描述: 使用基于机器学习的音高检测与智能后处理,将语音备忘录、哼唱和旋律性音频录音转换为量化的MIDI文件
作者: Clawd
标签: [音频, midi, 音乐, 转录, 机器学习]
将您的语音备忘录、哼唱和旋律性录音转换为干净、量化的MIDI文件,可直接导入数字音频工作站(DAW)使用。
本工具提供一套完整的音频到MIDI转换流程,包含:
音频输入 (WAV/M4A/MP3)
↓
┌─────────────────────────────────────┐
│ 步骤 1: 音源分离 (HPSS) │
│ - 分离谐波内容 │
│ - 移除鼓/打击乐 │
│ - 噪声门控 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 步骤 2: 音高检测 │
│ - Basic Pitch ML 模型 (Spotify) │
│ - 复音音符检测 │
│ - 起始/结束时间估计 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 步骤 3: 分析 │
│ - 音级分布分析 │
│ - 调性检测 │
│ - 主导音符识别 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 步骤 4: 量化与清理 │
│ - 时值网格对齐 │
│ - 基于调性的音高校正 │
│ - 八度修剪 (移除谐波) │
│ - 基于重叠的修剪 │
│ - 音符合并 (连音) │
│ - 力度标准化 │
└─────────────────────────────────────┘
↓
MIDI 输出 (标准 MIDI 文件)
快速安装 (推荐):
cd /path/to/voice-note-to-midi
./setup.sh
此自动化脚本将执行以下操作:
- 检查是否安装了 Python 3.11+
- 创建 ~/melody-pipeline 目录
- 设置虚拟环境
- 安装所有依赖项 (basic-pitch, librosa, music21 等)
- 下载并配置 hum2midi 脚本
- 将 melody-pipeline 添加到您的 PATH 环境变量
手动安装:
如果您偏好手动设置:
mkdir -p ~/melody-pipeline
cd ~/melody-pipeline
python3 -m venv venv-bp
source venv-bp/bin/activate
pip install basic-pitch librosa soundfile mido music21
chmod +x ~/melody-pipeline/hum2midi
echo 'export PATH="$HOME/melody-pipeline:$PATH"' >> ~/.bashrc
source ~/.bashrc
cd ~/melody-pipeline
./hum2midi --help
将语音备忘录转换为 MIDI:
./hum2midi my_humming.wav
这将创建 my_humming.mid 文件,并使用十六分音符进行量化。
./hum2midi input.wav output.mid
| 选项 | 描述 | 默认值 |
|---|---|---|
--grid <value> |
量化网格:1/4, 1/8, 1/16, 1/32 |
1/16 |
--min-note <ms> |
最小音符时长(毫秒) | 50 |
--no-quantize |
跳过量化(输出原始的 Basic Pitch MIDI) | 禁用 |
--key-aware |
启用基于调性的音高校正 | 禁用 |
--no-analysis |
跳过音高分析和调性检测 | 禁用 |
./hum2midi melody.wav --grid 1/8
./hum2midi song.wav --key-aware
./hum2midi humming.wav --min-note 100
./hum2midi quick.wav --no-analysis
./hum2midi recording.wav output.mid --grid 1/8 --key-aware --min-note 80
您也可以将现有的 MIDI 文件送入量化流程进行处理:
./hum2midi input.mid output.mid --grid 1/16 --key-aware
这将跳过音频处理步骤,直接进入分析和量化阶段。
═══════════════════════════════════════════════════════════════
hum2midi - 旋律转MIDI流程 (Basic Pitch 版本)
[基于调性模式已启用]
═══════════════════════════════════════════════════════════════
输入: my_humming.wav
输出: my_humming.mid
→ 步骤 1: 音源分离 (HPSS)
正在分离旋律内容...
已加载: 5.23s @ 44100Hz
✓ 旋律音干已提取 → 5.23s
→ 步骤 2: 音频转MIDI (Basic Pitch)
正在对旋律音干运行 Spotify 的 Basic Pitch ML 模型...
✓ 原始 MIDI 已生成 (Basic Pitch)
→ 步骤 3: 音高分析与调性检测
检测到音符: 总计 42 个,7 个唯一音高
音符范围: C3 - G4
音级: C3, E3, G3, A3, C4, D4, G4
主导音符: G3 (占音符总数的 23.8%)
检测到的调性: G 大调
→ 步骤 4: 量化与清理
八度修剪: 移除了 3 个高于 67(中位数+12)的谐波音符
重叠修剪: 移除了 2 个位于重叠位置的谐波音符
音符合并: 将 5 个断奏片段合并为连音音符 (间隔<=60 ticks)
网格: 240 ticks (1/16)
音符: 38 个音符
调性: G 大调
基于调性: 2 个音符被校正到音阶内
速度: 120 BPM
✓ 量化后的 MIDI 已保存
═══════════════════════════════════════════════════════════════
✓ 完成!输出文件: my_humming.mid
═══════════════════════════════════════════════════════════════
📊 分析摘要
─────────────────────────────────────────────────────────────
检测到的音符: C3, E3, G3, A3, C4, D4, G4
检测到的调性: G 大调
量化: 基于调性模式 (音符对齐到音阶)
MIDI 信息: 38 个音符,7 个唯一音高,120 BPM
音高: C3, E3, G3, A3, C4, D4, G4
生成 MIDI 后,您可能需要:
通过 FFmpeg 支持的输入格式:
- WAV, AIFF, FLAC (未压缩,最佳质量)
- MP3, M4A, AAC (压缩,可接受)
- OGG, OPUS (开源格式)
- FFmpeg 支持的大多数其他格式
--min-note 阈值--key-aware 将音符限制在音阶内本工具集成了 Spotify 的 Basic Pitch,其基于 Apache 2.0 许可证授权。流程脚本和文档基于 MIT 许可证提供。