【Objective-C】AVAudioSessionのPlayAndRecordで音量が小さくなる

概要

iPhoneのマイク入力を使用するのにAVAudioSessionを使うと、マイク入力中にシステム音量が下がるのが気になったので調べました。

このページはswift4.2のコードを使用しています。

原因

setCategoryで「playAndRecord」を指定すると出力先ポートがReceiverとなるため、これを内蔵スピーカー(Speaker)に変える必要があります。

現在の出力先は下のコードで調べられます。

let session = AVAudioSession.sharedInstance()
print(session.currentRoute.outputs[0].portType.rawValue)

対応方法

方法1 デフォルトの出力先を内蔵スピーカーにする

デフォルトでReceiverが指定されるのがいけないので、何も接続されていないときは内蔵スピーカー(Speaker)になるように設定します。

イヤホンを刺したときはちゃんとイヤホン(HeadSet)から流れます。

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSession.Category.playAndRecord, mode: .default, options: .defaultToSpeaker)
    try session.setActive(true)
} catch let error {}

方法2 出力先を強制的に内蔵スピーカーに固定する

強制的に出力先を内蔵スピーカー(Speaker)に変える方法です。こちらはイヤホンをしていても内蔵スピーカーから音が流れるようになります。

let session = AVAudioSession.sharedInstance()
do {
    try session.setCategory(AVAudioSession.Category.playAndRecord, mode: .default)
    try session.overrideOutputAudioPort(.speaker)
    try session.setActive(true)
} catch let error {}
   

コメントを残す


CAPTCHA