MIDI2MIDI(準備中)

システムのイメージ図
図 1. 本システムのイメージ図

複数の同一曲の演奏MIDIから同じ箇所のデータを取り出すためのシステムです. 例えば、複数の演奏から各セクションの冒頭音のタイミングを検出したい場合,1 つの演奏MIDIファイル(data 1 =参照演奏)の冒頭音の 位置データ(onset timing)を入力(data 3 )することで,他のMIDIファイル(data 2 =対象演奏)の該当部分の位置データを取り出すことができます.
2 つの MIDI ファイル(参照演奏と対象演奏)と,参照演奏内の注目したい音の時間を記録したテキストファイルを準備すると, 対象演奏側の注目したい音の時間をファイルに出力することができます(図 1 ). data 3 は無くても, システム内でdata1の任意の箇所にマークすることで(手動での設定)data 2 上の該当箇所を取り出すことができます.

次の手順で行います.

  1. 2つの MIDI ファイル(参照演奏data 1 と対象演奏data 2 )と参照演奏側の注目したい音の時間を記録したテキストファイルdata 3 を準備する.
  2. 中村栄太氏によるSymbolic Music Aligmnet Toolのシステムで 2 つの MIDI の演奏をマッチングしてファイルを生成する.
  3. 生成したファイルと時間を記録したテキストファイルを本システムに入力する.
  4. 必要に応じて修正する.
  5. 対象演奏側の時間を記録したテキストファイルを生成する.
(4) は必要ないことがありますので,まずは,(2) → (3) → (5) の順に説明し, より細かく設定したい場合や修正したい場合の方法を最後に説明します.

本マニュアルの目次は以下の通りです.

Symbolic Music Alignment Tool(by 中村栄太)

