AVAudioSessionオーディオセッション(カテゴリ選択/オーディオ出力切り替え)

5623 ワード

概要
オーディオセッションはSingletonオブジェクトで、アプリケーションのオーディオコンテキスト環境を設定し、アプリケーションのオーディオ動作の意図をシステムに伝えることができます.次の操作を行います.
  • アプリケーションの音声動作フェーズ
  • を有効または無効にする
  • オーディオセッションのカテゴリとモードを設定して、システムと通信してアプリケーションでオーディオ
  • を使用する方法を設定します.
  • サンプリングレート、I/Oバッファ持続時間、チャネル数処理オーディオ出力変更
  • などのオーディオ設定を構成する.
  • は、重要なオーディオイベントに応答する、例えば、最下位のMedia Servicesデーモンの可用性を変更する
  • .
    AVAudioSession使用
    AVAudioSessionクラスはAVFoundationフレームワークによって導入される.iOSアプリケーションごとにオーディオセッションがあります.このセッションはAVAudioSessionクラスのsharedInstanceクラスメソッドによってアクセスできます.AVAudioSessionクラスのインスタンスを取得すると、iOSアプリケーションオーディオセッションカテゴリモードをオーディオセッションの一例オブジェクトのsetCategory:error:メソッドで設定できます.overrideOutputAudioPort:error:メソッドでオーディオセッションのoverrideOutputAudioPortプロパティを設定するか、setCategory:withOptions:error:メソッドでオーディオセッションのAudio Routeを設定.
        NSError *sessionError = nil;
        AVAudioSession *audioSession=[AVAudioSession sharedInstance];
        [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
        
        if(sessionError){
            NSLog(@"Error creating session: %@", [sessionError description]);
        }else{
            [audioSession setActive:YES error:nil];
        }
    

    AVAudioSessionCategory(セッションカテゴリの選択)
    iOSアプリケーションの音声セッションカテゴリとモードは、オーディオセッションの単一オブジェクトのsetCategory:error:メソッドによって設定されると述べた.
    AVAudioSessionCategoryAmbientまたはkAudioSessionCategory_AmbientSound
    音声を主としないアプリケーションでは、このcategoryを使用するアプリケーションは、静音キーと画面が閉じるにつれて静音します.また、他のアプリケーションの再生を中止することなく、iPod、safariなどの他の付属アプリケーションと同時に再生することができます.注意:Categoryはバックグラウンドで音声を再生できません
    AVAudioSessionCategorySoloAmbientまたはkAudioSessionCategory_SoloAmbientSound
    AVAudioSessionCategoryAmbientと同様に、他のアプリケーションで音声の再生を中止する点が異なります.このcategoryはデフォルトのcategoryです.このCategoryはバックグラウンドで音声を再生できません
    AVAudioSessionCategoryPlaybackまたはkAudioSessionCategory_MediaPlayback
    音声を主とするアプリケーションでは、このcategoryを使用するアプリケーションは、静音キーや画面が閉じるにつれて静音しません.バックグラウンドで音声を再生することができる.
    AVAudioSessionCategoryRecordまたはkAudioSessionCategory_RecordAudio
    録音が必要なアプリケーションでは、categoryを設定すると、着信音、目覚まし時計、カレンダーのアラーム以外のシステム音は再生されません.このCategoryは単純録音機能のみを提供している.
    AVAudioSessionCategoryPlayAndRecordまたはkAudioSessionCategory_PlayAndRecord
    音声再生と録音が必要なアプリケーションでは、音声チャットアプリケーション(微信など)がこのcategoryを使用する必要があります.Categoryは録音と再生機能を提供します.iPhoneの受話器を使用する必要がある場合は、categoryが唯一の選択であり、Categoryの下で音声のデフォルト出口は受話器またはイヤホンです.
    AVAudioSessionCategoryAudioProcessingまたはkAudioSessionCategory_AudioProcessing
    オーディオを再生または録画しないときにオーディオハードウェアコーデックまたは信号プロセッサのカテゴリを使用します.たとえば、オフラインオーディオフォーマット変換を実行する場合などです.このカテゴリでは、再生(オーディオ出力)を無効にし、録音(オーディオ入力)を無効にします..アプリケーションがバックグラウンドにある場合、オーディオ処理は通常続行されません.ただし、アプリケーションがバックグラウンドに移動すると、処理を完了するためにより多くの時間を要求できます.
    に注意
    1つのアプリケーションで1つのcategoryしか使用できないわけではありません.プログラムは実際の必要に応じて設定を切り替えるべきです.例を挙げると、録音の場合はAVAudioSessionCategoryRecordに設定する必要があります.録音が終了した場合は、プログラムの必要に応じてcategoryをAVAudioSessionCategoryAmbient、AVAudioSessionCategorySoloAmbientまたはAVAudioSessionCategoryPlaybaに変更する必要があります.ckの一種.
    AudioSession Route選択
    iPhoneにオーディオ受信装置が複数接続されている場合(イヤホン、Bluetoothスピーカーなど)、AudioSessionはlast-in winsの原則に従って外付けデバイスを選択します.すなわち、音声が最後に接続されるデバイスに導かれます.オーディオデバイスが接続されていない場合、一般的に音声はスピーカからデフォルトで出ますが、PlayAndRecordというcategoryでは受話器がデフォルトのオーディオ出力デバイスになります.この動作を変更したい場合は例外です.MPVolumeViewを提供してユーザーをスピーカに切り替えることもできるし、overrideOutputAudioPort法でprogramminglyをスピーカに切り替えることもできるし、category optionをAVAudioSessionCategoryOptionDefaultToSpeakerに変更することもできる.そのため、彼はスピーカ、受話器、イヤホン、Bluetoothスピーカーの間の切り替えに適用される.
    AVAudioSessionPortOverrideでオーディオ出力を選択
    オーディオセッションのoverrideOutputAudioPortプロパティは、overrideOutputAudioPort:error:メソッドと次の2つの列挙によって設定されます.
        [audioSession overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:error];
    

    AVAudioSessionPortOverrideNone
    出力オーディオポートを上書きしないでください.このオプションを使用して、オーディオ出力デバイスを現在のオーディオカテゴリのデフォルト状態に戻します.
    AVAudioSessionPortOverrideSpeaker
    現在の入出力を上書きし、オーディオ出力デバイスを内蔵スピーカとマイクに出力します.AVAudioSessionCategoryPlayAndRecordカテゴリにのみ適用されます.
    AVAudioSessionCategoryOptionsでオーディオ出力デバイスを選択
    セッションのカテゴリとモードは、アプリケーションがオーディオをどのように使用するかを定義します.通常、セッションをアクティブにする前にカテゴリとモードを設定します.また、セッションがアクティブなときにカテゴリまたはモードを設定することもできますが、オーディオ出力デバイスを直ちに変更することになります.
    [audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker error:&error];  
    

    AVAudioSessionCategoryOptions列挙値:
    //Eligible Input
    AVAudioSessionPortUSBAudio
    AVAudioSessionPortHeadsetMic
    AVAudioSessionPortBuiltInMic
    
    //Eligible Output
    AVAudioSessionPortUSBAudio
    AVAudioSessionPortLineOut
    AVAudioSessionPortHeadphones
    AVAudioSessionPortHDMI
    AVAudioSessionPortBuiltInSpeaker
    

    overrideOutputAudioPort:設定とAVAudioSessionPortOverride設定の比較
    共通点
    AVAudioSessionPortOverrideSpeakerおよびAVAudioSessionCategoryOptionDefaultToSpeakerの使用は、AVAudioSessionCategoryPlayAndRecordカテゴリにのみ適用されます.
    区別する
    O v e r r r i d e O utputAudioPortを呼び出すことによって:AVAudioSessionPortOverrideを設定するのは、カテゴリオプションAVAudioSessionCategoryOptionDefaultToSpeakerを使用するよりも短い.
    overrideOutputAudioPortを呼び出します.AVAudioSessionPortOverrideをAVAudioSessionPortOverrideSpeakerに設定することは、スピーカに再生する出力を一時的に上書きする方法です.オーディオ出力の変更または中断により、オーディオが正常な出力デバイスにルーティングされ、最終的な勝利のルールに従います.
    これに対して、AVAudioSessionCategoryOptionDefaultToSpeakerは、イヤホンなどの他のアクセサリが使用されていない場合、オーディオは受信機ではなく常にスピーカにルーティングされるように、AVAudioSessionCategoryPlayAndRecordカテゴリのルーティング動作を修正する.
    例を挙げると、方法1、設定後、この時点でイヤホンを差し込んで抜いています.再生された音はスピーカーに戻るのではなく受話器から出力されます.方法2、設定後、常に他の受信機ではなくスピーカーに出力されます.イヤホンがなければ.△簡単に言えば、Bluetoothスピーカーがあれば、接続してもBluetoothオーディオに音が出ず、イヤホンを差し込むと、イヤホンに音が出ます.
    参考記事:AVAudioSessionCategory説明Question About AVAudioSessionPortOverrideオーディオセッションに関するいくつかの列挙値