mcpField
S
Singing Pitch Tracker

Singing Pitch Tracker

本地服务
github.com/raulkivi媒体与设计11 天前更新

关于 Singing Pitch Tracker

Singing Pitch Tracker 是面向歌者练习和乐谱分析的 MCP 服务,可从录音或麦克风音频检测音高并对齐 MusicXML 乐谱。它报告演唱位置及音准偏差,也支持按小节范围分析。

主要功能

  1. 01录音与实时麦克风音高检测
  2. 02对齐音频与 MusicXML 乐谱
  3. 03报告小节位置和音准偏差
  4. 04按指定小节范围分析
  5. 05管理练习会话并生成摘要

适用场景

  1. 01查看演唱时的乐谱位置
  2. 02找出演唱偏高或偏低的音符
  3. 03用录音分析指定小节的音准
  4. 04通过麦克风进行实时练习监测

MCP 相关

作为 MCP 服务,它向客户端提供录音分析、乐谱载入、实时监测、位置查询和会话管理工具。客户端可提交 MusicXML 与 WAV 录音,也可启动麦克风练习会话。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"raulkivi-pitch": {
"command": "uvx",
"args": [
"pitch-mcp"
],
"env": {
"PITCH_BACKEND": "<PITCH_BACKEND>"
}
}
}
}
启动命令uvx pitch-mcp
需要配置的环境变量
PITCH_BACKENDPitch detection algorithm: librosa (default) or crepe

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypipitch-mcp0.3.1

工具

7

收录的工具列表 · 更新于 2 周前

参数类型必填说明
part_idstring是要比较的声部 ID(例如 'Soprano')
musicxmlstring是作为字符串提供的 MusicXML 文档
audio_pathstring是16 位 PCM WAV 文件的绝对路径

详细介绍

pitch-mcp

用于实时音高检测和乐谱对齐的 MCP 服务。通过麦克风监听歌唱者,并报告其在乐谱中的当前位置,以及演唱是否准确。

功能

涵盖三个目标:

  • 目标 4 — 演唱时显示当前小节/拍位置
  • 目标 5 — 报告音高准确度(偏高/偏低/准确)
  • 目标 6 — 根据哼唱或演唱的乐句,识别歌唱者在乐谱中的位置

既支持对预录音频进行离线分析,也支持实时麦克风输入。

工具

工具描述
analyze_recording离线:根据参考 MusicXML 乐谱分析 WAV 文件;返回每个音符的准确度和 highlights(“E5 偏低,位于第 12–14 小节(平均低 35 音分)”)
start_practice一次调用即可加载乐谱并开启麦克风;返回 session_id
load_score将 MusicXML 乐谱加载到命名会话中;返回 session_id
describe_score以较低开销概述乐谱:标题、调性、速度、声部的 ID 和音域
start_monitoring开启麦克风并开始实时音高检测
get_current_position查询当前乐谱位置和音高准确度
stop_monitoring停止麦克风并返回包含 highlights 的会话摘要
list_sessions列出已打开的练习会话及其声部、状态(loaded/monitoring)和空闲时间
list_capabilities返回服务元数据:音高检测后端、麦克风可用性
health_check检查运行时依赖(librosa、sounddevice/portaudio)是否可用

乐谱可通过 musicxml_path(.musicxml、.xml 或 .mxl 文件,首选)或内联的 musicxml 文本提供,不能同时提供两者。路径必须位于输出根目录(SHEET_MUSIC_OUTPUT_ROOT,默认为工作目录)、客户端的 MCP 根目录或 SHEET_MUSIC_INPUT_ROOTS 中的文件夹内。

analyze_recording、load_score 和 start_practice 可选用 measures: [start, end](乐谱上标注的小节编号,包含首尾;弱起小节编号为 0),仅练习或分析指定小节。报告中的小节编号保留乐谱上的原编号。

安装

cd pitch-mcp
uv sync

实时监控(start_monitoring)需要 PortAudio:

# Ubuntu / Debian
sudo apt install libportaudio2

