InputSources实际上对于?
我尝试使用以下代码获取iPhone上可用音频输入设备的列表:
CFArrayRef arrayRef;
UInt32 size = sizeof(arrayRef);
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_InputSources, &size, &arrayRef);
assert(status == noErr);
NSArray *array = (__bridge NSArray *)arrayRef;
该调用工作并返回没有错误,但结果数组始终为空,无论我连接到什么硬件。 我已经尝试了两种手机耳机,一种是Apple的原装耳机,另一种是三星的耳机,还有两种USB麦克风(Rode的iXY和Tascam的iM2X),但阵列一直保持空白。 所以我想知道这个属性实际上会列出哪些输入源? 它可以使用吗?
通过在音频路由上使用侦听器回调,我可以验证是否正确检测到所有4个设备。 我也能够用每个设备录制音频,所以它们都能正常工作。 我在iOS 6.1.3(10B329)上使用iPhone 4S。
我对iPhone上的音频编程非常陌生,所以我没有回答这个特定属性的好处,但是如果您想要音频输入列表,我认为这将起作用:
NSArray * ais = [[AVAudioSession sharedInstance] availableInputs];
这提供了一个AVAudioSessionPortDescription对象的数组。
for (id object in ais) {
AVAudioSessionPortDescription * pd = (AVAudioSessionPortDescription*)object;
NSLog(@"%@",pd.portName);
}
您所指的属性仅适用于通过iPad相机连接套件连接的USB音频配件中的音频输入源,如AudioSessionServices类参考中所述。
要获得一个不是零的阵列,您需要测试一个插入iPad摄像头连接套件的USB音频工作站。
这里有一个链接列出了一些使用iPad摄像头连接套件的硬件。
使用Apple iPad Camera Connection Kit连接USB音频接口。
也来自类的参考
如果附件中没有可用的音频输入源,则此属性的值为空数组。
因此,从上面链接中找到的列表(向下滚动到某些兼容设备的子标题列表),您可能会感兴趣的设备会产生一个零结果,可能是一些提供音频输入的设备,例如Alesis iO4 , iO2或iO2表示 。
编辑:在Shawn Hershey提供的答案中,有关使用非弃用的objective-c替代方案的优点。 然而,你会对AVAudioSessionPortDescription类的portType属性最感兴趣。 (可从iOS 6.0获得)感兴趣的两个常量是 - AVAudioSessionPortLineIn和AVAudioSessionPortUSBAudio 。 第一个提到的是通过基座连接器进行音频输入,这是您测试麦克风连接的方式。
在iOS 7.0和更高版本中,您可以查询AVAudioSession类的availableInputs属性。 在iOS 6中,您只能查询currentRoute属性。
我发现这个技术问答很有帮助 - AVAudioSession - 麦克风选择
链接地址: http://www.djcxy.com/p/60179.html