🔊

AVAudioSessionの設定で何が変わるのか?

2024/01/27に公開

AVAudioSessionはiOS、tvOS、およびwatchOSアプリケーションにおけるオーディオの管理において中心的な役割を果たします。このブログでは、AVAudioSessionの基本的な概要、デフォルトのオーディオセッションの挙動、カテゴリの設定方法、利用可能なオーディオセッションカテゴリ、さらにModeの詳細について解説します。

AVAudioSessionの概要

AVAudioSessionを利用することで、アプリケーションはオーディオの一般的な性質をOSに伝え、オーディオハードウェアとの相互作用を効率的に管理できます。これにより、OSはユーザーのオーディオ体験を最適化し、他のアプリケーションやシステム機能との干渉を最小限に抑えることができます。

AVAudioSessionの初期状態は?

iOS、tvOS、watchOSアプリには、初期状態で以下の特徴を持つデフォルトのオーディオセッションが設定されています:

  • オーディオ再生はサポートされているが、録音は許可されていない。
  • アプリがオーディオを再生すると、他のバックグラウンドオーディオは消音される。
  • iOSデバイスのリング/サイレントスイッチがサイレントモードに設定されている場合、アプリのオーディオは消音される。
  • iOSデバイスがロックされている場合、アプリのオーディオは消音される。

オーディオセッションカテゴリの設定

アプリケーションのニーズに合わせて、デフォルトのオーディオセッションの挙動を変更することができます。これを行うためには、オーディオセッションカテゴリを設定します。以下の六つのカテゴリが利用可能です:

  • ambient: 背景音(雨音、エンジン音など)の再生に適しています。他の音楽とミックスされます。
  • soloAmbient: 背景音の再生に適していますが、他の音楽は停止します。
  • playback: 音楽トラックの再生に適しています。
  • record: 音声の録音に適しています。
  • playAndRecord: 音声の録音と再生に適しています。
  • multiRoute: 複数のオーディオアクセサリや内蔵オーディオハードウェアを同時に利用する際に適しています。

AVAudioSession.Modeの紹介

AVAudioSession.Modeは、特定のオーディオシナリオに合わせてオーディオの挙動をさらに細かく設定するために使用されます。利用可能なモードは以下の通りです:

  • default: デフォルトモードです。
  • voiceChat: VoIP(Voice over IP)アプリケーションに適しています。適切なオーディオルートとシステムの信号処

理を利用します。

  • gameChat: Game Kitが使用します。playAndRecordカテゴリでのみ有効です。
  • videoRecording: ビデオ録画に適しており、オーディオルーティングと信号処理が調整されます。
  • measurement: システムの信号処理を最小限に抑え、入出力の音声を正確に測定するのに適しています。
  • moviePlayback: 映画再生に最適化された信号処理を提供します。
  • videoChat: ビデオチャットアプリケーションに適しており、適切なオーディオルートと信号処理を利用します。
  • spokenAudio: スポークンオーディオ(例えばポッドキャストやオーディオブック)に適しています。
  • voicePrompt: テキストから音声への変換を使用するアプリケーションに適しています。

サンプルコード

import AVFoundation

func configureAudioSession() {
    let audioSession = AVAudioSession.sharedInstance()
    
    do {
        // オーディオセッションのカテゴリを 'playback' に設定
        try audioSession.setCategory(.playback, mode: .moviePlayback, options: [])

        print("Audio session is successfully configured.")
    } catch {
        print("Failed to configure the audio session: \(error)")
    }
}

まとめ

AVAudioSessionは、アプリケーションがオーディオハードウェアとのやり取りを最適化し、ユーザーに適切なオーディオ体験を提供するための重要なツールです。適切なカテゴリとモードの設定を選択することで、アプリケーションはその機能や目的に応じたオーディオ挙動を実現できます。

Discussion