37

AudioSessionSetPropertyなる可能性があるため、他の手段を使用してdeprecatedオーディオを にルーティングする方法のコード例を見つけようとしています。speaker

以前は、次のことを行いました。

-(void)setSpeakerEnabled
{
    debugLog(@"%s",__FUNCTION__);
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;

    AudioSessionSetProperty (
                         kAudioSessionProperty_OverrideAudioRoute,
                         sizeof (audioRouteOverride),
                         &audioRouteOverride
                         );
}

同じ結果を取得しようとしていますがwithout callAudioSessionSetProperty.

4

4 に答える 4

60

iOS のリリースごとに、より多くの audioSession プロパティが AVFoundation に移行されるため、利用可能な場合は優先的にそれらを使用する必要があります。

iOS 6kAudioSessionProperty_OverrideAudioRouteは AVAudioSession でメソッドによって表されるため、

- (BOOL)overrideOutputAudioPort:error:

利用可能な値はAVAudioSessionPortOverrideNoneAVAudioSessionPortOverrideSpeaker

以下は、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

于 2013-09-15T01:41:05.133 に答える
0

Foundry のソリューションとMario Diana によるこのブログを組み合わせることで、iOS 7 で廃止されたオーディオ セッション設定コードをアップグレードすることもできました。私の古いコードは 、Matthijs Hollemansによる AudioBufferPlayerに基づいていました。AVFoundation.framework を忘れずに追加してください。

于 2016-06-03T02:00:41.723 に答える