https://developer.apple.com/documentation/mediaplayer/displaying_a_media_picker_from_your_app
"Let users choose the music they want to play by displaying a media picker interface from within your app."
앱 내부에서 미디어 피커 인터페이스를 표시함으로써 사용자가 재생하길 원하는 음악을 서택할 수 있도록 합니다.
앱애 미디어 피커 뷰 컨트롤러를 추가하는 것은 사용자가 앱을 떠나지 않고도 애플 뮤직 라이브러리로부터 음악 아이템을 선택할 수 있도록 해줍니다. 사용자로부터 하나 혹은 여러 아이템을 수용하기 위해 미디어 피커를 설정할 수 있습니다.
Important
사용자의 음악 라이브러리 접근에 선행해 앱의 Info.plist 파일이NSAppleMusicUsageDescription
키를 포함하고 있어야 합니다. 해당 키를 제공하지 않으면, 미디어 피커를 표시하는 것은 앱을 종료하게 합니다.
사용자 입력에 반응하는 것을 앱에서 활성화하려면 MPMediaPickerControllerDelegate
프로토콜을 채택해야 합니다.
class ViewController: UIViewController, MPMediaPickerControllerDelegate {
...
}
아이패드를 타깃으로 하는 경우 팝오버 프리젠테이션 컨트롤러 역할로써 미디어 피커 뷰 컨트롤러를 설정하시기 바랍니다. 소스 뷰 및 딜리게이트를 설정하고 미디어 피커를 제공해야 합니다. 아래 예시에서 미디어 피커는 사용자가 여러 아이템을 선택할 수 있도록 해주고, 소스 뷰는 버튼 객체입니다.
@IBAction func selectSongs(_ sender: UIButton) {
let controller = MPMediaPickerController(mediaTypes: .music)
controller.allowsPickingMultipleItems = true
controller.popoverPresentationController?.sourceView = sender
controller.delegate = self
present(controller, animated: true)
}
앱 내부로부터 애플 뮤직 라이브러리로 사용자가 접근할 수 있는 버튼을 새용하려면, 아래처럼 해야 합니다.
UIButton
객체를 추가하고, 이름을 Select Songs로 합니다.selectSongs
를 선택합니다. 나타나는 메뉴로부터 선택합니다.선택 음악 버튼은 모달로 나타나는 미디어 피커 뷰 컨트롤러에 대한 소스 뷰입니다. 이 뷰는 사용자가 원하는 음악 재생을 선택할 수 있도록 해주면서 사용자의 애플 뮤직 라이브러리를 표시합니다.
MPMediaPickerControllerDelegate
프로토콜로부터 두 가지 메소드를 구현해야 하며, mediaPicker(_:didPickMediaItems:)
와 mediaPickerDidCancel(_:)
입니다. 이 메소드 내부에 음악 큐를 생성하기 위한 사용자 선택 아이템을 처리할 코드를 추가해야 하며, 뷰 컨트롤러를 해제하기 위한 코드를 추가해야 합니다. 아래 코드는 어떻게 음악 플레이어 큐를 설정하는 방법, 사용자의 선택 재생을 시작하는 방법, 사용자가 미디어 아이템을 선택하지 않은 경우 뷰 컨트롤러를 해제하는 방법을 보여주고 있습니다.
func mediaPicker(_ mediaPicker: MPMediaPickerController,
didPickMediaItems mediaItemCollection: MPMediaItemCollection) {
// Get the system music player.
let musicPlayer = MPMusicPlayerController.systemMusicPlayer
musicPlayer.setQueue(with: mediaItemCollection)
mediaPicker.dismiss(animated: true)
// Begin playback.
musicPlayer.play()
}
func mediaPickerDidCancel(_ mediaPicker: MPMediaPickerController) {
mediaPicker.dismiss(animated: true)
}
미디어 아이템 선택을 위한 그래픽 인터페이스를 제공하는 특화된 뷰 컨트롤러입니다.
https://developer.apple.com/documentation/mediaplayer/mpmediapickercontroller
https://velog.io/@panther222128/MPMediaPickerController
시스템 오디오 출력 볼륨 및 오디오 출력 라우트 선택을 위한 버튼을 설정하기 위해 사용되는 슬라이더 컨트롤입니다.
https://developer.apple.com/documentation/mediaplayer/mpvolumeview
https://velog.io/@panther222128/MPVolumeView
볼륨 알림 윈도우 상태를 설정하기 위한 글로벌 함수입니다.
https://developer.apple.com/documentation/mediaplayer/global_volume_setting_methods
https://velog.io/@panther222128/Global-Volume-Setting-Methods
사용자의 미디어 라이브러리로부터 오디오를 재생하기 위해 앱 내부에 미디어 플레이어를 생성합니다.
https://developer.apple.com/documentation/mediaplayer/playing_audio_using_the_built-in_music_player
https://velog.io/@panther222128/Playing-Audio-Using-the-Built-In-Music-Player