如何将audio路由到扬声器而不使用AudioSessionSetProperty?

由于AudioSessionSetProperty可能会被deprecated ,我试图find一个如何使用其他方式将audio路由到speaker的代码示例。

以前我做了以下工作:

 -(void)setSpeakerEnabled { debugLog(@"%s",__FUNCTION__); UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty ( kAudioSessionProperty_OverrideAudioRoute, sizeof (audioRouteOverride), &audioRouteOverride ); } 

试图得到相同的结果,但without call AudioSessionSetProperty

在iOS的每个发行版上,更多的audioSession属性都被迁移到AVFoundation,因此您应该在可用时优先使用这些属性。

由于iOS 6 kAudioSessionProperty_OverrideAudioRoute在AVAudioSession中由方法表示

 - (BOOL)overrideOutputAudioPort:error: 

可用的值是AVAudioSessionPortOverrideNoneAVAudioSessionPortOverrideSpeaker

以下是完全通过AVFoundationconfiguration的示例audio会话:

  - (void)configureAVAudioSession { // Get your app's audioSession singleton object AVAudioSession *session = [AVAudioSession sharedInstance]; // Error handling BOOL success; NSError *error; // set the audioSession category. // Needs to be Record or PlayAndRecord to use audioRouteOverride: success = [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]; if (!success) { NSLog(@"AVAudioSession error setting category:%@",error); } // Set the audioSession override success = [session overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; if (!success) { NSLog(@"AVAudioSession error overrideOutputAudioPort:%@",error); } // Activate the audio session success = [session setActive:YES error:&error]; if (!success) { NSLog(@"AVAudioSession error activating: %@",error); } else { NSLog(@"AudioSession active"); } } 

UPDATE

从iOS 7.0开始,audio会话服务C API现在完全不赞成使用AVAudioSession。

更新2

 - (BOOL)overrideOutputAudioPort:error: 

是一种方法,而不是一个属性,它设置了一个基本的只写 UInt32值。 您无法获得当前值,您应该将该方法设置为临时状态。 如果audio路由改变或被中断,则该属性重置为其默认值( AVAudioSessionPortOverrideNone )。 您可以通过AVAudioSessionDelegate获得中断通知。

 NSError *error; [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker error:&error]; if(error) { NSLog(@"Error: AudioSession cannot use speakers"); } 

Foundry的解决scheme与Mario Diana的这个博客一起,也​​允许我升级iOS 7中弃用的audio会话设置代码。我的旧代码基于Matthijs Hollemans的AudioBufferPlayer 。 请记住添加AVFoundation.framework。