es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede convertir el valor del tipo ‘PlayParameters?’ al tipo de argumento esperado ‘[MPMusicPlayerPlayParameters]’.

Estoy tratando de crear un reproductor de música con Swift y MusicKit, pero me aparece este error al intentar cargar la cola con el álbum seleccionado de MusicKit. No entiendo por qué los playparameters para el álbum y MPMusicPlayerPlayParametersQueueDescriptor son diferentes.

let player = MPMusicPlayerController.applicationMusicPlayer
let queue  = MPMusicPlayerPlayParametersQueueDescriptor(playParametersQueue: heavyRotation[album].playParameters)
player.prepareToPlay()
player.play()

Error en la línea let queue:

No se puede convertir el valor de tipo ‘PlayParameters?’ al tipo de argumento esperado ‘[MPMusicPlayerPlayParameters]’

NUEVA EDICIÓN

var requestURLComponents = URLComponents()
requestURLComponents.scheme = "https"
requestURLComponents.host = "api.music.apple.com"
requestURLComponents.path = "/v1/me/history/heavy-rotation"

requestURLComponents.queryItems = [
    URLQueryItem(name: "limit", value: "5")
]

guard let url = requestURLComponents.url else { return }

let request = MusicDataRequest(urlRequest: URLRequest(url: url))
do {
    let response = try await request.response()
    let decodedResponse = try JSONDecoder().decode(MusicItemCollection<album>.self, from: response.data)
    heavyRotation = decodedResponse
//    print(response.debugDescription)
} catch {
    print("error")
    print(error)
    print(error.localizedDescription)
}

swift
Button(action: {
Task {
guard let album = heavyRotation[album] as Album? else { return }
print(album)
let player = ApplicationMusicPlayer.shared
player.queue = [album]
try await player.prepareToPlay()
try await player.play()
}
}) {
Image(systemName: "play.fill")
.frame(width: 50, height: 50, alignment: .center)
.fontSize(30)
.foregroundColor(.white)
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error se produce porque heavyRotation[album].playParameters devuelve un solo objeto PlayParameters en lugar de una matriz de MPMusicPlayerPlayParameters.

    Para solucionarlo, puedes envolver el objeto PlayParameters individual en una matriz de la siguiente manera:

    let queue = MPMusicPlayerPlayParametersQueueDescriptor(playParametersQueue: [heavyRotation[album].playParameters])
    

    En cuanto a la diferencia entre los playParameters del álbum y MPMusicPlayerPlayParametersQueueDescriptor, el primero es específico del framework MusicKit y se utiliza para identificar y reproducir una canción o álbum específico. El último es un objeto de conveniencia proporcionado por el framework MPMusicPlayerController que te permite encolar varios objetos MPMusicPlayerPlayParameters (por ejemplo, múltiples canciones o álbumes) para reproducirlos en secuencia.

Comments are closed.