Jim*_*ins 37 objective-c ios avaudiosession
作为AudioSessionSetProperty有可能成为deprecated,我想找到的代码示例如何路由音频到speaker使用其他手段.
以前我做过以下事情:
-(void)setSpeakerEnabled
{
debugLog(@"%s",__FUNCTION__);
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (
kAudioSessionProperty_OverrideAudioRoute,
sizeof (audioRouteOverride),
&audioRouteOverride
);
}
Run Code Online (Sandbox Code Playgroud)
试图获得相同的结果,但without call到AudioSessionSetProperty.
fou*_*dry 59
在iOS的每个版本中,更多的audioSession属性都会迁移到AVFoundation,因此您应该在可用时优先使用这些属性.
由于iOS 6 kAudioSessionProperty_OverrideAudioRoute在AVAudioSession中由方法表示
- (BOOL)overrideOutputAudioPort:error:
Run Code Online (Sandbox Code Playgroud)
可用值为AVAudioSessionPortOverrideNone和AVAudioSessionPortOverrideSpeaker
以下是完全通过AVFoundation配置的示例音频会话:
- (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");
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE
自iOS 7.0起,Audio Session Services C API现已完全弃用,转而支持AVAudioSession.
更新2
- (BOOL)overrideOutputAudioPort:error:
Run Code Online (Sandbox Code Playgroud)
是一个方法,而不是属性,它设置一个基础的只写 UInt32值.您无法获取当前值,您应该将该方法视为设置临时状态.如果音频路由更改或中断,则属性将重置为其默认值(AVAudioSessionPortOverrideNone).您可以通过获取中断通知AVAudioSessionDelegate.
NSError *error;
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if(error)
{
NSLog(@"Error: AudioSession cannot use speakers");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35026 次 |
| 最近记录: |