web-dev-qa-db-ja.com

AVAudioSessionManager availableInputs "ポートiPhoneマイクの不明な選択データソース"

このエラーはコンソールログでしばらく気付きました。それは私のアプリケーションの実行に影響を与えませんが、私はそれが本当に迷惑だと思います。したがって、このエラーの原因を追跡し始めました。 availableInputsを呼び出すと、

NSArray *inputs = [[AVAudioSession sharedInstance] availableInputs];

それは私にログメッセージを与えます:

ERROR:     [0x3d61318c] AVAudioSessionPortImpl.mm:50: ValidateRequiredFields: Unknown selected data source for Port iPhone Microphone (type: MicrophoneBuiltIn)

入力を印刷してみました。

Printing description of inputs:
<__NSArrayI 0x188c4610>(
<AVAudioSessionPortDescription: 0x188c4580, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = (null)>,
<AVAudioSessionPortDescription: 0x18835d90, type = BluetoothHFP; name = Valore-BTi22; UID = 00:23:01:10:38:77-tsco; selectedDataSource = (null)>

そのため、selectedDataSourceは(null)です。 nullにならないようにするにはどうすればよいですか? iPhoneマイクは組み込みの入力です...私はそれがApple=によってすでに設定されていると思いますか?

23
xialin

この問題は私だけに起きているのではないようです...ここで私の理解を共有します。

私の状況は..オーディオリソースをより低いレベルで制御できるpjsipライブラリを使用しています。 [[AVAudioSession sharedInstance] availableInputs];に電話する前にサウンドデバイスが閉じられていることに気づきました

したがって、(おそらく)AVAudioSessionは、より高いレベルのコントロールとして、入力に対応するオーディオデータソースを見つけることができませんでした-エラーが示すように...

問題をさらに調査するには、オーディオソースを変更するコードのどこかをチェックし、AVAudioSessionを呼び出す前にオーディオソースがアクティブになっていることを確認することをお勧めします。

今のところここまでしか行けません...オーディオコントロールのより深い理解とより良い説明は常に高く評価されています!!

4
xialin

コンソールのエラーについては、iPhone 5Sを使用しているときにこのメッセージが時々表示されることも確認できますが、4Sではこれを確認したことがありません。コアオーディオダンプの可能性もありますが、実際のパフォーマンスには(少なくとも私にとっては)影響はないようです。

利用可能な入力に関して、実際に出力するのは利用可能な入力ポートとその説明です。このビットはさらに混乱し、selectedDataSourceフィールドがそれぞれについてnullである理由がわかりません。

私は、selectedDataSourceが何を言っているかに関係なく、iPhoneは間違いなくこれらのソースの1つ(おそらく組み込みマイク)にデフォルト設定していると言います。

ここで、ポートの説明の1つを明示的に選択したい場合は、次のようにすることができます。

NSArray *availableInputs = [[AVAudioSession sharedInstance] availableInputs];
AVAudioSessionPortDescription *port = [availableInputs objectAtIndex:0];  //built in mic for your case
NSError *portErr = nil;
[[AVAudioSession sharedInstance] setPreferredInput:port error:&portErr];

その後、portErrをチェックして、preferredInputの設定にエラーがないことを確認します。

特定のポートの説明に使用可能なdataSourcesを循環し、次を使用して1つを選択することもできます。

[port setPreferredDataSource:source error:&sourceErr];

その後に続きます:

[[AVAudioSession sharedInstance] setPreferredInput:port error:&portErr];

これらは、複数の内蔵マウスを備えたハードウェアを利用する便利なiOS7専用機能の一部です。

0
rmigneco