Я действительно изо всех сил пытаюсь что-то выяснить, я просмотрел весь Интернет и не могу найти ответ. Как вы знаете, музыкальные приложения, такие как Spotify и Apple Music, позволяют пользователю переставлять следующую очередь, даже когда пользователь слушает песню. Я не смог понять, как сделать то же самое. Я хочу иметь возможность полностью изменить порядок очереди, включая добавление, удаление и перемещение песен в следующей очереди. Я пробовал разные способы сделать это, например
musicPlayer.setQueue([queue])
но это потребовало бы от меня вызова musicPlayer.prepareToPlay()
afterwords для обновления очереди, которая завершит текущую песню и инициирует новую очередь.
Я также пытался использовать
musicPlayer.perform(queueTransaction: { (currentQueue) in
let oldItems = currentQueue.items
var currentItem: MPMediaItem? = nil
for (i, item) in oldItems.enumerated() {
if i == musicPlayer.indexOfNowPlayingItem {
currentItem = item
continue
}
currentQueue.remove(item)
}
currentQueue.insert(queue, after: currentItem)
}, completionHandler: { (newQueue, error) in
if let error = error {
print("there was an error updating the queue", error)
return
}
print("=== NEW QUEUE ===") //insert does not work
for item in newQueue.items {
print(" -", item.title ?? "[No Title]")
}
})
но, как вы, возможно, знаете из этого вопроса:
MPMusicPlayerControllerMutableQueue вставка песни Apple Music не работает
функция вставки после элемента в очереди, похоже, не работает (и я также пытался установить для элемента значение nil, которое иногда удаляло текущий элемент и устанавливало в очередь ничего). Я также знаю о musicPlayer.prepend([queue])
, который добавит новую очередь после воспроизводимого в данный момент элемента, но мне также пришлось бы удалить предыдущую очередь из памяти, чтобы следующая очередь не имела длины более 300 песен. Я также пытался использовать функцию prepend
внутри транзакции очереди, но иногда песня останавливалась посередине, и музыкальный проигрыватель устанавливал nowPlayingItem
на ноль. Я действительно надеюсь, что кто-то знает ответ на этот вопрос, потому что у меня есть эта проблема уже более 4 дней, и я не могу найти решение, которое работает 100% времени.