MPMediaPickerDelegate
Load music with MPMediaPickerControllerDelegate and play it with AVAudioPlayer
Section titled “Load music with MPMediaPickerControllerDelegate and play it with AVAudioPlayer”Go through the steps:
- Add ‘NSAppleMusicUsageDescription’ to your Info.plist for the privacy authority.
- Make sure your music is available in your iPhone. It will not work in the simulator.
import UIKitimport AVFoundationimport MediaPlayer
class ViewController: UIViewController, MPMediaPickerControllerDelegate {
var avMusicPlayer: AVAudioPlayer! var mpMediapicker: MPMediaPickerController! var mediaItems = [MPMediaItem]() let currentIndex = 0
override func viewDidLoad() { super.viewDidLoad() }
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool){ //What to do? }
func mediaPicker(_ mediaPicker: MPMediaPickerController, didPickMediaItems mediaItemCollection: MPMediaItemCollection) { mediaItems = mediaItemCollection.items updatePlayer() self.dismiss(animated: true, completion: nil) }
func updatePlayer(){ let item = mediaItems[currentIndex] // DO-TRY-CATCH try to setup AVAudioPlayer with the path, if successful, sets up the AVMusicPlayer, and song values. if let path: NSURL = item.assetURL as NSURL? { do { avMusicPlayer = try AVAudioPlayer(contentsOf: path as URL) avMusicPlayer.enableRate = true avMusicPlayer.rate = 1.0 avMusicPlayer.numberOfLoops = 0 avMusicPlayer.currentTime = 0 } catch { avMusicPlayer = nil } } }
@IBAction func Play(_ sender: AnyObject) { //AVMusicPlayer.deviceCurrentTime avMusicPlayer.play() }
@IBAction func Stop(_ sender: AnyObject) { avMusicPlayer.stop() }
@IBAction func picker(_ sender: AnyObject) { mpMediapicker = MPMediaPickerController.self(mediaTypes:MPMediaType.music) mpMediapicker.allowsPickingMultipleItems = false mpMediapicker.delegate = self self.present(mpMediapicker, animated: true, completion: nil) }
}Remarks
Section titled “Remarks”Please see the Apple Documentation for more information regarding privacy.
Make sure the Music app is available in your iPhone. It will not work in the simulator.