Open1

AudioToolbox: MIDIシーケンスが勝手に変換される

kabeyakabeya

macOSのAudioToolboxに、MusicSequenceFileLoadというAPIがあって、これを使って標準MIDIファイルフォーマットのファイルを開くことができます。MusicPlayerを使えばそれを再生することもできます。

で、MusicSequenceFileLoadでファイルを開いて、MusicSequenceFileCreateDataというのを使うとCFDataにMIDIデータを書き出すことができます。

で、このCFDataに書き込まれるデータが、直接バイナリデータとしてData(contentsOf:)などで読み込んだものと違うんですね。

元のMIDIファイルの先頭トラックにテンポ関連以外の情報が入っていると、テンポ関連だけ抜いてテンポトラックを生成して、元のトラックからはテンポ関連のデータを抜いたり、ベロシティ0のノートオンをノートオフに書き換えたり、そんなことをしています。
要は一回自分なりに解析したMIDIシーケンスをバッファに再度書き込むというような動きになっています。

そりゃそうかという気もしますが、最初は自分の問題かと思ってあせったという話でした。