LoginSignup
0
1

[iOS] サウンド再生時のバックグラウンド音声のコントロール方法

Posted at

はじめに

動画を再生する画面の実装にあたり、バックグラウンドで流している音楽等のサウンドに干渉した場合の調整方法に調べました。

環境

Xcode15

内容

アプリのバックグラウンド再生されているオーディオのコントロールには、AVAudioSessionを使うことで実現できる。

AVAudioSessionでiOSのオーディオセッションの管理ができ、アプリがどのようにオーディオを扱うかをシステムに伝えることができる。

import AVFoundation

func configureAudioSession() {
    let audioSession = AVAudioSession.sharedInstance()
    do {
        try audioSession.setCategory(.playback, mode: .default)
        try audioSession.setActive(true)
    } catch {
        print("Audio Session configuration failed.")
    }
}

setCategory

セッションカテゴリを設定することで一連のオーディオ動作を定義することができる。
Categoryは必須で必要。Mode, RouteSharingPolicy, CategoryOptionsを設定することでより細かい定義ができる

func setCategory(
    _ category: AVAudioSession.Category,
    mode: AVAudioSession.Mode,
    policy: AVAudioSession.RouteSharingPolicy,
    options: AVAudioSession.CategoryOptions = []
) throws

AVAudioSession.Category

ambient
サウンドの再生が主要ではないアプリのカテゴリ
他のアプリの音声が自分の音声と混ざる
サイレントスイッチを使用すると、音声が聞こえなくなる

multiRoute
オーディオ データの個別のストリームを同時に異なる出力デバイスにルーティングするためのカテゴリ

playAndRecord
VoIP(Voice over Internet Protocol)アプリなど、音声の録音(入力)と再生(出力)を行うカテゴリ
サイレントスイッチを設定もしくは画面をロックした状態でもオーディオは継続される

playback
録音された音楽やその他のサウンドを再生するためのカテゴリ
サイレントスイッチを設定し画面をロックした状態でもオーディオは継続される

record
再生音声を消音しながら音声を録音するカテゴリ
セッションがアクティブである限り、システム上のすべての出力を無音にする効果がる
予期しないサウンドが再生されるのを防ぐ必要がなければ、playAndRecordを使う
電話やアラームなど、ミキシング不可能なオーディオセッションの中断を防ぐことはできない

soloAmbient
デフォルトのカテゴリ
画面ロックとサイレントスイッチによって消音される
ミキシングを許可するには、ambientを使う

setActive

指定されたオプションを使用してアプリのオーディオセッションをアクティブまたは非アクティブにできる。

他のオーディオセッションの方が優先順位が高く(電話など)、どちらのオーディオセッションもミキシングを許可していない場合、セッションのアクティブ化には失敗する。

func setActive(
    _ active: Bool,
    options: AVAudioSession.SetActiveOptions = []
) throws

notifyOthersOnDeactivation

自分のアプリのオーディオセッションを停止したことを、システムが他のアプリに通知することを示すオプション
setActiveにfalseを渡してオーディオセッションを非アクティブにする時のみ使うオプション

おわりに

ドキュメントを読むとユースケースごとに細かな設定ができそうな印象でした。
デフォルト値と必須な設定項目を把握したらあとはユースケースごとに調整するのが良さそうです。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1