AVMIDIPlayer
iOSのAPIの中にAVMIDIPlayerというものを発見。これは音楽ファイルを再生するもので、対象フォーマットはMIDIとiMelody。iMelodyというのは着メロのような単音の音楽を扱うものらしい。所属はAVFoundationでiOS 8より追加になった。 初期化メソッドは2つ。 initWithContentsOfURL: soundBankURL: error: initWithData: soundBankURL: error: 上のメソッドでは1つ目の引数はファイルのURLを渡し、2つ目の引数でsoundBankというもののURLを渡す。2つ目のsoundBankURLだが、これは再生に使う音源の指定でSoundFont2かDLS bank(のURL)を指定する。OS Xではnilが可能だが、iOSではnilはだめ。 下のメソッドでは1つ目の引数はNSDataインスタンス(の形式にした音楽ファイル)を渡す。2つ目以降は上のと同じ。 SoundFont2は音色のデータフォーマット。世の中でよく(?)使われている。DLSも音色のデータフォーマットだがSoundFont2の方がメジャー。 再生データ(第一引数)と音色データ(第二引数)の違いがややこしいと思う。音色データにはいろいろな音色のいろいろな音程の音が含まれている。それをどのタイミングでどの音を鳴らすかを指定するのが再生データ。 再生関係メソッドは普通に play: stop prepareToPlay playの引数で再生完了時に実行する処理を渡せる プロパティは playing (再生中かどうか readOnly) duration (全体の時間 readOnly) currentPosition (現在ポジション 読み書き可能) そのほかに、MIDIらしく rate (再生速度、1.0が標準 読み書き可能) というものがある。 手持ちのMIDIファイルとダウンロードしたSoundFontで鳴らしてみたらiPad mini 2から音が出ました。まあ普通に再生出来ています。複数チャンネルにも対応しています。 しかしこうなるとiOSに初めから手頃な音源が搭載されていて欲しくなります。