如何将MPMusicPlayerController与AVAudioPlayer一起使用

时间:2010-09-03 19:31:18

标签: iphone avaudioplayer mpmusicplayercontroller

我正在尝试使用ipod播放应用内音频我正在使用的代码播放音频文件:

代码:

       [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
       UInt32 doSetProperty = 1;
       AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,  sizeof(doSetProperty), &doSetProperty);
       [[AVAudioSession sharedInstance] setActive: YES error: nil];

       if(error)
       {
           NSLog(@"Some error happened");
       }

    NSString *path = [[NSBundle mainBundle] pathForResource:effect ofType:type];
    myPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    myPlayer.delegate = self;
    myPlayer.numberOfLoops = -2;
    myPlayer.volume = 1.0f;
    [myPlayer play];

播放我正在使用的ipod音乐

代码:

player = [MPMusicPlayerController iPodMusicPlayer];

我的iPod播放正常,直到音频开始播放,但一旦音频停止,我就无法回到ipod播放。我正在使用

代码:

NSString *value = [[NSUserDefaults standardUserDefaults] stringForKey:@"sound"];

if([value compare:@"ON"] == NSOrderedSame && myPlayer != nil)
{
    [myPlayer stop];
    [myPlayer release];
    myPlayer = nil;
}

NSError *error = nil;

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&error];

if(error)
{
    NSLog(@"Some error happened");
}

停止音频然后调用

代码:

 [player play];

播放ipod音乐,但它不播放音乐,它说标题为空。

如果有人能帮助我,我真的很感激。

此致 ANKUR

3 个答案:

答案 0 :(得分:1)

我建议将音频会话设置(包括Ambient类别)移动到应用程序委托的didFinishLaunchingWithOptions,而根本不使用Playback类别。您仍然可以使用Ambient设置播放AVAudio声音。

如果您想在播放AV声音时杀死iPod音乐,那么您应该只使用播放类别。 (我不确定你要做什么。)

当您尝试恢复iPod音乐时出现的错误表明,当AVAudio声音停止时,您的MPMusicPlayerController对象会重置其歌曲队列,并且您必须再次设置MP播放器。 “标题为空”绝对听起来像MP播放器中的悬空指针等。

答案 1 :(得分:1)

无法在AVAudioPlayer中播放iPod音频。您需要从ipod转换库Asset链接,使用* AVURLAsset转换为mp3或wav并将其保存到文档库。 IOS.5目前在从ipod到mp3文件的转换(AudioExportSession)中有一个错误,所以它不可能。抱歉。

答案 2 :(得分:0)

您需要在myPlayer完成播放后恢复iPod播放器。

-(void) audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
    [player play];
}