AVAudioSessionManager availableInputs“端口iPhone麦克风的未知选定数据源”

时间:2014-01-14 14:37:12

标签: ios iphone avaudiosession

我在控制台日志中注意到这个错误了一段时间。虽然它不会影响我的应用程序的执行,但我发现它真的很烦人。因此,我开始追踪这个错误的来源。当我调用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)。我不知道该怎么办才能使它不为空? iPhone麦克风是一个内置输入......我想它已经由Apple设定了?

2 个答案:

答案 0 :(得分:4)

这个问题似乎不仅仅发生在我身上......我将在这里分享我的理解......

我的情况是..我正在使用pjsip库,它具有较低级别的音频资源控制。我注意到,在我拨打[[AVAudioSession sharedInstance] availableInputs];

之前,声音设备已经关闭

因此,(我猜)AVAudioSession,作为更高级别的控件,无法为其输入找到相应的音频数据源 - 如错误所示......

要进一步调查此问题,您最好检查代码中修改音频源的位置..并确保在拨打AVAudioSession之前激活音频源

我现在只能走这么远......对音频控制的深入理解和更好的解释总是受到赞赏!!

答案 1 :(得分:0)

关于控制台中的错误,我还可以确认我在使用iPhone 5S时有时会收到此消息,但我从未在4S上看过它。它可能只是一些核心音频转储,但它似乎并没有影响实际性能(至少对我而言)。

关于可用输入,您实际打印的是可用输入端口及其描述。这个位更令人困惑,我不明白为什么selectedDataSource字段对于每一个都为空。

我会说,无论选择的数据源是什么,iPhone肯定是默认为其中一个来源(可能是内置麦克风)。

现在,如果您想明确选择其中一个端口描述,可以执行以下操作:

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时没有错误。

值得注意的是,您也可以循环使用特定端口描述的可用数据源,并使用

选择一个
[port setPreferredDataSource:source error:&sourceErr];

然后跟着:

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

这些是一些方便的iOS7功能,可以利用具有多个内置鼠标的硬件。