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

问题描述 投票:0回答:2

所以我正在尝试上周发布的 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。

javascript apple-music apple-musickit
2个回答
0
投票

大部分 MusicKit JS 都是基于 Promises 的。

setQueue
方法是基于 Promise 的方法之一。

特别是,如果您还没有方便的 API 数据响应,

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();
    });
});

0
投票

对于@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,
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.