MIDI转换服务器

一个全面的MIDI转换服务器,支持将文本描述、乐谱图像和音频文件转换为功能齐全的多轨MIDI文件。

  • by bmcgauley
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 bmcgauley/midi_mcp

使用说明

MIDI转换MCP服务器

一个全面的模型上下文协议(MCP)服务器,将各种输入转换为功能性的多轨MIDI文件。支持文本描述、乐谱图像和音频文件。

特性

🎵 文本转换为MIDI

将自然语言描述转换为完整的MIDI作品:

  • 模糊提示:“生日快乐歌”→ 简单的旋律
  • 详细提示:“D小调140 BPM的dubstep drop,带有沉重的低音和咄咄逼人的鼓声”→ 全面生产
  • 人工智能发电 具有多种提供商选项:
    • 奥拉玛 (本地、免费、私人)-推荐给大多数用户
    • Anthropic Claude (云API,最高质量)
    • 基于规则 (无需人工智能,始终可用)
  • 支持多种仪器、标尺、按键和时间签名

📄 将乐谱转换为MIDI(OCR)

从图像中提取乐谱:

  • 扫描的乐谱
  • 手写乐谱照片
  • PDF音乐文件
  • 自动节奏和按键检测

🎧 音频转MIDI

将录音转换为MIDI:

  • 自动音调检测
  • 按音高范围选择轨道间距
  • 支持MP3、WAV、FLAC、OGG、M4A、AIFF
  • 节奏检测和音符提取

安装

先决条件

  • Python 3.8或更高版本
  • FFmpeg(音频处理所需)

安装FFmpeg

macOS:

brew install ffmpeg

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install ffmpeg

窗户: 下载自 ffmpeg.org 并添加到PATH

安装MCP服务器

  1. 克隆或下载此存储库:
cd midi_conversion_mcp
  1. 安装Python依赖项:
pip install -r requirements.txt
  1. (可选)设置AI提供程序以增强文本到MIDI的生成:

选项A:Ollama(本地,免费)

# Install Ollama from https://ollama.ai
# Pull a recommended model
ollama pull qwen2.5:14b

# Configure environment
export AI_PROVIDER="ollama"
export OLLAMA_MODEL="qwen2.5:14b"
export OLLAMA_ENDPOINT="http://localhost:11434"

选项B:API(云)

export AI_PROVIDER="anthropic"
export ANTHROPIC_API_KEY="your-api-key-here"

选项C:自动(先尝试Ollama,然后是Anthropic,然后是基于规则的)

export AI_PROVIDER="auto"

配置

添加到Claude桌面

添加到您的Claude Desktop配置(~/Library/Application Support/Claude/claude_desktop_config.json 在macOS上):

使用Olama(推荐本地/免费):

{
  "mcpServers": {
    "midi-conversion": {
      "command": "python",
      "args": ["/path/to/midi_mcp/midi_conversion_mcp.py"],
      "env": {
        "AI_PROVIDER": "ollama",
        "OLLAMA_MODEL": "qwen2.5:14b",
        "OLLAMA_ENDPOINT": "http://localhost:11434"
      }
    }
  }
}

使用无烟煤API:

{
  "mcpServers": {
    "midi-conversion": {
      "command": "python",
      "args": ["/path/to/midi_mcp/midi_conversion_mcp.py"],
      "env": {
        "AI_PROVIDER": "anthropic",
        "ANTHROPIC_API_KEY": "your-api-key-here"
      }
    }
  }
}

