Using MPMediaItems with AVAudioPlayer

iphone, objective-c

Solution

If `MPMusicPlayerController` doesn't meet your needs, you can copy the audio to your local bundle so you can use `AVAudioPlayer`.

EDIT

You basically have three options for playing audio from the user's iPod library: `MPMediaPlayer`, `AVPlayer` and `AVAudioPlayer`.

Here are examples for `MPMediaPlayer` and `AVPlayer`:

- (void) mediaPicker: (MPMediaPickerController *) mediaPicker
   didPickMediaItems: (MPMediaItemCollection *) collection {


    MPMediaItem *item = [[collection items] objectAtIndex:0];
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];

    [self dismissModalViewControllerAnimated: YES];

    // Play the item using MPMusicPlayer

    MPMusicPlayerController* appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];

    [appMusicPlayer setQueueWithItemCollection:collection];
    [appMusicPlayer play];


    // Play the item using AVPlayer

    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithURL:url];
    AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem];
    [player play];  

}

If you need to use `AVAudioPlayer` for some reason, or you need access to the audio file's actual audio data, you have to first copy the audio file to your app's directory and then work with it there. The `AVAsset` + `AVPlayer` stuff is the closest analogy to `ALAsset` if you're used to working with photos and videos.

Problem

Is it possible to pick media items using MPMediaPickerController and then load them into an AVAudioPlayer object?

Original source