0

私のアプリでは、MPMusicPlayerController を使用して .mp3 をバックグラウンド ミュージックとして再生し、AVAudioPlayer を使用して、ボタンを押すように効果音を再生します。コードは次のようになります。

// Initialization code here.
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AVAudioSession *session =[AVAudioSession sharedInstance];
//The background music and the sound-effect can play simultaneously
[session setCategory: AVAudioSessionCategoryAmbient error:nil];
[session setActive: YES error: nil];

m_sharedPlayer = [[MPMusicPlayerController applicationMusicPlayer] retain];            
[m_sharedPlayer setShuffleMode: MPMusicShuffleModeSongs];
[m_sharedPlayer setRepeatMode: MPMusicRepeatModeAll];
[m_sharedPlayer setVolume:0.2];
// choose the first song
[m_sharedPlayer setQueueWithQuery: [MPMediaQuery songsQuery]];
[m_sharedPlayer play];
...
//when need play sound-effect, soundfilename is a NSString
NSData *data =[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:soundfilename ofType:nil]];
AVAudioPlayer *audioplayer = [[AVAudioPlayer alloc] initWithData:data error:nil];
audioplayer =1.0;
audioplayer.delegate =self;
[audioplayer prepareToPlay];
[audioplayer play];
...

audioplayer は、再生が終了した後にリリースされます。

コードは iOS 5.0 で動作します。しかし、iOS 6.0 ではすべてが変わりました。とにかく、AVAudioPlayer はサウンドを再生しません。

この行を変更すると: [session setCategory: AVAudioSessionCategoryAmbient error:nil]; To: [セッション setCategory: AVAudioSessionCategoryPlaybackエラー: nil];

AVAudioPlayer はサウンドを再生しますが、MPMusicPlayerController の再生セッションを中断します... バックグラウンド ミュージックを中断せずに AVAudioPlayer を再生する方法を見つけるにはどうすればよいですか? どうもありがとうございました。

4

1 に答える 1

2

わかった。私は最終的に解決策を見つけます。iOS 6.0 では、apple は新しい関数呼び出し setCategory:withOptions: を提供します。それは動作します。したがって、コードは次のようになります。

    AVAudioSession *session =[AVAudioSession sharedInstance];
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version <6.0) {
        [session setCategory:AVAudioSessionCategoryAmbient error:nil];
    }
    else {
        [session setCategory: AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error: nil];
    }

ありがとう。

于 2012-12-23T23:02:41.720 に答える