iOS10.Apple Music API가 1에 추가되었습니다.

9776 단어 SwiftiOS
iOS9.3부터 Apple Music의 재생성 및 재생 목록 제작하면 되지만 아래처럼 불편한 점이 많은 것 같아요
  • 재생곡의 순서를 지정하기 어려워
  • 로컬 DL 미지원 아트워크 없음MPMediaItemArtwork
  • 재생 중인 곡의 Store ID를 가져올 수 없음(Apple Music 재생을 위한 곡당 ID)
  • 플레이리스트 취득 후 바로 추가곡 불가그 전에 나온 슬라이드.
  • 재생 목록을 삭제하거나 변경할 수 없음
  • 이번 업데이트는 1입니다.해결됨👏 iOS10.1 APIDiffs - MediaPlayer
  • Xcode Version 8.1 beta
  • iOS Version 10.1 beta
  • 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 }
    }
    
    그래서 아직 과제가 많으니 애플뮤직을 활용해 음악 애플리케이션을 꾸준히 알리자.👋😎

    좋은 웹페이지 즐겨찾기