見出し画像

iOSアプリ開発 入門 (6) - AVAudioSession

iOSアプリの「AVAudioSession」によるオーディオ制御の実装方法についてまとめました。

・iOS 14

前回

1. AVAudioSession

AVAudioSession」は、アプリでのオーディオの利用方法をOSに伝えるオブジェクトです。「AVAudioSession」がアプリとOSの仲介役となって、オーディオエクスペリエンスを最適な状態に管理します。

2. AVAudioSessionのデフォルト状態

「AVAudioSession」のデフォルト状態は、次のとおりです。

・オーディオ再生のみ利用(録音はできない)。
・ロック・サイレント時に、オーディオが無音になる。
・オーディオセッション有効化時に、バックグラウンドオーディオ停止。

このデフォルト状態は、通常アプリに適したオーディオ動作を提供しますが、メディアプレイヤーアプリなどが必要とするオーディオ動作を提供しません。動作を変更するには、アプリの「AudioSession」のカテゴリ設定が必要です。

3. アプリのオーディオ動作を設定

「AVAudioSession」オブジェクトを使用して、アプリのオーディオ動作を設定します。このクラスは、オーディオ動作の「カテゴリ」「モード」「オプション」を設定するために使用されるシングルトンです。アプリのライフサイクル全体で利用するオーディオ動作を設定できます。

「AVAudioSession」のカテゴリ設定の例は、次のとおりです。

// AVAudioSessionのシングルトンの取得
let audioSession = AVAudioSession.sharedInstance()
do {       
    // カテゴリの設定
    try audioSession.setCategory(.playback, mode: .moviePlayback, options: [])

    // AVAudioSessionの有効化
    try audioSession.setActive(true)    
} catch {
    print(error)
}

AVAudioSessionの有効化はいつでもできますが、通常はアプリがオーディオの再生を開始するまで、有効化しないことをお勧めします。有効化を延期することで、他のバックグラウンドオーディオを途中で中断することがなくなります。

4. カテゴリの種類

audioSession.setCategory()に指定する「カテゴリ」の種類は、次のとおりです。

◎ soloAmbient
オーディオをバックグランドオーディオとミックスしないアプリ用(デフォルト)のカテゴリです。
・オーディオ再生のみ利用(録音できない)。
・ロック・サイレント時に、オーディオ停止。
・オーディオセッション有効化時に、バックグラウンドオーディオ停止。

◎ ambient

オーディオをバックグランドオーディオとミックスするアプリ用(ボタン音やカーナビ音声案内のみなど)のカテゴリです。
・オーディオ再生のみ利用(録音できない)。
・ロック・サイレント時に、オーディオ停止。
・オーディオセッション有効化時に、バックグラウンドオーディオ再生継続。

◎ playback
オーディオ再生用のカテゴリです。
・オーディオ再生のみ利用(録音できない)。
・ロック・サイレント時に、オーディオ再生継続。
・オーディオセッション有効化時に、バックグランドオーディオ停止。

◎ record
オーディオ録音用のカテゴリです。
・オーディオ録音のみ利用(再生できない)。
・オーディオセッションの有効化時に、バックグラウンドオーディオ停止。

◎ playAndRecord
オーディオ再生と録音を両方行うアプリ用(VoIPなど)のカテゴリです。
・オーディオ再生と録音の両方を利用。
・ロック・サイレント時に、オーディオ再生継続。
・オーディオセッション有効化時に、バックグラウンドオーディオ停止。

◎ multiRoute

オーディオを異なるデバイスに同時出力するアプリ用のカテゴリです。USBと本体のスピーカーで同時出力する場合などに利用します。

5. モードの種類

audioSession.setCategory()に指定する「モード」の種類は、次のとおりです。

◎ default
デフォルトのモードです。

◎ gameChat
ゲームチャットでの利用を示すモードです。

◎ measurement
オーディオ入出力の測定での利用を示すモードです。

◎ moviePlayback
映画再生での利用を示すモードです。

◎ spokenAudio
音声の割り込みがあるアプリでの利用を示すモードです。カーナビ音声案内など、短い割り込みの際に再生中のものを一時停止し、終わり次第再開します。

◎ videoChat
オンラインビデオ会議での利用を示すモードです。

◎ videoRecording
動画録画での利用を示すモードです。

◎ voiceChat
VoIPなどの双方向の音声通信での利用を示すモードです。

◎ voicePrompt
テキスト読み上げを使用した音声再生での利用を示すモードです。

6. オプションの種類

audioSession.setCategory()に指定する「オプション」の種類は、次のとおりです。

◎ mixWithOthers
オーディオがバックグラウンドオーディオとミックスすることを示すオプション。

◎ duckOthers
オーディオ再生時に、バックグラウンドオーディオの音量を下げるオプション。

◎ InterruptSpokenAudioAndMixWithOthers
オーディオを再生時に、バックグラウンドオーディオを一時停止するかどうかを決定するオプション。

◎ allowBluetooth
Bluetoothハンズフリーデバイスを使用可能な入力ルートとして表示するかどうかを決定するオプション。

◎ allowBluetoothA2DP
このセッションからA2DPをサポートするBluetoothデバイスにオーディオをストリーミングできるかどうかを決定するオプション。

◎ allowAirPlay
このセッションからAirPlayデバイスにオーディオをストリーミングできるかどうかを決定するオプション。

◎ defaultToSpeaker
セッションからのオーディオがデフォルトでレシーバーではなく内蔵スピーカーに設定されるかどうかを決定するオプション。

◎ overrideMutedMicrophoneInterruption
内蔵マイクをミュートしたときにシステムがオーディオを中断するかどうかを示すオプション。

7. 有効化オプションの種類

audioSession.setActive()に指定する「オプション」の種類は、次のとおりです。

◎ notifyOthersOnDeactivation
アプリのオーディオセッションを無効化したことを、システムが他のアプリに通知することを示すオプション。

次回


この記事が気に入ったらサポートをしてみませんか?