环境变量

  • AI_PROVIDER (可选):要使用的AI提供者- "ollama", "anthropic",或 "auto" (默认:自动)
  • OLLAMA_MODEL (可选):Ollama型号名称(默认值:qwen2.5:14b)。推荐:qwen2.5:14b,llama3.1:8b,或混音:8x7b
  • OLLAMA_ENDPOINT (可选):Ollama API端点(默认值:http://localhost:11434)
  • ANTHROPIC_API_KEY (可选):Claude-powered生成的人类API密钥

用法

MCP服务器提供三个主要工具:

1.文本到MIDI转换

工具: midi_convert_text_to_midi

将自然语言描述转换为MIDI文件。

参数:

  • prompt (必填):要生成的音乐的描述
    • 示例:“爵士钢琴即兴演奏”、“史诗管弦乐主题曲”、“dubstep drop”
  • tempo (可选):BPM(40-240),默认值120
  • duration_bars (可选):长度(1-64),默认值为8
  • time_signature (可选):“4/4”、“3/4”、“6/8”等,默认为“4/4
  • key (可选):“C”、“D#”、“Bb”等,默认为“C”
  • scale (可选):“major”、“minor”、“pentatonic_major”和“blues”等,默认为“main”
  • complexity (可选):“简单”、“中等”、“复杂”、默认“中等”
  • instruments (可选):乐器列表,如[“钢琴”、“贝司”、“鼓”]
  • output_filename (可选):自定义文件名(不带扩展名)

示例提示:

"Create a happy birthday song"
"Dubstep drop in D minor, 140 BPM, with heavy bass and drums"
"Jazz piano improvisation over a walking bass line"
"Epic orchestral theme with strings, brass, and timpani"
"Lo-fi hip hop beat with mellow Rhodes and vinyl crackle feel"
"Fast metal riff in E minor with distorted guitar"

2.将乐谱转换为MIDI

工具: midi_convert_sheet_music_to_midi

将乐谱图像转换为MIDI文件。

参数:

  • image_data (必需):Base64编码图像或图像的文件路径
  • image_format (可选):“png”、“jpg”、“jpeg”、“pdf”、默认“png”
  • auto_detect_tempo (可选):自动检测速度标记,默认为真
  • tempo (可选):如果auto_detect_tempo为假,则手动节奏
  • output_filename (可选):自定义文件名

支持的格式:

  • PNG、JPEG、BMP、TIFF图像
  • 带乐谱的PDF文件

例子:

# Using file path
image_data = "/path/to/sheet_music.png"

# Or using base64
with open("sheet_music.png", "rb") as f:
    import base64
    image_data = base64.b64encode(f.read()).decode()

3.音频转MIDI

工具: midi_convert_audio_to_midi

通过音调检测将音频文件转换为MIDI。

参数:

  • audio_data (必需):Base64编码音频或音频文件路径
  • audio_format (可选):mp3、wav、flac、ogg、m4a、aiff、默认wav
  • separate_tracks (可选):按音高范围分隔,默认为true
  • min_note_duration (可选):最小钞票长度(秒)(0.05-0.5),默认0.1
  • pitch_sensitivity (可选):检测灵敏度(0.1-1.0),默认0.5
  • output_filename (可选):自定义文件名

最佳结果:

  • 单声道音频(单乐器/语音)
  • 清晰无失真的录音
  • 最小背景噪声
  • 简单的旋律比复杂的复调音乐效果更好

输出

所有工具都会生成保存到的MIDI文件 /mnt/user-data/outputs/ 与:

  • 适当的多轨道结构
  • 分离的仪表通道
  • 正确的节奏和时间特征
  • 标准MIDI格式(.mid)与所有DAW兼容

通用MIDI乐器

服务器使用通用MIDI(GM)乐器标准。可用的仪器包括:

键盘:钢琴,电子琴,罗德斯,管风琴,教堂有机物 吉他:吉他、声学吉他、电吉他、失真吉他 低音:低音、声学低音、电低音、拍打低音 字符串:小提琴、中提琴、大提琴、弦乐、弦乐器 黄铜:小号、长号、大号、铜管 木管乐器:萨克斯、中音萨克斯、男高音萨克斯、长笛、单簧管、双簧管 音响合成器:synth_lead、synth_pad、synth_bass 打击乐器:鼓(自动使用MIDI通道10)

比例和模式

支持的文本到MIDI生成比例:

  • major -标准大比例尺
  • minor -自然小规模
  • harmonic_minor -未成年人,第7名
  • melodic_minor -未成年人,第六和第七次上升
  • pentatonic_major -五音大调五声音阶
  • pentatonic_minor -5音小调五声音阶
  • blues -带蓝色音符的蓝色音阶
  • dorian -多利安模式
  • phrygian -弗里吉亚模式
  • lydian -吕底亚模式
  • mixolydian -混合模式

技术细节

MIDI规范

  • 格式:标准MIDI文件(SMF)格式1
  • 决心:每季度480分
  • 频道:最多16个同步通道
  • 速度:动态速度范围(0-127)
  • 音符范围:MIDI音符21-108(A0-C8)

音频处理

  • 音高检测:使用librosa piptrack 算法
  • 温度检测:使用librosa进行节拍追踪
  • 采样率:自适应(保留原始或默认为22050 Hz)

图像处理

  • OCR引擎:基于OpenCV的员工队伍检测
  • 支持的DPI:建议使用300+以获得最佳效果
  • 颜色模式:支持灰度和彩色图像

故障排除

安装问题

“没有名为'mcp'的模块”:

pip install --upgrade mcp

“找不到FFmpeg”:

  • 确保FFmpeg已安装并位于您的PATH中
  • 测试: ffmpeg -version

“librosa导入错误”:

pip install --upgrade librosa soundfile numpy scipy

运行时问题

“AI生成服务不可用”:

  • 服务器将自动回退到基于规则的生成
  • 要使用AI生成,请设置 ANTHROPIC_API_KEY 环境变量

“音频转MIDI会产生错误的音符”:

  • 尝试调整 pitch_sensitivity (音符越少越低,音符越多越高)
  • 增加 min_note_duration 滤除噪声
  • 确保音频干净且单声道,以获得最佳效果

“乐谱OCR不准确”:

  • 使用高质量扫描(最小300 DPI)
  • 确保员工队伍和背景之间有良好的对比
  • 没有污渍或痕迹的干净乐谱效果最好

输出问题

“找不到生成的MIDI文件”:

  • 检查 /mnt/user-data/outputs/ 目录
  • 确保您具有写入权限
  • 在响应中查找错误消息

API 参考

响应格式

所有工具都返回markdown格式的响应,其中包含:

  • 下载生成的MIDI文件的链接
  • 使用的音乐参数
  • 轨道结构和仪器分配
  • 发电记录和统计

错误处理

错误以描述性消息的形式返回:

  • 输入验证错误指定了参数问题
  • 处理错误包括有用的建议
  • 文件系统错误表示权限或路径问题

例子

示例1:简单歌曲

prompt: "simple melody for a children's song in C major"
tempo: 100
duration_bars: 8
complexity: simple

示例2:电子音乐

prompt: "aggressive dubstep drop with wobble bass and drums"
tempo: 140
duration_bars: 4
key: "D"
scale: "minor"
complexity: complex
instruments: ["synth_bass", "synth_lead", "drums"]

示例3:经典作品

prompt: "baroque-style harpsichord piece"
tempo: 96
duration_bars: 16
key: "G"
scale: "major"
complexity: complex
instruments: ["piano"]  # piano approximates harpsichord

贡献

此MCP服务器是按照官方MCP最佳实践构建的:

  • 以代理为中心的设计,实现最佳LLM交互
  • 使用Pydantic进行全面的输入验证
  • 清晰、可操作的错误消息
  • 高效的上下文窗口使用

许可证

[在此处添加您的许可证]

版本

1.0.0-初始版本

作者

专为具有多模式输入支持的全面MIDI转换功能而构建。