投稿

12月, 2018の投稿を表示しています

[Swift] MIDIデータの再生

先日のApp審査の却下を受けて、UIBackgroundModes Keyをオフにして再生する方法を調査。 結論としては、AudioKitのフレームワークは使用せず、Appleが提供しているフレームワークで実現することにしました。 シーケンサー MIDIデータを再生するために、下記のオブジェクト利用。 var musicSequence : MusicSequence? var musicPlayer : MusicPlayer? var musicTrack : MusicTrack? これだけだと、サウンドフォントを使った再生がうまくできなかったので、AUGraphも使いました。 var processGraph : AUGraph? var chordUnit : AudioUnit? var ioUnit : AudioUnit? var chordNode = AUNode() var ioNode = AUNode() まずは、初期化。 init() { NewAUGraph(&processGraph) NewMusicPlayer(&musicPlayer) NewMusicSequence(&musicSequence) MusicSequenceNewTrack(musicSequence!, &musicTrack) MusicSequenceSetAUGraph(musicSequence!, processGraph) MusicPlayerSetSequence(musicPlayer!, musicSequence) setup() loadSF2Preset(unit: chordUnit!) } private func setup() { var cd:AudioComponentDescription = AudioComponentDescri

[iOS] Appの審査

イメージ
先日、Appを審査に出したら、Rejectされました。 Rejectの理由 申請したAppは、バックグランドモード有効(Audio)となっているが、バックグランドモードにしても音がならないよ! ってことらしい。 はい。 フォアグランドの利用しか想定していないので、バックグランドモードでは音がならなくても問題ないです。 では、なぜ、バックグランドモードを有効にしたのか? 答えは、エラーを回避するため です。 Appで何が起きているのか Background Modesをオフにします。  で、Appを実行してみます。 AKMIDISampler()の実行前 AKMIDISampler()の実行後 AKMIDI.swift:init():63:Initializing MIDI CheckError.swift:CheckError:179:Error: kMIDINotPermitted: Have you enabled the audio background mode in your ios app? フレームワーク(AudioKit)でエラーが発生します。 バックグランドモードが有効になってない! だって。 kMIDINotPermitted・・・は、CoreMIDIのエラーのようなので、AudioKitのエラーというよりは、Appleで提供されているモジュールのエラーと思われます。 バックグランドモードを有効にすると、このエラーは出なくなります。 バックグランドで再生はしないので、できることならバックグランドモードは無効にしたい。 一方で、AppleのDocumentには、 Beginning in iOS 6, apps need to have the   audio   key in their   UIBackground Modes   in order to use CoreMIDI’s   MIDISource Create(_: _: _:)   and   MIDIDestination Create(_: _: _: _: _:)   functions. These functions return kMIDINo