FC2ブログ

773mbar

2018年11月 ≪  12345678910111213141516171819202122232425262728293031 ≫ 2019年01月
TOP ≫ CATEGORY ≫ 未分類
CATEGORY ≫ 未分類
      

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | Comments(-) | Trackbacks(-)

GarageBandからmidiファイルに書き出す

備忘録
MacのGarageBandで編集したデータをmidiファイルに書き出す方法。
ネット上では「できない」「Logicで」「MidiOプラグインを入れて(これは外部機器にmidiで出力するためのプラグインであってmidiファイルに書き出すものではない)」といったものがほとんど。
面倒、制限付き(1トラックのみ)ではあるが、Loopとして書き出し、そこからmidiファイル部分を取り出すことでなんとか実現できる。
以下、GarageBand 6.0.5で確認済み。

1. GarageBandで曲データを編集(ソフトウエア音源で)。
2. ファイルとして出力したい部分のループをすべて選択し、結合してひとつのループにする。
3. そのループを「ループライブラリに追加...」で書き出す。これで ~/Library/Audio/Apple Loops/User Loops/SingleFiles/ 以下に .aif ファイルとして保存される。
(GarageBandの過去バージョンでは、ここで既に .mid ファイルとしても保存されていたらしい)
4. .aif ファイルは、様々なフォーマットがパッケージングされたファイルなので、その中からmidiフォーマットのチャンクを取り出せばよい。
そのためのスクリプトがhttp://www.larskobbe.de/midi-export-in-apples-garageband/に公開されている(GB2MIDI)。このページはドイツ語だけど、スクリプトは .aif ファイルを選択(またはドラッグ&ドロップ)するだけなので難しい事は無い。
これで .mid のファイルが作成される。

スクリプトはパッケージの中を見てみればわかるが、実際の処理はperlで書かれている。
要となっているのは、
$pos = rindex($data, "MThd\x00\x00\x00\x06\x00\x00\x00\x01\x01\xE0MTrk");
これでmidiチャンクの先頭を調べて(あと終了点として次のチャンクの先頭も調べて)、
$midi_data = substr($data, $pos, $end-$pos);
これで取り出している。

スポンサーサイト
未分類 | Comments(0) | Trackbacks(-)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。