只使用iPhone中的顶级麦克风

据我所知在iPhone上有2个麦克风。 1靠近audio插孔旁边的顶部,另一个是您讲话的麦克风。 默认的麦克风似乎是你说的那个。

如何以编程方式select使用哪个麦克风? 我正在使用核心audio为我的应用程序。

基本上我想用顶级麦克风进行录音。 目前当我录制底部麦克风时正在使用。 有没有办法来覆盖默认的麦克风设置?

我知道,可以通过以下来覆盖默认的扬声器设置。

UInt32 yes = YES; AudioSessionSetProperty( kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(UInt32), &yes ); 

iPhone上的麦克风类似吗?

谢谢。

使用AVAudioSession获得可用的input。

 NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs); "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>" 

然后使用这些input之一来获取availableDataSources,就像这样。

 NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].dataSources); "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>", "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>", "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>" 

我们可以看到这款iPhone上实际上有三个麦克风:正面,背面和背面。 现在您可以设置您的首选数据源。

 AVAudioSessionPortDescription *port = [AVAudioSession sharedInstance].availableInputs[0]; for (AVAudioSessionDataSourceDescription *source in port.dataSources) { if ([source.dataSourceName isEqualToString:@"Back"]) { [port setPreferredDataSource:source error:nil]; } } 

希望这可以帮助你快乐编码!

我2分钱快4:

 class func test3Mics(){ guard let inputs = AVAudioSession.sharedInstance().availableInputs else{ return } print(inputs.debugDescription) for input in inputs{ print(input.dataSources ?? "??") } // set preferred: let preferredPort = inputs[0] if let dataSources = preferredPort.dataSources{ for source in dataSources { if source.dataSourceName=="Back" { do { try preferredPort.setPreferredDataSource(source) }catch _ { print("cannot set frontDataSource") } } } } }