MusicKitJS:无法播放用户库中的歌曲

MusicKitJS: Can't play songs from user's library

所以我正在试用上周发布的 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 的一般工作方式或使用 MusicKit for iOS 的人可以让我知道这是为什么或如何获得可用的 id用户的图书馆项目。

大部分 MusicKit JS 都是基于 Promises 的。 setQueue 方法是这些基于 Promise 的方法之一。

特别是 setQueue 可以为您获取数据,如果您还没有方便的 API 数据响应。

为了确保数据可以使用,您可能希望在已解析的 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 对象是未知的。