mcpField
A
audio-to-midi

audio-to-midi

github.com/maystudiosクリエイティブ・メディア26105 回インストール11 週間前に更新
リポジトリ

audio-to-midi について

音声を MIDI と MusicXML に変換し、テンポ、調、コードなどを分析する文字起こしスキルです。ピアノ専用または汎用エンジンを選べ、音源分離にも対応します。

主な機能

  1. 01音声から MIDI と MusicXML への変換
  2. 02テンポ、調、コードの分析
  3. 03ピアノ専用の文字起こしエンジン
  4. 04Demucs によるステム分離
  5. 05音符検出パラメーターの調整

活用シーン

  1. 01ピアノ録音の MIDI 化
  2. 02ミックス音源を分離して個別に文字起こし
  3. 03音声からコードとテンポを分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/maystudios/claude-skills --skill audio-to-midi

インストール後、Claude Code で/audio-to-midiを入力して読み込まれたか確認します。

同梱ファイルscripts/transcribe.py

詳細

音声からMIDIへの採譜

音声ファイルをMIDIおよびMusicXMLに変換し、テンポ、キー、コード、ダイナミクス、楽器を含む詳細な音楽分析を行います。

ツール

スクリプト: scripts/transcribe.py -- Basic Pitch、Demucs、librosa、music21をラップします。依存関係は自動的にインストールされます。

ワークフロー

  1. 入力音声ファイルを特定します(MP3、WAV、FLAC、OGG、M4A)
  2. オプションを決定します:
    • ステムは必要ですか? --stems を追加すると、Demucsでボーカル/ドラム/ベース/その他を先に分離します
    • 出力ディレクトリは必要ですか? -o path を使うか、既定の入力ファイルのディレクトリを使用します
    • 分析をスキップしますか? MIDI/MusicXMLだけが必要な場合は --no-analysis を追加します
    • MusicXMLをスキップしますか? MIDIだけが必要な場合は --no-musicxml を追加します
  3. 採譜スクリプトを実行します
  4. 出力ファイルと分析の概要をユーザーに報告します

エンジン

エンジンフラグ最適な用途精度
Basic Pitch--engine basic-pitch(既定)ミックス/ポリフォニック音楽良好
ピアノモデル--engine pianoピアノ/キーボード音楽96.7% F1

ピアノまたはキーボードの音楽には、必ず --engine piano を使用してください。サステイン/ペダルを捉え、ゴーストノートが大幅に少なく、より正確なMIDIを生成します。

使用方法

# Piano music (recommended for piano/keyboard)
py -3.12 scripts/transcribe.py "piano.mp3" --engine piano

# General music (default engine: Basic Pitch)
py -3.12 scripts/transcribe.py "song.mp3"

# With stem separation (Demucs): each stem gets its own MIDI + MusicXML
py -3.12 scripts/transcribe.py "song.wav" --stems

# Custom output directory
py -3.12 scripts/transcribe.py "song.mp3" -o ./output --engine piano

# Tuning Basic Pitch sensitivity
py -3.12 scripts/transcribe.py "song.mp3" --onset-threshold 0.6 --frame-threshold 0.4

# MIDI only (skip MusicXML)
py -3.12 scripts/transcribe.py "song.mp3" --no-musicxml

# MIDI + MusicXML without analysis
py -3.12 scripts/transcribe.py "song.mp3" --no-analysis

出力ファイル

入力が song.mp3 の場合:

  • song.mid -- MIDIファイル(DAW、楽譜作成ソフトウェア用)
  • song.musicxml -- MusicXML(MuseScore、Finale、Sibelius、Dorico用)
  • song_analysis.json -- 詳細な分析(テンポ、キー、コード、ダイナミクス、スペクトル)

--stems を指定すると、各ステムから個別のMIDIとMusicXMLが生成されます:

  • vocals.mid、vocals.musicxml
  • drums.mid、drums.musicxml
  • bass.mid、bass.musicxml
  • other.mid、other.musicxml

分析出力

_analysis.json には次の項目が含まれます:

  • tempo_bpm:検出されたBPM
  • key:検出されたキーとモード(例:「A minor」)
  • key_confidence:信頼度スコア(0~1)
  • chords:タイムスタンプ付きのコード進行
  • unique_chords:重複を除いたコード一覧
  • dynamics:平均/最大/最小dB、ダイナミックレンジ
  • spectral:スペクトル重心、帯域幅、ロールオフ、ZCR
  • instrument_hints:検出された楽器カテゴリー

調整パラメーター

フラグ既定値効果
--onset-threshold0.5値を上げるとゴーストノートが減りますが、小さな音を見逃す可能性があります
--frame-threshold0.3値を上げるとノート検出がより厳密になります
--min-note-length58ノートの最小長(ミリ秒)

クリアな録音(ピアノ、ギター)では、既定値で適切に動作します。 複雑なミックスでは、最良の結果を得るために --stems を使用します。 パーカッシブな音楽では、オンセットのしきい値を0.3~0.4に下げます。

依存関係

初回実行時に自動インストールされます:basic-pitch、librosa、music21、pretty_midi、numpy、onnxruntime。 --stems を指定した場合:demucs(PyTorchを含む)もインストールされます。 必要なもの:Python 3.12(py -3.12)、ffmpeg(MP3のデコード用)。

重要: スクリプトの実行には python ではなく py -3.12 を使用してください。Python 3.14にはMLパッケージとの互換性の問題があります。スクリプトはBasic Pitch用に、最も互換性の高いONNXバックエンドを自動選択します。

対応入力形式

MP3、WAV、FLAC、OGG、M4A、AAC、WMA

コメント