MusicXML Synthesizer について
MusicXML Synthesizerは、MusicXMLの楽譜をWAV音声に変換するMCPサーバーです。合唱練習向けに、パート選択やテンポ調整、練習用オプションに対応しています。
主な機能
- 01楽譜の解析とパート一覧表示
- 02WAV音声の合成
- 03パート別の再生選択
- 04テンポと音色の調整
- 05メトロノームとカウントイン
- 06楽譜概要と開始音の確認
活用シーン
- 01合唱の特定パートを個別に練習
- 02指定小節を繰り返し再生
- 03開始音で音程を確認
MCP 対応
楽譜の確認、パート選択、音声合成のツールをMCPクライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
4掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| musicxml | string | はい | 文字列形式の MusicXML ドキュメント |
詳細
synth-mcp
MusicXML から音声を合成する MCP サーバーです。声部(ソプラノ、アルト、テノール、バス)の選択とテンポの調整に対応しています。
機能
MusicXML の楽譜を受け取り、必要に応じて 1 つ以上の声部に絞り込み、FluidSynth を使って WAV 音声ファイルを生成します。特定の声部を練習したい合唱団員に役立ちます。
ツール
| ツール | 説明 |
|---|---|
get_parts | 楽譜に含まれるすべての声部を一覧表示します — 声部名、ID、小節数を返します |
synthesize | 楽譜全体(または選択した声部)を WAV ファイルに出力します。テンポ調整や練習用オプション(小節、繰り返し、カウントイン、メトロノーム、音色、声部ごとの音量)も指定できます |
starting_pitches | 各声部の最初の音をテキスト("S: D5, A: A4, T: F#4, B: D3")と短いピアノクリップで返します |
describe_score | 楽譜の概要を低コストで返します:タイトル、調、拍子、テンポ、声部(ID、音部記号、音域)、小節数、長さ |
list_capabilities | サーバーのメタデータを返します:バックエンドのバージョン、サウンドフォントの状態、FluidSynth の利用可否 |
health_check | サウンドフォント、FluidSynth、music21 がすべて利用可能で、準備できているか確認します |
インストール
cd synth-mcp
uv sync
必要なシステムライブラリ:
# Ubuntu / Debian
sudo apt install libfluidsynth-dev
# macOS
brew install fluid-synth
サウンドフォント(SF2)ファイルも必要です。無料で利用できるもの:
| サウンドフォント | サイズ | 備考 |
|---|---|---|
| TimGM6mb | ~6 MB | Ubuntu に付属します(/usr/share/sounds/sf2/TimGM6mb.sf2) |
| MuseScore General | ~200 MB | より高音質です。musescore.org からダウンロードできます |
| GeneralUser GS | ~30 MB | schristiancollins.com からダウンロードできます |
クイックインストール
上記の作業を手動で行いたくない場合は、./install.sh を実行してください。uv、システムの
libfluidsynth パッケージ、サウンドフォントが自動的にインストールされます。技術的な知識がなくても進められる手順は SETUP.md を、問題が発生した場合は TROUBLESHOOTING.md をご覧ください。
すぐに使えるクライアント設定(Claude Desktop、Cursor、Windsurf、Continue、Zed)は
examples/ にあります。
実行
SYNTH_SOUNDFONT_PATH=/usr/share/sounds/sf2/TimGM6mb.sf2 uv run synth-mcp
設定
| 変数 | 必須 | 説明 |
|---|---|---|
SYNTH_SOUNDFONT_PATH | はい | SF2 サウンドフォントファイルへのパス |
SHEET_MUSIC_OUTPUT_ROOT | いいえ | output_path がこのフォルダー内にある必要があります。また、musicxml_path からも読み取り可能です(デフォルト:作業ディレクトリ) |
SHEET_MUSIC_INPUT_ROOTS | いいえ | musicxml_path から読み取り可能な追加フォルダー(区切り文字は :。Windows では ;) |
Claude Desktop の設定
{
"mcpServers": {
"synth": {
"command": "uv",
"args": ["--directory", "/absolute/path/to/synth-mcp", "run", "synth-mcp"],
"env": {
"SYNTH_SOUNDFONT_PATH": "/absolute/path/to/soundfont.sf2"
}
}
}
}
使用例
// List parts in a score
{"tool": "get_parts", "arguments": {"musicxml": "<score-partwise>...</score-partwise>"}}
// The same, reading a file instead of copying the score into the conversation
{"tool": "get_parts", "arguments": {"musicxml_path": "scores/chorale.mxl"}}
// Synthesize the full score
{
"tool": "synthesize",
"arguments": {
"musicxml": "<score-partwise>...</score-partwise>",
"output_path": "/tmp/full.wav"
}
}
// Synthesize Soprano part only at 80% tempo
{
"tool": "synthesize",
"arguments": {
"musicxml": "<score-partwise>...</score-partwise>",
"output_path": "/tmp/soprano.wav",
"parts": ["Soprano"],
"tempo_factor": 0.8
}
}
// Practice track: Alto loud, others soft, bars 17-24 three times, one bar of count-in
{
"tool": "synthesize",
"arguments": {
"musicxml_path": "scores/chorale.mxl",
"preset": "learning",
"focus_part": "Alto",
"measures": [17, 24],
"repeat": 3,
"count_in_bars": 1
}
}
// Starting notes before singing
{"tool": "starting_pitches", "arguments": {"musicxml_path": "scores/chorale.mxl"}}
parts には、get_parts のパート ID("P1")、パート名("Soprano" など、大文字・小文字は問いません)、または声部(分割パートの場合は "S"、"Alto"、"Alt"、"A1")を指定できます。不明なパートを指定すると、有効な選択肢が返されます。
part_ids も引き続き使用できますが、マイナーバージョンのリリース 1 回分のみ有効な非推奨のエイリアスです。
musicxml を受け取るツールはすべて、代わりに musicxml_path も受け取ります(どちらか一方のみ)。指定できるのは、出力ルート内の .musicxml、.xml、圧縮形式の .mxl ファイル、クライアントが MCP ルートとして共有するフォルダー、または SHEET_MUSIC_INPUT_ROOTS 内のフォルダーです。musicxml_path の使用を推奨します。また、ほかのサーバーから返されたパスを渡すこともできます。describe_score はパート ID、音域、演奏時間を報告し、楽譜自体は返しません。
tempo_factor の範囲は 0.25~4.0 です。1.0 未満の値ではテンポが遅くなり、1.0 より大きい値では速くなります。音高には影響しません。
synthesize の練習用オプション(すべて省略可能です。指定しない場合は通常のトラックになります):
| オプション | 値 | 効果 |
|---|---|---|
measures | [start, end] | 指定した印刷上の小節のみ(弱起は 0) |
repeat | 1~20 | 選択範囲を指定回数再生 |
count_in_bars | 0~4 | 音楽の前にウッドブロックのクリック音を再生 |
metronome | true / false | 音楽の各拍でもクリック音を再生 |
timbre | score、piano、choir、organ | すべてのパートの音色(score の場合は楽譜の楽器を使用) |
preset + focus_part | learning(フォーカス 1.5、その他 0.5)、karaoke(フォーカスをミュート)、equal | パートの音量 |
part_gains | パート → 0.0~2.0 | パートごとの音量。プリセットより優先されます |
starting_pitches は常にテキストを返します。音声クリップ(モノラル 16 kHz WAV。200 KB 以下の場合はインラインで返されます)には、サウンドフォントと FluidSynth が必要です。これらがない場合は、audio_unavailable に理由が示されます。
テスト
# Unit tests (no soundfont required)
VIRTUAL_ENV= .venv/bin/pytest tests/ -v
# Integration tests (synthesizes real audio)
VIRTUAL_ENV= SYNTH_SOUNDFONT_PATH=/usr/share/sounds/sf2/TimGM6mb.sf2 \
.venv/bin/pytest tests/ -v -m integration
依存関係
- music21 — 楽譜の解析と MIDI エクスポート
- pyfluidsynth — FluidSynth 用 Python バインディング
- mcp — MCP プロトコル
既知の制限事項
- music21 の MIDI エクスポートでは、一部のアーティキュレーションや強弱記号が失われる場合があります
- 音声出力は常に WAV 形式です。必要に応じて
ffmpeg -i out.wav out.mp3で変換してください - 大規模な楽譜(100 小節以上)の合成には数秒かかる場合があります
システム要件
- Python 3.11+
libfluidsynth共有ライブラリ(Linux ではlibfluidsynth.so.3)- SF2 サウンドフォントファイル
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。