本システムを使用する際、中村栄太氏によるシステム「Symbolic Music Alignment Tool」を使用して、参照データ(*_fmt3x.txt対象データ(*_match.txtを作成する必要があります。
ここでは、そのシステムの使い方をご説明します。詳細については、手順2で解凍したフォルダの中にある MANUAL.pdf をご覧ください。

1. 導入とコンパイル(初回のみ)

  1. 中村栄太氏のサイト内( https://midialignment.github.io/demo.html )から AlignmentTool_v240109.zip をダウンロードする。
  2. ダウンロードしたZIPファイルを解凍(展開)する。(「AlignmentTool」という名前のフォルダができます)
  3. コマンドプロンプト(Windows)またはターミナル(Mac)を起動し、cd コマンド等で解凍先フォルダ「AlignmentTool」に移動する。
    ※Windows 11の場合、フォルダ内で右クリックして「ターミナルで開く」を選ぶと移動済みの状態で起動できます。
  4. 移動後、お使いのOSに合わせて以下のコード枠内をすべてコピーし、ターミナルに貼り付けて実行(Enter)します。

💻 Windowsの場合(コマンドプロンプト / ターミナル)

bash compile.sh

🍎 Macの場合(ターミナル)

chmod +x compile.sh Programs/WavToMIDIAlign/*.sh Programs/MIDIToMIDIAlign/*.sh *.sh
./compile.sh

※Macでは初回に実行権限の付与(chmod)が必要です。上記2行を一括コピーしてそのまま貼り付けてください。

2. マッチング(アライメント)の実行手順

  1. AlignmentTool」フォルダ内に、使いたい2つの MIDI ファイルをコピーする。
  2. お使いのOSに合わせて、以下のコマンドを実行します。
    【重要】 MIDIのファイル名が sample1.midsample2.mid の場合、末尾の拡張子(.mid)は省いて入力してください。

💻 Windowsの場合(コマンドプロンプト / ターミナル)

bash MIDIToMIDIAlign.sh sample1 sample2

🍎 Macの場合(ターミナル)

./MIDIToMIDIAlign.sh sample1 sample2
  1. 実行後、フォルダ内に fmt3x.txtmatch.txt を含む 5 つの .txt ファイルが作成されます。

📌 本システムでの利用について

本システム(MIDI2MIDI)では、生成されたファイルのうち *_fmt3x.txt*_match.txt の2つを利用します。(* 部分には任意の文字列が入ります)

本システムの基本

初期画面
図 2. 初期画面

ダウンロードしたファイルは圧縮している状態なので解凍(展開)してください. 解凍(展開)後,フォルダ内に 「into_20260303_windows(.exe)」または 「into_20260303_mac(.app)」 のがありますのでダブルクリック等で実行するとプログラムが動きます. (アプリの起動に若干間があります.)

プログラムを実行すると図 2 のようなウインドウが表示されます. 重要な (1) ファイルの入力と (6) 出力についてはこの後に, 「ファイルの入力と操作方法について」 「参照演奏側の注目したい音の入力について」 「対象演奏側の注目したい音の保存について」 して順に説明し, (2)~(5) は後で補助機能として補足的に説明します.

ファイルの入力と操作方法

図 2 の (1) はファイルの入力です.ファイルをウインドウ内に直接ドラッグ & ドロップしても入力できます. 対応ファイルは,Symbolic Music Aligmnet Toolで生成した *_fmt3x.txt*_match.txtと, 注目したい音の時間を記録した *_clean.txt です. (* 部分は任意の文字列です.)

図 3 は 本システムに*_fmt3x.txtを入力した状態です. 図 4 は さらに続けて*_match.txtを入力した状態です. *_fmt3x.txt*_match.txtを 2 つ同時に入力しても問題ありません.

fmt3x ファイルを入力した画面
図 3. *_fmt3x.txt 入力時の画面
match ファイルを入力した画面
図 4. 続けて*_match.txt 入力時の画面

図 4 では, 入力したファイル名が表示され(図 4 (1)), 上側に参照となる参照演奏が表示(図 4 (2))され, 下側に対象となる対象演奏が表示(図 4 (3))されます. 演奏はそぞれれの打鍵状態の音の高さを五線上(図 4 (4))の位置に, 音の長さを長さとしてバー(図 4 (5))で表示されます. 参照演奏と対象演奏のそれぞれの演奏で対応する音(バー)はペアとして線で結ばれます(図 4 (6)). 点線の赤丸で囲まれた音(バー)のように線で結ばれてない場合はペアの音が存在しない音(バー)であると判断された音(バー)になります.

本システムの基本的な操作方法は表 1 の通りです. 画面上のマッチングを編集する操作については,マッチングの修正に載せています.

表 1.基本的な操作方法一覧
入力 内容
ウインドウ下部のスクロールバー,または,矢印(←,→)キー 画面を左右にスクロールします.
矢印(↑,↓)キー 楽譜の左右の幅を拡大,縮小します.

参照演奏側の注目したい音の入力

入力するファイル *_clean.txt は次のように注目したい音の時間と番号(1 からの順)になっています. これは Sonic Visualiser などで作ることができます. また,ファイルがない時は手動での設定もできます.

4.735941043	1
8.359387755	2
12.531292517	3
16.390589569	4
20.914104308	5
...

注目する音(バー)はレイヤーで管理しています. 画面の右上の白い四角内にある [ + ] をクリックするとクリックした回数だけレイヤーが 1, 2, 3, ... と増えます. 例えば 3 回クリックすると図 5 のように 1 番から 3 番までのレイヤーが増えます. ちなみに,レイヤー 0 番はマッチングの情報を管理するための特別なレイヤーで, 詳しくは後で説明します.

レイヤーを 3 つ追加した状態
図 5. レイヤーを 3 つ追加した状態

ここで,(0 以外の) 青色の [ 1 ] と書かれたレイヤーを選びます.選ばれたレイヤーには下に▲が付きます. その状態で,先ほど準備した *_clean.txt をウインドウ内にドラッグ & ドロップすると 図 6 のように注目する音にレイヤーと同じ色(今回は青色)の枠が付きます. さらに,対象演奏側でマッチングしている音にも自動的に青色の枠が付いているのが分かると思います.

注目する音を選んだ状態
図 6. 注目する音(バー)

ここでは簡単にレイヤーを紹介しましたが,詳細についてはレイヤーの説明をご参照ください.

対象演奏側の注目したい音の保存

注目する音(バー)の保存は保存したいレイヤーを選んだ状態(保存したいレイヤーの下に▲がある状態)で, 左側のメニューの「output text(s)」をクリックします. 保存先を聞かれますのでフォルダを選ぶと, *_fmt3x_times.txt(参照演奏側の情報)と *_match_times.txt(対象演奏側の情報)という 2 つのファイルができます. このファイルはどちらも以下の様に 「番号,音(バー)の始まりの時間,音(バー)の終わりの時間,音(バー)の長さの時間」 となっています. (現時点では,このデータを本システムで再利用することはできません.)

1	2.851	4.467	1.616
2	4.467	4.582	0.115
3	4.735	5.240	0.505
...

注目する音(バー)の編集

注目する音は *_clean.txt で設定することもできますが, 個別の設定も可能です. 設定するには参照演奏の音(バー)をクリックしてください. 図 7 は左側の図が元の状態で, 右側の図は 6.5 秒頃にある C#4 の音(バー)をクリックした後の状態です. クリックした音(バー)とそれにマッチングしている対象演奏側にも青い枠が付いていることが分かります. (また,ここで注意して欲しいのは,右上の青色の [ 1 ] に▲がついていることです.[ 0 ] には追加できません.)

一般的に,多くの音(バー)をクリックするのは大変なので 参照演奏側の注目したい音の入力についてのようにファイルを準備した方が良いです.

もう一度クリックすると削除できます.バーの中央辺りをクリックすると追加や削除の操作がしやすいです.

注目する音の元の状態 注目する音を 1 つ追加した状態
図 7. 注目する音(バー)を手動で 1 つ追加する様子 (画像をクリックで拡大表示)

レイヤー

レイヤーは,表 2 の通りマッチングや注目する音(バー)の情報を管理します. 通常はレイヤー 0 とレイヤー 1 で十分かもしれませんが, 注目する音(バー)を複数参照したい場合などはレイヤー 2 以降も使用してください.

レイヤーは,画面右上の [ + ] をクリックすると追加され, 番号が書かれた四角い枠をクリックすることで選択できます. 選択されているレイヤーには下に▲のマークがつきますので, どのレイヤーを操作中か注意しながら編集を進めてください.

表 2.レイヤーの役割
レイヤー 役割
レイヤー 0 マッチングの編集
レイヤー 0 以外 (レイヤー 1, レイヤー 2, ...) 参照演奏側の注目したい音の入力について または 注目する音(バー)の編集

レイヤーは番号の下にある長方形の枠をクリックすると非表示にできます. 図 8 では, すべてのレイヤーを表示している場合(図 8 (左側))と, レイヤー 1 番とレイヤー 3 番を非表示にした場合(図 8 (右側))の例です. レイヤー 1 番とレイヤー 3 番を非表示にすると, 画面上ではレイヤー 0 番(マッチングの情報)とレイヤー 2 番の注目する音(バー)の枠(オレンジ色)のみが表示されます. 非表示のレイヤーは番号の下にある長方形の枠が白色に変り, もう一度クリックすると表示されます.

すべてのレイヤーが表示の状態 レイヤー 1 番とレイヤー 3 版が非表示の状態
図 8. レイヤーの表示と非表示 (画像をクリックで拡大表示)

補助機能

ここでは補助機能である 図 2 の (2)~(5) について各補助機能を説明します.

初期画面
図 2. 初期画面 (再掲)

時間の表示/非表示

図 2 (2) は,時間の表示/非表示の違いで, 図 9 のように五線の上下にある時間(数値)表示が変わります. 時間の表示が不要な時は,非表示にしていた方が全体の表示速度が少し高速になります.

「time」が表示の状態 「time」が非表示の状態
図 9. 「time」の表示(左図)/非表示(右図)の違い (画像をクリックで拡大表示)

同期

図 2 (3) は, 参照演奏と対象演奏について,画面中央の位置で現在演奏中の場所をそろえるかどうかです. 例えば参照演奏の演奏がゆっくりで時間が長く,対象演奏は速くて時間が短い場合に演奏の後半を表示すると 図 9 (右側) のように演奏が早く終わった方が見えなくなりますが, オンにすることで図 9 (左側) のように画面中央で演奏箇所がそろうようになります. オフにすると上下の時間が揃うので, 現在の演奏箇所の音(バー)で揃えたい(オン)か,または,時間を揃えたい(オフ)かで選択してください. オフの方が表示が速くなります.

「sync」がオンの状態 「sync」がオフの状態
図 10. 「sync」のオン(左)/オフ(右)の違い (画像をクリックで拡大表示)

#,♭の表示/非表示

図 2 (4) は,#や♭の文字列表示の違いです. 図 11 のように 表示にすると画面上に Bb4 や C#4 などが音(バー)の上に表示されます. 非表示にすると文字列は表示されずに,♭の音(バー)は少し低い位置に,#の音(バー)は少し高い位置に表示されます. 五線上では#と♭は見分けづらいので,その場合は表示にしてください.

「#,♭」が表示の状態 「#,♭」が非表示の状態
図 11. 「#,♭」の表示(左図)/非表示(右図)の違い (画像をクリックで拡大表示)

番号の表示/非表示

図 2 (5) は,それぞれの音(バー)に付けられている番号の表示/非表示です. 番号は演奏内の音(バー)の下側に付いていて,先頭から順に 1 から割り当てられています. 図 12 のように音(バー)の下につけられた番号が表示されたり消えたりします. 番号の表示が不要な時は,非表示にしていた方が全体の表示速度が速まります.

「note No.」が表示の状態 「note No.」が非表示の状態
図 12. 「note No.」の表示(左図)/非表示(右図)の違い (画像をクリックで拡大表示)

マッチングの修正

ここでは,マッチングの修正方法について説明します. 演奏が複雑な場合にはSymbolic Music Aligmnet Tool によるアウトプットも不正確なマッチングとなる場合があるので,その際には修正が必要です.

新しいペアの作成

参照演奏のバー上にマウスカーソルがある状態 マウスカーソルをドラッグしている状態 対象演奏のバー上までドラッグしている状態 新しいペアができた状態
図 13. 新しいペアの作成 (画像をクリックで拡大表示)

参照演奏と対象演奏のそれぞれの音(バー)の組み合わせで, ペアになっていて欲しいのにペアになっていない場合があります. その時は図 13 のように新しくペアを作ることができます. 手順は以下の通りです.

  1. レイヤー 0 を選択する.(マッチングの編集はレイヤー 0 に対応するので,右上の [ 0 ] の下に▲が付いている状態にしてください.)
  2. 参照演奏のペアにしたい音(バー)の位置にマウスカーソルを合わせてドラッグを開始する (図 13 (左上)).
  3. ドラッグすると選んだ音(バー)からマウスカーソルまで赤い線が延びる (図 13 (右上)).
  4. マウスカーソルを対象演奏のペアにしたい音(バー)の位置に合わせる (図 13 (左下)).
  5. マウスボタンから指を離す(ドラッグを止める)とそれぞれの音(バー)が青い線で結ばれる (図 13 (右下)).

[ヒント] 音(バー)の先頭ではなく,音(バー)の中央あたりをクリックすると操作しやすくなります.

このときすでにペアがある場合,参照演奏に元々あるペアは自動的に削除されますが,対象演奏に元々あるペアは残ります. 例えば,図 14 の場合は, 参照演奏の最初の音(バー)から対象演奏の先頭から 2 番目の音(バー)をペアにしていますが, 元々あった先頭の音(バー)ペアは消えていますが, 2 番目の音(バー)には 2 つのペアが残ったまま繋がっています. 不要な場合は削除の処理をしてください.

編集したマッチングの状態はファイルに保存することができます.

fmt3x ファイルを入力した画面
図 14. すでにペアがある場合の例

ペアの削除

ペアの線上にマウスカーソルがある状態 ペアを削除した状態
図 15. ペアの削除 (画像をクリックで拡大表示)

ペアを削除するには,ペアを表示している線の近くにマウスカーソルを合わせて(図 15 (左側)), ダブルクリックするとペアが削除されて線も消えます(図 15 (右側)). 図 15 では先頭から 2 つ目のマッチング(線)を削除しています.

編集したマッチングの状態はファイルに保存可能です.

マッチングデータの保存

編集したマッチングデータはファイルに保存し,その後も再利用できます. 保存方法は,レイヤー 0 番を選んだ状態(レイヤー 0 番の下に▲がある状態)で, 左側のメニューの「output text(s)」をクリックします. ファイルは入力した*_match.txtがあるフォルダに *_(保存時の時間の数字 12 桁)_match.txtというファイル名で保存されます.

次回は元の *_fmt3x.txt と, この新しい *_(保存時の時間の数字 12 桁)_match.txt の 2 つのファイルを入力すると 修正したマッチングで作業をすることができます.