如何将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:
可用的值是AVAudioSessionPortOverrideNone
和AVAudioSessionPortOverrideSpeaker
以下是完全通过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。