AudioSessionSetProperty
がdeprecated
になる可能性があるため、他の手段を使用して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
です
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");
}
}
[〜#〜] update [〜#〜]
IOS 7.0以降、オーディオセッションサービスC APIは完全に廃止され、AVAudioSessionが採用されました。
更新2
- (BOOL)overrideOutputAudioPort:error:
プロパティではなくメソッドであり、基礎となるwrite-only UInt32値を設定します。現在の値を取得することはできません。また、メソッドを一時的な状態の設定として扱う必要があります。オーディオルートが変更または中断された場合、プロパティはデフォルト(AVAudioSessionPortOverrideNone
)にリセットされます。 AVAudioSessionDelegate
経由で中断通知を受け取ることができます。
NSError *error;
[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideSpeaker
error:&error];
if(error)
{
NSLog(@"Error: AudioSession cannot use speakers");
}
let audioSession = AVAudioSession.sharedInstance()
do {
try audioSession.setCategory(AVAudioSession.Category.playAndRecord, mode: .spokenAudio, options: .defaultToSpeaker)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch {
print("error.")
}
//このコードをviewLoad領域に貼り付けます
Foundryのソリューションと this blog Mario Dianaにより、iOS 7で非推奨になったオーディオセッションのセットアップコードをアップグレードすることもできました。私の古いコードは AudioBufferPlayerMatthijs Hollemans 。 AVFoundation.frameworkを必ず追加してください。