ABC记法音乐播放器

一个使用Python编写的程序,能够通过MIDI输出端口播放ABC记法的文本,支持MIDI文件和LilyPond格式的转换和播放。

  • by nexis-yamamoto
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 nexis-yamamoto/rappa

使用说明

拉帕

播放ABC记法文本的python程序

使用MIDI输出端口播放。OS上的MIDI输出设备(虚拟MIDI驱动程序、DAW、硬件音源等)。

前提条件

  • Python 3.10以上
  • MIDI输出设备(虚拟MIDI驱动程序或DAW)可用
    • 视窗: loopMIDI、virtualMIDI、或DAW虚拟端口
    • macOS:IAC驱动程序或DAW虚拟端口
    • Linux:ALSA MIDI设备或FluidSynth

正常使用

用ABC记法演奏

python rappa.py "C D E F G A B c"
python rappa.py "C2 D2 E2 F2"
python rappa.py "C D E z E F G z"
python rappa.py "C ^C D _E E"  # 臨時記号付き

演奏MIDI文件

python rappa.py song.mid
uv run rappa.py music.midi

演奏LilyPond(.ly)

python rappa.py score.ly
python rappa.py "\\relative c' { c4 d e f }"

初始安装仅支持音高、音效和节奏(忽略动力学和艺术)。

支持LilyPond打击乐器部分

LilyPond的\drummode以及\DrumStaff支持打击乐器记谱。打击乐器事件输出到MIDI通道10(符合通用MIDI标准的打击通道)。

对应的鼓名(LilyPond名→GM打击乐器):

|LilyPond名称|GM打击乐器|MIDI笔记本编号| |-----------|---------|--------------| | bd |原声低音鼓|36| | sn |声学蜗牛|38| | hh |封闭式帽子|42| | hhc |封闭式帽子|42| | hho |打开Hi Hat | 46| | cymc |撞击钹1|49| | toml |低汤姆|45| | tomm |嗨,汤姆,48岁| | tomh |高汤姆|50|

使用例:

# 単純なドラムパターン
python rappa.py "\drummode { bd4 hh sn hh bd hh sn hh }"

# 同時打撃(コード記法)
python rappa.py "\drummode { <bd hh>4 <sn hho>4 }"

# メロディとドラムの並行パート
python rappa.py "<< \new Staff { c'4 d' e' f' } \new DrumStaff \drummode { bd4 sn hh cymc } >>"

制限事项:

  • 不包含在上述列表中的鼓名将输出警告并跳过(不会出错)
  • 音阶/重音当前为固定值(64)
  • 忽略动态和角色等装饰

将ABC标记保存为MIDI文件

python rappa.py "C D E F G A B c" --save output.mid
python rappa.py "C _E F G" -s blues.mid
uv run rappa.py "C D E F G A B c" --save scale.mid

保存的MIDI文件可以在其他DAW软件和音乐播放器中播放和编辑。

用作MCP服务器

可以将rappa用作MCP服务器。

新电脑的安装步骤

前提条件

  • 安装Python3.10以上
  • 紫外线已安装(建议)

手顺

  1. 克隆存储库:
git clone https://github.com/nexis-yamamoto/rappa.git
cd rappa
  1. 使用uv时(推荐):
# 依存関係をインストール
uv add mcp mido python-rtmidi python-ly

# 動作確認
uv run rappa_mcp_server.py
  1. 使用pip时:
# 依存関係をインストール
pip install -e .

# 動作確認
python rappa_mcp_server.py

在VS代码中设置

VSCode的MCP设置文件(%APPDATA%\Code\User\mcp.json)中添加以下内容:

{
  "servers": {
    "rappa": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\gits\\rappa",
        "run",
        "rappa_mcp_server.py"
      ],
      "type": "stdio"
    }
  }
}

注意: C:\\gits\\rappa的部分请更改为在您的环境中克隆的实际路径。

设置后,在VSCode的命令调色板(Ctrl+Shift+P)中运行“MCP:Restart Server”以启动服务器。

启动MCP服务器(手动测试)

python rappa_mcp_server.py
# または
uv run rappa_mcp_server.py

可用工具

  1. play_abc_notation -播放ABC记法音乐

    • 引数: abc_notation (字符串)-ABC符号字符串
    • 例: "C D E F G A B c"
  2. play_lilypool -将LilyPond文本转换为MIDI并播放

    • 引数: lilypond_content (字符串)-LilyPond源
    • 例: "\\relative c' { c4 d e f }"
  3. parse_abc_note -分析ABC符号的音符

    • 引数: note (字符串)-要分析的音符
    • 例: "C2", "D/2", "z"
  4. get_note_频率 -获取可用音符和频率列表

在Claude桌面应用程序中设置

%APPDATA%\Claude\claude_desktop_config.json 添加:

{
  "mcpServers": {
    "rappa": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\gits\\rappa",
        "run",
        "rappa_mcp_server.py"
      ]
    }
  }
}

注意: C:\\gits\\rappa的部分请更改为在您的环境中克隆的实际路径。

设置后,请重新启动Claude桌面应用程序。

关于ABC记法

  • 音符:C,D,E,F,G,A,B(低八度),c,d,e,f,g,a,b(高八度)
  • 休符z
  • 长度:后面加上数字会变长(例如:C2是2倍)
  • 短的:/数字变短(例如:C/2为一半)
  • 临时记号:
    • ^:锐化示例: ^F是F#
    • _:平坦(降低半音)示例: _B是B♭
    • =:自然(取消临时符号)示例: =A

关于MIDI再生

rappa是美度和python rtmidi使用库通过MIDI输出端口播放。LilyPond输入也要转换为MIDI后再播放。

主要功能

  1. 播放MIDI文件:将现有MIDI文件发送到MIDI输出端口并演奏
  2. MIDI保存:将ABC记法作曲的音乐保存为MIDI文件

所需MIDI输出设备

rappa需要系统有MIDI输出端口才能发出声音。如果没有MIDI输出端口,则显示错误。

设置虚拟MIDI驱动程序

  • 视窗: loopMIDI安装
  • macOS:系统设置>MIDI设置>启用IAC驱动程序
  • Linux:安装流体系统(sudo apt install fluidsynth)

或者,也可以使用“数字审计工作station”中的虚拟MIDI输入。

技术细节

  • MIDI珀斯: mido在库中分析MIDI事件
  • MIDI出力: python-rtmidi将条目添加到文档注册表
  • 周波数变换:MIDI备注编号⇔频率的相互转换
    • A4(440Hz)=基于MIDI注释编号69
    • 12平均律: freq = 440 * 2^((note-69)/12)

使用例

# ブルースを作曲してMIDI保存
uv run rappa.py "C _E F G F _E D C2" --save blues.mid

# 保存したMIDIを再生
uv run rappa.py blues.mid

# 複雑な曲をMIDI保存
uv run rappa.py "C E G c G E C2 D F A d A F D2" -s arpeggio.mid