**快速安装:**在 Ubuntu/Debian/Linux Mint 上,运行 bash install.sh 即可自动处理 uv 和可选的 libportaudio2 安装;完整的非技术人员操作指南请参阅 SETUP.md。 examples/ 中提供了现成的客户端配置(Claude Desktop、Cursor、Windsurf、Continue、Zed)。如果遇到问题,请查看 TROUBLESHOOTING.md。

运行

uv run pitch-mcp

配置

变量默认值描述
PITCH_BACKENDlibrosa音高检测算法:librosa 或 crepe
PITCH_SESSION_IDLE_MINUTES10空闲达到指定分钟数后关闭练习会话(及其麦克风);0 表示永不关闭。会话关闭后的一小时内,stop_monitoring 仍会返回其摘要,并附带 "timed_out": true。

crepe 需要手动安装 TensorFlow(约 500 MB),并会在首次使用时下载约 50 MB 的模型权重。默认的 librosa 后端(pYIN 算法)无需额外设置,即可很好地处理歌声。

使用示例

// Offline analysis of a recording
{
  "tool": "analyze_recording",
  "arguments": {
    "audio_path": "/path/to/recording.wav",
    "musicxml_path": "/path/to/score.mxl",
    "part": "Soprano"
  }
}

// Real-time session
{"tool": "describe_score", "arguments": {"musicxml_path": "/path/to/score.mxl"}}
// → returns parts with IDs ("P1" …), names and ranges

{"tool": "start_practice", "arguments": {"musicxml_path": "/path/to/score.mxl", "part": "Alto", "measures": [17, 24]}}
// → returns {"session_id": "abc123", "measure_count": 8, ..., "status": "started"}
// (the same as load_score followed by start_monitoring)

{"tool": "get_current_position", "arguments": {"session_id": "abc123"}}
// → returns measure, beat, expected pitch, detected pitch, accuracy

{"tool": "stop_monitoring", "arguments": {"session_id": "abc123"}}
// → summary with accuracy_histogram and highlights, e.g. "flat in m.19–21 (-32 cents avg over 5 notes)"

音频必须为 16 位 PCM WAV 格式。不支持 MP3 和 FLAC。

测试

# Unit tests (no microphone or audio required)
VIRTUAL_ENV= .venv/bin/pytest tests/ -v

# Integration tests (offline analysis against a committed fixture pair)
VIRTUAL_ENV= .venv/bin/pytest tests/ -v -m integration

# Manual tests (real microphone required — skip in CI)
VIRTUAL_ENV= .venv/bin/pytest tests/ -v -m manual

总计 300 项测试中有 294 项是单元测试(运行 292 项,跳过 2 项),使用模拟对象和合成的(内存中)WAV 数据运行——不需要真实音频硬件或预录制的测试样本。其余 6 项标记为 integration(4 项——使用已提交的 tests/fixtures/ 文件对进行离线分析)或 manual(2 项——完整的真实麦克风会话生命周期测试);这些测试由 tests/conftest.py 从普通的 pytest tests/ 运行中排除。使用 -m integration/-m manual 显式选择运行。

依赖项

  • librosa — pYIN 音高检测(主要后端,纯 Python)
  • music21 — 乐谱解析和音高计算
  • sounddevice — 实时麦克风输入
  • numpy、scipy — 数值计算
  • mcp — MCP 协议

系统要求

  • Python 3.12+
  • libportaudio2 — 实时麦克风输入(start_monitoring)所需
  • 离线分析无需系统库

阶段状态

阶段状态
阶段 A — 离线分析已完成。基于 DTW 的对齐(dtaidistance);292 个单元测试,以及针对已提交样例对(tests/fixtures/)的 4 个 -m integration 测试
阶段 B — 实时监控已完成。位置跟踪由音频驱动(匹配检测到的音高,而非仅依赖经过的时间);支持 tempo_bpm 覆盖。通过使用模拟 sounddevice 的单元测试验证;另有完整生命周期的 -m manual 测试用于验证真实麦克风,但运行这些测试需要真实硬件

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。