2011-09-08 8 views
7

iphone/ipad/ipodにどのオーディオデバイスが接続されているかを検出する方法を見つけようとしています。私は音声ルートの呼び出しとルートの変更のコールバックについてはすべて知っていますが、これらは添付されているものについて何も教えてくれません。オーディオが現在ルーティングされている場所のみを報告します。たとえば、オーディオがスピーカーを経由しているときに、ヘッドフォンやBluetoothが接続されているかどうかを知る必要があります。例えば、Bluetoothを使用してヘッドセットを接続した後、Bluetoothを切断すると判断した場合、音声がまだヘッドフォン経由でルーティングされている場合でも、Bluetoothが切断されていることがわかります。添付のオーディオデバイスを検出するiOS

+1

私のアプリではストリームが正しく再生されていますが、オーディオ出力(ヘッドフォンが抜かれている)を変更すると、再生が停止します..オーディオ出力が変更されたときを検出する方法は? –

+2

はい、ルート変更を検出することは、AudioSessionPropertyListenerコールバックを使用して行われます。プロパティリスナーは、AudioSessionAddPropertyListener関数を介して登録されます。しかし、それは私が上でやろうとしたことではありません。私のアプリでは、使用可能なルーティングオプションを正しく表示するためにどのデバイスが接続されているかを検出する必要があります。 – Cliff

答えて

0

InputSourceとOutputDestinationsのリストをAudioSessionプロパティから取得できます。

kAudioSessionProperty_InputSources 
kAudioSessionProperty_OutputDestinations 

そして、それぞれの詳細を照会するために、あなたが使用することができます: は、これらのセッションプロパティをチェック

kAudioSessionProperty_InputSource 
kAudioSessionProperty_OutputDestination 
+0

これらのプロパティはUSBアクセサリ用ですので、私の状況では適用されません。私はブルートゥースや有線ヘッドセットが接続されているときを検出するために探しています。 – Cliff

+0

申し訳ありませんが、私の謝罪、私は今あなたの質問の違いを参照してください。 – MOK9

1

あなたが使用する必要があるのiOS 5の場合:

残念ながら
CFStringRef newRoute; 
size = sizeof(CFStringRef); 
XThrowIfError(AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &newRoute), "couldn't get new audio route"); 
if (newRoute) 
{ 
    CFShow(newRoute); 
    if (CFStringCompare(newRoute, CFSTR("HeadsetInOut"), NULL) == kCFCompareEqualTo) // headset plugged in 
      { 
      colorLevels[0] = .3;     
      colorLevels[5] = .5; 
      } 
    else if (CFStringCompare(newRoute, CFSTR("SpeakerAndMicrophone"), NULL) == kCFCompareEqualTo) 
} 
0

現在iOS11の時点で、現在接続されている出力デバイスのリストを確実に取得するAPIはないようです - 現在のルートが変更されると、AVAu経由で(現在ルーティングされている)1つのデバイスしか表示されませんdioSessionのcurrentRoute.outputsには、複数のデバイスが接続されている可能性があります。適切なオーディオセッションモードは、(例えばAVAudioSessionModeVoiceChatまたはAVAudioSessionModeVideoChat)を使用している場合

ただし、入力のために、そしてそれは、HFPプロファイルを持つBluetoothデバイスを含み、一つはAVAudioSessionのavailableInputs、およびそれらを経由して利用可能な入力のリストを取得することができますそのデバイスがアクティブなルートでない場合でも入力が一覧表示されます。これは、たとえばBluetoothからスピーカーへのMPVolumeView経由の手動オーバーライドや、HFPは双方向IO(両方向入力出力を見る)、入力を見ることで出力HFP Bluetoothがまだ利用可能かどうか判断できます。

関連する問題