什么是kAudioSessionProperty_InputSources实际上有用?

时间:2013-07-25 17:19:47

标签: iphone ios core-audio

我尝试使用以下代码获取iPhone上可用音频输入设备的列表:

CFArrayRef arrayRef;
UInt32 size = sizeof(arrayRef);
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_InputSources, &size, &arrayRef);
assert(status == noErr);
NSArray *array = (__bridge NSArray *)arrayRef;

调用工作并返回且没有错误,但无论我连接到哪个硬件,结果数组总是为空。我已经尝试了两种常用的手机耳机,一种来自Apple的原装耳机和一种来自三星的耳机以及两种USB麦克风(iXY from RodeiM2X from Tascam),但阵列始终保持空白。所以我想知道这个属性实际上会列出哪种输入源?它可以用吗?

通过在音频路由上使用侦听器回调,我能够验证是否正确检测到所有4个设备。我还能够使用每个设备录制音频,因此它们都能正常工作。我使用带有iOS 6.1.3(10B329)的iPhone 4S。

2 个答案:

答案 0 :(得分:2)

我对iPhone上的音频编程非常陌生,所以我对这个特定属性有什么好处的问题没有答案,但如果你想要音频输入列表,我认为这样可行:< / p>

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

这提供了一个AVAudioSessionPortDescription对象数组。

for (id object in ais) {
    AVAudioSessionPortDescription * pd = (AVAudioSessionPortDescription*)object;
    NSLog(@"%@",pd.portName);
}

答案 1 :(得分:2)

您所指的属性仅适用于通过 iPad相机连接套件连接的USB音频附件中的音频输入源,如 AudioSessionServices 类参考中所述。

要获得一个非零数组,您需要测试插入 iPad相机连接套件的USB音频工作站。

此链接列出了一些使用 iPad相机连接套件的硬件。

Connecting USB audio interfaces using the Apple iPad Camera Connection Kit.

同样来自班级参考

  

如果附件中没有可用的音频输入源,则此属性的值为空数组。

因此,从以上链接中找到的列表(向下滚动到某些兼容设备的列表子标题),您感兴趣的设备会产生一个!nil结果,这将是某些设备提供音频输入,例如 Alesis iO4 iO2 iO2 express

编辑:Shawn Hershey提供的答案中有关于使用非弃用的Objective-c替代方案的优点。但是,您最感兴趣的是 AVAudioSessionPortDescription 类的 portType 属性。 (可从iOS 6.0获得) 两个感兴趣的常数是 - AVAudioSessionPortLineIn AVAudioSessionPortUSBAudio 。提到的第一个是通过基座连接器输入音频,这是测试麦克风提到的连接方式。

在iOS 7.0及更高版本中,您可以查询 AVAudioSession 类的 availableInputs 属性。在iOS 6中,您只能查询 currentRoute 属性。

我发现这个技术Q&amp; A很有帮助 - AVAudioSession - microphone selection