audio-to-midi について
音声を MIDI と MusicXML に変換し、テンポ、調、コードなどを分析する文字起こしスキルです。ピアノ専用または汎用エンジンを選べ、音源分離にも対応します。
主な機能
- 01音声から MIDI と MusicXML への変換
- 02テンポ、調、コードの分析
- 03ピアノ専用の文字起こしエンジン
- 04Demucs によるステム分離
- 05音符検出パラメーターの調整
活用シーン
- 01ピアノ録音の MIDI 化
- 02ミックス音源を分離して個別に文字起こし
- 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をラップします。依存関係は自動的にインストールされます。
ワークフロー
- 入力音声ファイルを特定します(MP3、WAV、FLAC、OGG、M4A)
- オプションを決定します:
- ステムは必要ですか?
--stemsを追加すると、Demucsでボーカル/ドラム/ベース/その他を先に分離します - 出力ディレクトリは必要ですか?
-o pathを使うか、既定の入力ファイルのディレクトリを使用します - 分析をスキップしますか? MIDI/MusicXMLだけが必要な場合は
--no-analysisを追加します - MusicXMLをスキップしますか? MIDIだけが必要な場合は
--no-musicxmlを追加します
- ステムは必要ですか?
- 採譜スクリプトを実行します
- 出力ファイルと分析の概要をユーザーに報告します
エンジン
| エンジン | フラグ | 最適な用途 | 精度 |
|---|---|---|---|
| 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.musicxmldrums.mid、drums.musicxmlbass.mid、bass.musicxmlother.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-threshold | 0.5 | 値を上げるとゴーストノートが減りますが、小さな音を見逃す可能性があります |
--frame-threshold | 0.3 | 値を上げるとノート検出がより厳密になります |
--min-note-length | 58 | ノートの最小長(ミリ秒) |
クリアな録音(ピアノ、ギター)では、既定値で適切に動作します。
複雑なミックスでは、最良の結果を得るために --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