我已成功为iOS编写了一个使用AVAudioRecorder的简单录制应用程序。到目前为止,它可以与内置麦克风或外接麦克风配合使用,如果它插入耳机插孔。如何选择通过USB"闪电端口"?连接的音频源?我是否需要深入了解Core Audio?
特别是我试图连接Apogee Electronics ONE USB音频接口。
答案 0 :(得分:6)
使用AVAudioSession获取availableInputs。返回值是AVAudioSessionPortDescriptions数组。通过数组检查portType属性以匹配您的首选端口类型,然后使用端口描述设置preferredInput。
let audioSession = AVAudioSession.sharedInstance()
if let desc = audioSession.availableInputs?.first(where: { (desc) -> Bool in
return desc.portType == AVAudioSessionPortUSBAudio
}){
do{
try audioSession.setPreferredInput(desc)
} catch let error{
print(error)
}
}
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSString *preferredPortType = AVAudioSessionPortUSBAudio;
for (AVAudioSessionPortDescription *desc in audioSession.availableInputs) {
if ([desc.portType isEqualToString: preferredPortType]) {
[audioSession setPreferredInput:desc error:nil];
}
}
答案 1 :(得分:1)
您需要为此导入AVFoundation。使用AVAudioSession的共享实例,您可以识别AVAudioSessionPortDescription的当前路由将帮助您识别端口类型。我相信您不能选择特定的麦克风,但您可以识别并检查会话的当前路径
AVAudioSession *session = [AVAudioSession sharedInstance];
AVAudioSessionPortDescription *input = [[session.currentRoute.inputs count] ? session.currentRoute.inputs:nil objectAtIndex:0];
if ([input.portType isEqualToString:AVAudioSessionPortLineIn]) {
NSLog(@"Audio Route: Input Port: LineIn");
}
else if ([input.portType isEqualToString:AVAudioSessionPortBuiltInMic]) {
NSLog(@"Audio Route: Input Port: BuiltInMic");
}
else if ([input.portType isEqualToString:AVAudioSessionPortHeadsetMic]) {
NSLog(@"Audio Route: Input Port: HeadsetMic");
}
else if ([input.portType isEqualToString:AVAudioSessionPortBluetoothHFP]) {
NSLog(@"Audio Route: Input Port: BluetoothHFP");
}
else if ([input.portType isEqualToString:AVAudioSessionPortUSBAudio]) {
NSLog(@"Audio Route: Input Port: USBAudio");
}
else if ([input.portType isEqualToString:AVAudioSessionPortCarAudio]) {
NSLog(@"Audio Route: Input Port: CarAudio");
}
else {
NSLog(@"Audio Input Port: Unknown: %@",input.portType);
}