バックグラウンドで音楽をかけながらiOSアプリを利用中、勝手に音楽が小さくなる現象に遭遇したことはないでしょうか?
バックグラウンドの音楽が小さくなる原因について
音楽が小さくなる原因は、AVAudioSessionの設定にあります。
AVAudioSessioの設定によって、もし起動中のアプリが音を流した場合、バックグラウンドの音楽が小さくなるようになっています。
自分で音を流すような処理を書いていない場合でも、利用しているSDKによっては音に関する処理を行なっていて、その影響で音が小さくなっていることが考えられます。
AVAudioSessionにはCategoryというものがあり、この内容によって再生中の音楽の再生について決定します。
以下にCategoryに関するAppleのリンクがあります。
Category | サイレントスイッチで音量オフになるか | バックグラウンドの音楽を止めるか |
---|---|---|
ambient | Yes | No |
soloAmbient(デフォルト) | Yes | Yes |
playback | Yes | Yes |
record | Yes | Yes |
playAndRecord | Yes | Yes |
multiRoute | Yes | Yes |
バックグラウンドの音楽と自分のアプリの音楽をmixして流すのはambient
なので、Categoryをambientにしつつ、バックグラウンドの音楽が小さくならないよう、CategoryOptions
を設定します。
対応
CategoryOptionsを追加して音声をコントロールする
バックグラウンド再生中の音楽が小さくなっている原因は、何らかの原因でCategoryOptions
がduckOthers
になっているが原因と思われます。そこで、AVAudioSessionのOptionをmixWithOthers
にすることでバックグラウンドの音楽の音が小さくならないようになります。
CategoryのambientはデフォルトでmixWithOthersが付与されるので、省略しても問題ありません。
try! AVAudioSession.sharedInstance().setCategory(.ambient)
SDKのドキュメントの確認
自分で音声に関する実装をしていない場合、使っているSDKに原因がある場合があります。
SDKのドキュメントを確認して、SDKごとの対応が必要になる場合もあります。