所以我正在尝试上周发布的 Apple
MusicKit JS
(https://developer.apple.com/documentation/musickitjs)。我在播放从库端点获取的歌曲时遇到问题,据我所知,这是由于 id 格式造成的。
如果我使用他们的文档示例并将队列设置为 ID 为
1025210938
的专辑,歌曲就可以正常播放。然而,当从用户的 iCloud 库(即 /v1/me/library/albums
或在 musickitjs 中 music.api.library.albums()
)获取歌曲时,我得到一个看起来像 l.uUZAkT3
的 id,当我尝试播放它们时,它们不会执行任何操作。
也许更熟悉 Apple Music API 一般工作原理或使用过 iOS 版 MusicKit 的人能够让我知道为什么会出现这种情况,或者如何获取用户库项目的可用 ID。
大部分 MusicKit JS 都是基于 Promises 的。
setQueue
方法是基于 Promise 的方法之一。
setQueue
可以为您获取数据。
为了确保数据可供使用,您需要在已解析的 Promise 中执行任何播放功能。
MusicKit.getInstance().setQueue({ album: 'l.abc123'}).then(function(queue) {
MusicKit.getInstance().play();
});
或
MusicKit.getInstance().api.library.albums().then(function(albums) {
MusicKit.getInstance().setQueue(albums[0]).then(function(queue) {
MusicKit.getInstance().play();
});
});
对于@AlexRabin:我在单击 li 元素时进行了播放,如下所示:
$('div.results').on("click",'li',function(){
var index = $(this).index();
console.log("li clicked "+index);
var klasarodzica = $(this).parent().attr("class");
let playParams = {};
if (klasarodzica == "songs") {
playParams = window.songsarray[index].attributes.playParams;
}
if (klasarodzica == "albums") {
playParams = window.albumsarray[index].attributes.playParams;
}
var kind = playParams.kind;
let id = playParams.id;
let playobj ={[kind]:id};
music.setQueue(playobj).then(function() {
music.play();
});
});
但正如我所说,你必须在事件监听器中编写整个应用程序,否则
music
对象是未知的。
最新v3更新: 放入 setQueue 方法中的 Playparams 对象不起作用。我创建了一个函数将其转换为可以正确读取的对象:
function playParamsv3(playparams) {
return {
[playparams.kind]:playparams.id,
}
}