从Media Player获取无序曲目



我想从Media Player获取队列。我相信我无法读取队列(这是正确的吗?(,并且只有在设置队列时才能获得队列,比如当我选择某个播放列表时。然而,我很难排队。

let musicPlayerController = MPMusicPlayerController.systemMusicPlayer
let myMediaQuery = MPMediaQuery.songs()
let predicateFilter = MPMediaPropertyPredicate(value: chosenPlaylist, forProperty: MPMediaPlaylistPropertyName)
myMediaQuery.filterPredicates = NSSet(object: predicateFilter) as? Set<MPMediaPredicate>
musicPlayerController.setQueue(with: myMediaQuery)
musicPlayerController.repeatMode = .all
musicPlayerController.shuffleMode = .songs
musicPlayerController.play()
for track in myMediaQuery.items! {
print(track.value(forProperty: MPMediaItemPropertyTitle)!)
} // here I don't get the shuffled order that is going to play, just get the original order of the playlist

我需要洗牌,因为我希望能够展示下一场比赛。

我过去曾遇到过.shuffleMode的问题。改为在集合上调用shuffled()

// shuffle
func shufflePlaylist() {
let query = MPMediaQuery.songs()
let predicate = MPMediaPropertyPredicate(value: "Art Conspiracy",
forProperty: MPMediaPlaylistPropertyName,
comparisonType: .equalTo)
query.addFilterPredicate(predicate)
guard let items = query.items else { return }
let collection = MPMediaItemCollection(items: items.shuffled())
player.setQueue(with: collection)
player.prepareToPlay()
player.play()
}

最新更新