iOS10.Apple Music API가 1에 추가되었습니다.
MPMediaItemArtwork
MPMusicPlayerController.setQueueWith(_: MPMusicPlayerQueueDescriptor)
지금까지 사용한 방법은 다음과 같다. 애플 뮤직을 전달하는 스토어 ID의 배열만 간단히 MPMusicPlayerController
player.setQueueWithStoreIDs(storeIds)
지금까지의 방법에 문제가 있었다면 최초부터 여러 곡을 재생하는 것은 문제없지만, 두 번째나 세 번째 등 중간에 재생을 시작하면 스스로 설치할 수밖에 없었던 것 같아요.
참고로 내 응용 프로그램은 이렇게 잔혹한 프로그램을 실시했다😌(슬라이딩 가능)// collectionView(_:didSelectItemAt:)
let selectedStoreIds = trackIds.enumerated().filter { $0.offset >= indexPath.row }.map { $0.element }
+ trackIds.enumerated().filter { $0.offset < indexPath.row }.map { $0.element }
player.repeatMode = .all
player.setQueueWithStoreIDs(selectedStoreIds)
뭘 하고 있냐면 헤드업한 곡부터 시작해서 앞곡을 뒤로 연결한 다음 재생모드를 반복해서 선택한 곡의 앞곡도 되돌리기 버튼으로 들을 수 있을 것 같은데...
하지만 이번 방법MPMusicPlayerQueueDescriptor
은 재생곡을 관리하는 반을 맡길 수 있습니다.👏
위 레벨은 직접 사용하지 않고 하위 클래스MPMusicPlayerMediaItemQueueDescriptor
(로컬용) 또는 MPMusicPlayerStoreQueueDescriptor
(애플 뮤직용) 사용
MPMusicPlayerStoreQueueDescriptor
사용 방법은 간단합니다. Store ID의 순서대로 초기화하고 재생할 Store ID를 지정하면 됩니다.// collectionView(_:didSelectItemAt:)
let descriptor = MPMusicPlayerStoreQueueDescriptor(storeIDs: trackIds)
descriptor.startItemID = trackIds[indexPath.row]
player.setQueueWith(descriptor)
다른 재생과 종료 위치도 지정할 수 있을 것 같은데(언제 사용할지는 모르겠지만...)descriptor.setStartTime(10.0, forItemWithStoreID: storeId)
descriptor.setEndTime(30.0, forItemWithStoreID: storeId)
MPMusicPlayerController.prepareToPlay(completionHandler: (Error?) -> Swift.Void)
다음은 재생이 가능하기 전에 곡 데이터를 준비(다운로드)하는 방법입니다.
지금까지prepareToPlay()
원래는 (대략) 로컬 곡의 재생을 준비하기 위해 준비한 방법이었는데, 거기에 가서 시간이 걸리는 처리가 아니기 때문에 그렇게 사용하면 동기화 처리가 됩니다.
그러나 애플뮤직은 온라인으로 재생되기 때문에 DL에 오랜 시간이 걸렸고, 그 전에 예술작품nowPlayingItem
을 꺼내면 안 나오고, 왜 안 나오는지 불편했는데 이번부터는 비동기와 오류를 처리할 수 있게 됐다.👏playerViewController.player.prepareToPlay(completionHandler: { error in
if error == nil {
player.play()
} else {
print(error?.localizedDescription)
}
})
MPError
미디어 플레이어 오류가 정의된 것 같아요.struct MPError {
init(_nsError _nsError: NSError)
static var _nsErrorDomain: String { get }
enum Code : Int {
typealias _ErrorType = MPError
case unknown
case permissionDenied
case cloudServiceCapabilityMissing
case networkConnectionFailed
case notFound
case notSupported
}
static var unknown: MPError.Code { get }
static var permissionDenied: MPError.Code { get }
static var cloudServiceCapabilityMissing: MPError.Code { get }
static var networkConnectionFailed: MPError.Code { get }
static var notFound: MPError.Code { get }
static var notSupported: MPError.Code { get }
}
그래서 아직 과제가 많으니 애플뮤직을 활용해 음악 애플리케이션을 꾸준히 알리자.👋😎
Reference
이 문제에 관하여(iOS10.Apple Music API가 1에 추가되었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/hanawat/items/c900cefcefdadb9b7283
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
player.setQueueWithStoreIDs(storeIds)
// collectionView(_:didSelectItemAt:)
let selectedStoreIds = trackIds.enumerated().filter { $0.offset >= indexPath.row }.map { $0.element }
+ trackIds.enumerated().filter { $0.offset < indexPath.row }.map { $0.element }
player.repeatMode = .all
player.setQueueWithStoreIDs(selectedStoreIds)
// collectionView(_:didSelectItemAt:)
let descriptor = MPMusicPlayerStoreQueueDescriptor(storeIDs: trackIds)
descriptor.startItemID = trackIds[indexPath.row]
player.setQueueWith(descriptor)
descriptor.setStartTime(10.0, forItemWithStoreID: storeId)
descriptor.setEndTime(30.0, forItemWithStoreID: storeId)
다음은 재생이 가능하기 전에 곡 데이터를 준비(다운로드)하는 방법입니다.
지금까지
prepareToPlay()
원래는 (대략) 로컬 곡의 재생을 준비하기 위해 준비한 방법이었는데, 거기에 가서 시간이 걸리는 처리가 아니기 때문에 그렇게 사용하면 동기화 처리가 됩니다.그러나 애플뮤직은 온라인으로 재생되기 때문에 DL에 오랜 시간이 걸렸고, 그 전에 예술작품
nowPlayingItem
을 꺼내면 안 나오고, 왜 안 나오는지 불편했는데 이번부터는 비동기와 오류를 처리할 수 있게 됐다.👏playerViewController.player.prepareToPlay(completionHandler: { error in
if error == nil {
player.play()
} else {
print(error?.localizedDescription)
}
})
MPError
미디어 플레이어 오류가 정의된 것 같아요.
struct MPError {
init(_nsError _nsError: NSError)
static var _nsErrorDomain: String { get }
enum Code : Int {
typealias _ErrorType = MPError
case unknown
case permissionDenied
case cloudServiceCapabilityMissing
case networkConnectionFailed
case notFound
case notSupported
}
static var unknown: MPError.Code { get }
static var permissionDenied: MPError.Code { get }
static var cloudServiceCapabilityMissing: MPError.Code { get }
static var networkConnectionFailed: MPError.Code { get }
static var notFound: MPError.Code { get }
static var notSupported: MPError.Code { get }
}
그래서 아직 과제가 많으니 애플뮤직을 활용해 음악 애플리케이션을 꾸준히 알리자.👋😎
Reference
이 문제에 관하여(iOS10.Apple Music API가 1에 추가되었습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hanawat/items/c900cefcefdadb9b7283텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)