尝试类似于以下内容,它比你所需的更多,但你可以简化它:
+ (NSString *) demonstrateInputSelection
{
NSError* theError = nil;
BOOL result = YES;
NSMutableString *info = [[NSMutableString alloc] init];
[info appendString: @" Device Audio Input Hardware\n"];
NSString *str = nil;
if( iOSMajorVersion < 7 ){
str = @"No input device information available";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
return info;
}
AVAudioSession* myAudioSession = [AVAudioSession sharedInstance];
result = [myAudioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:&theError];
if (!result)
{
NSLog(@"setCategory failed");
}
result = [myAudioSession setActive:YES error:&theError];
if (!result)
{
NSLog(@"setActive failed");
}
NSArray* inputs = [myAudioSession availableInputs];
str = [NSString stringWithFormat:@"\n--- Ports available on %@: %d ---", [UIDevice currentDevice].name , [inputs count]];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
AVAudioSessionPortDescription* builtInMicPort = nil;
AVAudioSessionDataSourceDescription* frontDataSource = nil;
for (AVAudioSessionPortDescription* port in inputs)
{
str = @"\n**********";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
str = [NSString stringWithFormat:@"Port :\"%@\": UID:%@", port.portName, port.UID ];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
if( [port.dataSources count] ){
str = [NSString stringWithFormat:@"Port has %d data sources",(unsigned)[port.dataSources count] ];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
str = [NSString stringWithFormat:@">%@", port.dataSources];
NSLog(@"%@",str);
if( [port.portType isEqualToString:AVAudioSessionPortLineIn] ){
str = @"Line Input found";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
else if( [port.portType isEqualToString:AVAudioSessionPortUSBAudio] ){
str = @"USB Audio found";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
else if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]){
builtInMicPort = port;
str = @"Built-in Mic found";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
else if ([port.portType isEqualToString:AVAudioSessionPortHeadsetMic]){
builtInMicPort = port;
str = @"Headset Mic found";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
else{
str = @"Other input source found";
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
for (AVAudioSessionDataSourceDescription* source in port.dataSources)
{
str = [NSString stringWithFormat:@"\nName:%@ (%d) \nPolar:%@ \nType:%@ \nPatterns:%@", source.dataSourceName, [source.dataSourceID intValue], source.selectedPolarPattern, port.portType, source.supportedPolarPatterns];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
}
str = @"\n---- Current Selected Ports ----\n";
NSLog(@"%@",str);
[info appendFormat:@"%@",str];
NSArray *currentInputs = myAudioSession.currentRoute.inputs;
for( AVAudioSessionPortDescription *port in currentInputs ){
str = [NSString stringWithFormat:@"\nInput Port :\"%@\":", port.portName ];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
if( [port.dataSources count] ){
str = [NSString stringWithFormat:@"Port has %d data sources",(unsigned)[port.dataSources count] ];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
str = [NSString stringWithFormat:@"Selected data source:%@", port.selectedDataSource.dataSourceName];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
if( [port.selectedDataSource.supportedPolarPatterns count] > 0 ){
str = [NSString stringWithFormat:@"Selected polar pattern:%@", port.selectedDataSource.selectedPolarPattern];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
}
}
NSArray *currentOutputs = myAudioSession.currentRoute.outputs;
for( AVAudioSessionPortDescription *port in currentOutputs ){
str = [NSString stringWithFormat:@"\nOutput Port :\"%@\":", port.portName ];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
if( [port.dataSources count] ){
str = [NSString stringWithFormat:@"Port has %d data sources",(unsigned)[port.dataSources count] ];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
str = [NSString stringWithFormat:@"Selected data source:%@", port.selectedDataSource.dataSourceName];
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
}
}
if( myAudioSession.preferredInput.portName ){
str = [NSString stringWithFormat:@"\nPreferred Port: %@ Source:%@\n", myAudioSession.preferredInput.portName, myAudioSession.preferredInput.selectedDataSource.dataSourceName];
} else {
str = @"\nNo Preferred Port set";
}
NSLog(@"%@",str);
[info appendFormat:@"%@\n",str];
return info;
if (frontDataSource)
{
NSLog(@"Currently selected source is \"%@\" for port \"%@\"", builtInMicPort.selectedDataSource.dataSourceName, builtInMicPort.portName);
NSLog(@"Attempting to select source \"%@\" on port \"%@\"", frontDataSource, builtInMicPort.portName);
theError = nil;
result = [builtInMicPort setPreferredDataSource:frontDataSource error:&theError];
if (!result)
{
NSLog(@"setPreferredDataSource failed");
}
}
theError = nil;
result = [myAudioSession setPreferredInput:builtInMicPort error:&theError];
if (!result)
{
NSLog(@"setPreferredInput failed");
}
return info;
}