iOS のリリースごとに、より多くの audioSession プロパティが AVFoundation に移行されるため、利用可能な場合は優先的にそれらを使用する必要があります。
iOS 6kAudioSessionProperty_OverrideAudioRoute
は AVAudioSession でメソッドによって表されるため、
- (BOOL)overrideOutputAudioPort:error:
利用可能な値は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");
}
}
アップデート
iOS 7.0 以降、Audio Session Services C API は完全に非推奨になり、AVAudioSession が優先されます。
更新 2
- (BOOL)overrideOutputAudioPort:error:
プロパティではなくメソッドであり、基になる書き込み専用のUInt32 値を設定します。現在の値を取得することはできず、メソッドを一時的な状態を設定するものとして扱う必要があります。オーディオ ルートが変更または中断された場合、プロパティはデフォルトにリセットされます ( AVAudioSessionPortOverrideNone
)。経由で中断通知を受け取ることができますAVAudioSessionDelegate
。