質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

2015閲覧

【Swift】オーディオ再生まわり(スピーカーやBluetoothなど)

ishiishiyay

総合スコア33

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2019/10/14 13:00

編集2022/01/12 10:55

石ころです。SNSを作っています。
主にBluetooth再生周りで困っています。
下記、ご助言頂けますと大変幸いです。

実現したいこと

(1) Bluetoothイヤホン未装着時
・セルをタップ:スピーカー再生
・近接センサー作動時:iPhone上部のスピーカーから小音量で自動再生(通話の時に使うスピーカーです)

※近接センサーはiPhone上部のセンサーを指し、上を覆い隠すと検知されます。iPhoneを耳元に持ってきたときに検知されるようにしています。

(2) Bluetoothイヤホン装着時
・セルをタップ:Bluetoothイヤホンから再生
・近接センサー作動時:Bluetoothイヤホンから再生

まず、(1)を実現するために、次のコードを書きました。

コード

Swift

1 2 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 3 let audioSession = AVAudioSession.sharedInstance() 4 do { 5 try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker) 6 } catch let error as NSError { 7 } 8 } 9

Swift

1 @objc func proximitySensorStateChanged(){ 2 if (UIDevice.current.proximityState == true) { 3 do{ 4 let audioSession = AVAudioSession.sharedInstance() 5 do { 6 try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.none) 7  } catch let error as NSError { 8 print("audioSession error: (error.localizedDescription)") 9 } 10   //中略:音声再生処理を記載しています 11} catch {} 12} 13}

上記コードにより、冒頭の(1)は問題なく実現できます。
次に、Bluetooth再生を可能にするために、下記のコードを追記しました。

Swift

1 2 func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 3 (追記始まり)--------------------------------- 4      do{ 5 try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, options: AVAudioSession.CategoryOptions.mixWithOthers) 6     //mixWithOthersをallowBluetoothやduckOthersに変えてみても結果は同じ 7 } catch { 8 } 9 (追記終わり)--------------------------------------- 10 let audioSession = AVAudioSession.sharedInstance() 11 do { 12 try audioSession.overrideOutputAudioPort(AVAudioSession.PortOverride.speaker) 13 } catch let error as NSError { 14 } 15 } 16

上記により、Bluetooth再生は問題なく出来るようになる代わりに、この状態でiPhoneのBluetoothをOFFにし、一度セルタップ再生をした後に近接センサーを覆い隠し再生させると、上部スピーカーでの小音再生ではなく、通常スピーカーの大音量再生になってしまいます。

一度でもAVAudioSession.CategoryOptions.mixWithOthersが実行されてしまうと、近接センサー再生では通常スピーカー再生になってしまうようです。

お気付きの点ございましたら、お手数ですが、アドバイス頂けますと幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問