mcpField
M
MusicXML Synthesizer

MusicXML Synthesizer

ローカル
github.com/raulkiviメディア・デザイン12 日前に更新

MusicXML Synthesizer について

MusicXML Synthesizerは、MusicXMLの楽譜をWAV音声に変換するMCPサーバーです。合唱練習向けに、パート選択やテンポ調整、練習用オプションに対応しています。

主な機能

  1. 01楽譜の解析とパート一覧表示
  2. 02WAV音声の合成
  3. 03パート別の再生選択
  4. 04テンポと音色の調整
  5. 05メトロノームとカウントイン
  6. 06楽譜概要と開始音の確認

活用シーン

  1. 01合唱の特定パートを個別に練習
  2. 02指定小節を繰り返し再生
  3. 03開始音で音程を確認

MCP 対応

楽譜の確認、パート選択、音声合成のツールをMCPクライアントに提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"raulkivi-synth": {
"command": "uvx",
"args": [
"synth-mcp"
],
"env": {
"SYNTH_SOUNDFONT_PATH": "<SYNTH_SOUNDFONT_PATH>"
}
}
}
}
起動コマンドuvx synth-mcp
設定が必要な環境変数
SYNTH_SOUNDFONT_PATHPath to an SF2 soundfont file

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypisynth-mcp0.2.3

ツール

4

掲載時のツール一覧 · 2 週間前に更新

パラメーター型必須説明
musicxmlstringはい文字列形式の 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 MBUbuntu に付属します(/usr/share/sounds/sf2/TimGM6mb.sf2)
MuseScore General~200 MBより高音質です。musescore.org からダウンロードできます
GeneralUser GS~30 MBschristiancollins.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)
repeat1~20選択範囲を指定回数再生
count_in_bars0~4音楽の前にウッドブロックのクリック音を再生
metronometrue / false音楽の各拍でもクリック音を再生
timbrescore、piano、choir、organすべてのパートの音色(score の場合は楽譜の楽器を使用)
preset + focus_partlearning(フォーカス 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 サウンドフォントファイル

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。