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
アプリのオーディオセッションを無効化したことを、システムが他のアプリに通知することを示すオプション。
次回
この記事が気に入ったらサポートをしてみませんか?