MPMusicPlayerControllerのshuffleModeはsetQueueされていないと変更できない
setQueueメソッドで再生する曲一覧を設定する前にshuffleModeやrepeatModeを変更しようとすると以下のようなエラーがログに出力される。
[SDKPlayback] -[MPMusicPlayerController setShuffleMode:3] completed error: Error Domain=MPCPlayerRequestErrorDomain Code=1 "No commands provided." UserInfo={NSDebugDescription=No commands provided.}
どうもMPMusicPlayerControllerのshuffleModeやrepeatModeといったプロパティはMPMusicPlayerController自身のフラグというよりも、MPMusicPlayerControllerが持つキューに紐付いているっぽい。
まあ、確かにキューの中の曲一覧に対してシャッフルやリピートをすると考えれば、自然ではあるかも。
というわけでviewDidLoad内で事前にsetQueueすることで解決した。
override func viewDidLoad() {
super.viewDidLoad()
--中略--
//再生キューの設定
let songs = targetAlbum!.items
musicPlayer.setQueue(with: MPMediaItemCollection(items: songs))
musicPlayer.nowPlayingItem = songs[0]
}
ついでに画面表示してすぐに再生ボタン押された時に、曲が再生されなかったのも解決されたし万事OK。