如何select外接麦克风
How to select external microphone
我已经成功地为 iOS 编写了一个使用 AVAudioRecorder 的简单录音应用程序。到目前为止,如果插入耳机插孔,它可以与内部麦克风或外部麦克风一起使用。如何 select 通过 USB "lightning port" 连接的音频源?我必须深入研究 Core Audio 吗?
具体来说,我正在尝试连接 Apogee Electronics ONE USB 音频接口。
您需要为此导入 AVFoundation。使用 AVAudioSession 的共享实例,您可以识别当前路由 AVAudioSessionPortDescription 将帮助您识别端口 type.I 相信您不能 select 特定的麦克风,但您可以识别并检查会话的当前路由
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);
}
使用AVAudioSession,获取availableInputs。 return 值是一个 AVAudioSessionPortDescriptions 数组。遍历数组检查 portType 属性 以匹配您的首选端口类型,然后使用端口描述设置 preferredInput。
Swift:
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)
}
}
Objective-C:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSString *preferredPortType = AVAudioSessionPortUSBAudio;
for (AVAudioSessionPortDescription *desc in audioSession.availableInputs) {
if ([desc.portType isEqualToString: preferredPortType]) {
[audioSession setPreferredInput:desc error:nil];
}
}
我已经成功地为 iOS 编写了一个使用 AVAudioRecorder 的简单录音应用程序。到目前为止,如果插入耳机插孔,它可以与内部麦克风或外部麦克风一起使用。如何 select 通过 USB "lightning port" 连接的音频源?我必须深入研究 Core Audio 吗?
具体来说,我正在尝试连接 Apogee Electronics ONE USB 音频接口。
您需要为此导入 AVFoundation。使用 AVAudioSession 的共享实例,您可以识别当前路由 AVAudioSessionPortDescription 将帮助您识别端口 type.I 相信您不能 select 特定的麦克风,但您可以识别并检查会话的当前路由
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);
}
使用AVAudioSession,获取availableInputs。 return 值是一个 AVAudioSessionPortDescriptions 数组。遍历数组检查 portType 属性 以匹配您的首选端口类型,然后使用端口描述设置 preferredInput。
Swift:
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)
}
}
Objective-C:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSString *preferredPortType = AVAudioSessionPortUSBAudio;
for (AVAudioSessionPortDescription *desc in audioSession.availableInputs) {
if ([desc.portType isEqualToString: preferredPortType]) {
[audioSession setPreferredInput:desc error:nil];
}
}