アプリがバックグラウンドにあるときに、仮想楽器アプリを (MIDI キーボード経由で) 使用できるようにしたいと考えています。これは、UIBackgroundModes を「audio」に設定し、AudioSessions のカテゴリを AVAudioSessionCategoryPlayback に設定することでうまく機能します。さらに、ミュージック プレーヤー アプリとのミキシングを可能にするために、プロパティ kAudioSessionProperty_OverrideCategoryMixWithOthers を設定します。
バッテリーのエネルギーを節約するために、バックグラウンド操作が不要な場合はユーザーがオフにできるようにすることをお勧めします。したがって、私のアプリには、カテゴリ AVAudioSessionCategoryAmbient とカテゴリ AVAudioSessionCategoryPlayback (kAudioSessionProperty_OverrideCategoryMixWithOthers を使用) を切り替えるスイッチがあります。コードは次のようになります (エラー処理は省略)。
NSString *category = supportsBackgroundOperation ? AVAudioSessionCategoryPlayback : AVAudioSessionCategoryAmbient;
[session setCategory:category error:nil];
if (category == AVAudioSessionCategoryPlayback) {
UInt32 allowMixing = true;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
}
ここでの問題: 音楽アプリケーションがバックグラウンドで再生されているとします。ユーザーは、フォアグラウンドで (MIDI キーボードを介して) 仮想楽器を演奏して音楽プレーヤーを伴奏し、さらに別のアプリを開始することにしました。たとえば、楽器を演奏する理由を楽しむためのスライド ショーです。それで彼/彼女は私のアプリの設定ビューに行き、バックグラウンド操作を有効にします。次に、上記のコードが実行されます。ブーム、音楽アプリケーションが静かになります。私が理解しているように、kAudioSessionProperty_OverrideCategoryMixWithOthers プロパティは、カテゴリを設定した後にのみ設定できますが、カテゴリを AVAudioSessionCategoryPlayback に設定すると、kAudioSessionProperty_OverrideCategoryMixWithOthers を設定する前に、音楽プレーヤーがシステムによってミュートされます。
これは起こりましたか?何かできることはありますか?カテゴリを変更する前後にセッションを非アクティブ化/アクティブ化しようとしましたが、別の問題が発生しました。
マーカス