开发者

How to use MPMusicPlayerController with AVAudioPlayer

开发者 https://www.devze.com 2023-01-14 15:10 出处:网络
I am trying to play an in app audio with ipod the code I am using to play the audio file is: Code: [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];

I am trying to play an in app audio with ipod the code I am using to play the audio file is:

Code:

       [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
       UInt32 doSetProperty = 1;
       AudioSessionSetProperty (kAudioSessionProperty_Over开发者_如何学运维rideCategoryMixWithOthers,  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];

and to play the ipod music I am using

Code:

player = [MPMusicPlayerController iPodMusicPlayer];

My ipod plays fine until the audio starts playing but once the audio stops I am not able to get back to the ipod to play. I am using

Code:

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");
}

to stop the audio and then just call

Code:

 [player play];

to play the ipod music but it does not play the music, it says the title to be null.

I would really appreciate if some one could help me with this.

Regards, Ankur


I suggest moving the audio session setup (including the Ambient category) to your application delegate's didFinishLaunchingWithOptions and not using the Playback category at all. You can still play AVAudio sounds just fine with the Ambient setting.

If you want to kill iPod music whenever you play AV sounds, then you should only be using the Playback category. (I'm not exactly sure what you're trying to do.)

The error that you're getting when you try to resume the iPod music suggests that your MPMusicPlayerController object resets its song queue when it is stopped by the AVAudio sounds, and that you'll have to set up the MP player again. "Title is null" definitely sounds like a dangling pointer or the like in the MP player.


It's not possible to play iPod audio in AVAudioPlayer. You need to convert the library Asset link from ipod, using *AVURLAsset to an mp3 or wav and save it to the documents library. IOS.5 currently has a bug in the conversion (AudioExportSession) from ipod to mp3 file, so it's NOT POSSIBLE. Sorry.


You need to resume iPod player after myPlayer finish playing.

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号