2

メッセージングベースのiPhoneアプリで働いています。他の人からのメッセージを受信するためにビープ音を追加しました。を使用してビープ音を鳴らしていAVAudioPlayerます。私の問題は、ユーザーが私のアプリケーションからメッセージを受信した場合にバックグラウンドで他のアプリケーションからの曲を聞いたときにビープ音が鳴り、バックグラウンドの曲/オーディオが再開しないことです。

バックグラウンドソング/オーディオを一時停止してビープ音を再生したいのですが、アプリケーションからそのオーディオ/ソングを再開する必要があります。iOS開発で可能ですか?誰か助けてくれませんか?

編集:

これは私のサンプルコードです。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"Music";
    self.navigationController.navigationBar.barStyle = UIBarStyleBlack;

    NSString *urlString = [[NSBundle mainBundle] pathForResource:@"basicsound" ofType:@"wav"];
    NSURL *audioURL = [[NSURL alloc] initWithString:urlString];
    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];
    [audioPlayer setDelegate:self];
    [audioPlayer prepareToPlay];

    audioSession = [AVAudioSession sharedInstance];
    [audioSession setActive:YES error:&error];
    [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error];
    [audioPlayer play];    
}

-(void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag
{
    if (flag == YES) 
    {
        NSLog(@"Audio Played successfully");
        NSError *error;
        [audioSession setActive:NO error:&error];
    }
}
4

2 に答える 2

15

パーティーに少し遅れましたが、サウンドを再生した後のバックグラウンド(iPodミュージックなど)の一時停止と一時停止解除の問題の解決策を探している場合は、オーディオセッションを非アクティブ化するときに次を使用する必要があります。

[[AVAudioSession sharedInstance] setActive:NO withFlags:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];

//非推奨ではない新しいメソッド:

[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:&error];

アプリケーションでオーディオセッションを必要としない場合(つまり、サウンドを出力していない場合)は、それを非アクティブ化する必要があります。理にかなっている場合は、この方法を使用して、バックグラウンドオーディオが通知され、再開できるようにする必要があります(この通知を受信するアプリケーションは必ずしも再開する必要はありません)。

さらに、必要な場合にのみサウンドを再生できるようにするには、適切なオーディオカテゴリを使用する必要があります。これは、以外のカテゴリのいずれかで実行できますAVAudioSessionCategoryAmbient。これにより、オーディオセッションがアクティブになると、バックグラウンドオーディオが自動的に一時停止します。ただし、上記のコードを使用して行われるバックグラウンドオーディオは再アクティブ化されません。その場合、前述のように、バックグラウンドオーディオが通知の処理方法を決定します。

ちなみに、調べるもう1つのオプションは、オーディオの「ダッキング」です。単純なアラートサウンドのように、サウンドを単独で再生する必要がない場合は、ダッキングを使用して、バックグラウンドオーディオの音量を下げてサウンドを再生し、完了すると、サウンドが終了したときにバックグラウンドオーディオを通常の状態に戻します。遊んでいます。これらの概念の詳細については、オーディオセッションの構成を参照してください。

于 2013-02-13T21:35:54.200 に答える
6

すべてのアプリケーションに対してこれを行うことはできません。アプリケーションでiPodプレーヤーを使用するアプリケーションの場合:

アプリケーションがフォアグラウンドにあると仮定します。あなたはこれを行うことができます:

MPMusicPlayerController *mp = [MPMusicPlayerController iPodMusicPlayer];        
[mp stop]; // or [mp pause]

MediaPlayer.frameworkこれにはとが必要#import <MediaPlayer/MediaPlayer.h>です。

詳細については、MPMusicPlayerControllerリファレンスをご覧ください。


オーディオプレーヤーセッションを介してそれを行うには、プロパティを使用できますkAudioSessionCategory_SoloAmbientSoundここを参照してください

これは、 AVAudioSessionクラスAVAudioSessionCategorySoloAmbientで定義されているものと似ています。

ドキュメントからの引用:

このカテゴリを使用すると、他のアプリからの音声は無音になります。

于 2012-09-25T11:01:23.900 に答える