音声の操作

音声をミュートする

音声をミュートするには MediaStreamaudioEnabled プロパティに false をセットします。 ロールRole.sendonly または Role.sendrecv のとき、ミュートしてもマイクは稼働しているので注意してください。

音量を変更する

ロールRole.recvonly または Role.sendrecv のとき、 MediaStreamaudioVolume プロパティで受信ストリームの音量が変更できます。 このプロパティは 0 から 10 の値をとります。 0 をセットすると音声は出力されません。

送信ストリームで送信する音声の音量は変更できません。

任意の音声を送信する

WebRTC ライブラリの制約により、 Sora iOS SDK ではマイク入力以外の音声を送信できません。ご了承ください。

AVAudioSession のプロパティを変更する

重要

iOS 14.0 で、音声モードをデフォルト以外からデフォルトに戻したときに音声が出力されない事象を確認しています。その場合は端末を iOS 14.1 以降にアップデートしてください。

Sora iOS SDK では、AVAudioSession のプロパティを変更する簡易的な API として、 Sora.setAudioMode メソッド を用意しています。

この API は AVAudioSession の次のプロパティを変更します

  • 音声モード (AVAudioSession.Mode)

  • 音声カテゴリ (AVAudioSession.Category)

  • 音声カテゴリオプション (AVAudioSession.CategoryOptions)

  • 音声経路 (AVAudioSession.PortOverride)

ピア接続の設定や端末の状況によっては設定が反映されない場合があるので注意してください。

Sora.setAudioMode メソッド の型と引数は以下の通りです。

  • mode: AudioMode

    • AudioMode は Sora iOS SDK で利用可能な 3 種類の音声モードです。

      • default

        • default の音声モードを利用します。音声カテゴリ、音声出力先の指定ができます。

      • videoChat

        • videoChat の音声モードを利用します。音声カテゴリは playAndRecord、音声出力先はスピーカーを使用します

      • voiceChat

        • voiceChat の音声モードを利用します。音声カテゴリは playAndRecord、音声出力先の指定ができます。

  • options: AVAudioSession.CategoryOptions

    • 指定は任意です。デフォルトで allowBluetoothallowBluetoothA2DPallowAirPlay が設定されています。

    • 指定した場合はデフォルトの音声カテゴリオプションは設定されず、指定した音声カテゴリオプションのみが設定されます。

AudioMode の指定方法および AVAudioSession のプロパティ設定内容

AudioMode はモード毎にそれぞれ異なる引数を取ります。 指定する引数の内容と、指定された引数によって設定される AVAudioSession のプロパティの値は以下のとおりです。

  • default(category: AVAudioSession.Category, output: AudioOutput)

    • 音声モードに default を設定します

    • 音声カテゴリに引数で指定された category を設定します

    • output には AudioOutputdefault または speaker を指定します

      • output に speaker が指定されていた時、音声カテゴリオプションに defaultToSpeaker が追加で設定されます

  • videoChat

    • 音声モードに videoChat が設定されます

    • 音声カテゴリに playAndRecord が設定されます

  • voiceChat(output: AudioOutput)

    • 音声モードに voiceChat を設定します

    • 音声カテゴリに playAndRecord を設定します

    • output には AudioOutputdefault または speaker を指定します

      • output に speaker が指定されていた時、音声カテゴリオプションに defaultToSpeaker が追加で設定されます

      • output に speaker が指定されていた時、音声経路に speaker が設定されます

設定例

以下に Sora.setAudioMode メソッド を利用した AVAudioSession のプロパティ変更の例を示します。

import Sora
// 接続時のコールバック onConnect で音声モードを変更する
config.mediaChannelHandlers.onConnect = { [weak self] _ in

    // default の音声モードを選択し、音声カテゴリに playAndRecord、音声出力先に speaker を指定する
    // 任意のカテゴリオプションには duckOthers を指定する
    let result = Sora.shared.setAudioMode(.default(category: .playAndRecord, output: .speaker), options: .duckOthers)

    // 必要に応じてエラーハンドリングを行う
    switch result {
    case .success():
       // 成功
    case .failure(let error):
       // 失敗
    }
}

さらに細かい設定を行う場合は AVAudioSession の継承クラスである libwebrtc の RTCAudioSession を使用して設定が可能です。 設定を行った結果、libwebrtc の動作に影響が出て、正常に動作しなくなる可能性があるため、libwebrtc の挙動を理解した上で設定をしてください。

音声モードを変更するタイミング

音声モードの変更は 接続完了後 に行ってください。 Sora iOS SDK は接続完了時に接続設定に従って音声カテゴリを変更するので、接続完了前にセットした音声モードは接続完了時に上書きされます。

その他の操作

音声の出力は AVAudioSession により管理されているため、その他の操作は AVAudioSession を利用してください。

マイクのパーミッションについて

マイクのパーミッションは配信時にのみ要求されます。 マイクを使う場合は、 必ず Info.plist にマイクの用途を記述してください。

© Copyright 2018-2024, Shiguredo Inc. Created using Sphinx 7.3.7