Open1
AudioToolbox: MIDIシーケンスが勝手に変換される
macOSのAudioToolboxに、MusicSequenceFileLoad
というAPIがあって、これを使って標準MIDIファイルフォーマットのファイルを開くことができます。MusicPlayer
を使えばそれを再生することもできます。
で、MusicSequenceFileLoad
でファイルを開いて、MusicSequenceFileCreateData
というのを使うとCFData
にMIDIデータを書き出すことができます。
で、このCFData
に書き込まれるデータが、直接バイナリデータとしてData(contentsOf:)
などで読み込んだものと違うんですね。
元のMIDIファイルの先頭トラックにテンポ関連以外の情報が入っていると、テンポ関連だけ抜いてテンポトラックを生成して、元のトラックからはテンポ関連のデータを抜いたり、ベロシティ0のノートオンをノートオフに書き換えたり、そんなことをしています。
要は一回自分なりに解析したMIDIシーケンスをバッファに再度書き込むというような動きになっています。
そりゃそうかという気もしますが、最初は自分の問題かと思ってあせったという話でした。