MusicKitJS: не удается воспроизвести песни из пользовательской библиотеки

Поэтому я экспериментирую с Apple MusicKit JS (https://developer.apple.com/documentation/musickitjs), который был выпущен на прошлой неделе. У меня проблемы с воспроизведением песен, полученных из конечных точек библиотеки, и, насколько я могу судить, это из-за формата идентификатора.

Если я использую их примеры документов и устанавливаю очередь на альбом с идентификатором, например 1025210938, песни воспроизводятся нормально. Однако при получении песни из пользовательской библиотеки iCloud (например, /v1/me/library/albums или в случае с musickitjs music.api.library.albums()) я получаю идентификатор, который выглядит как l.uUZAkT3, и они ничего не делают, когда я пытаюсь их воспроизвести.

Возможно, кто-то, кто более знаком с тем, как работает API Apple Music в целом, или использовал MusicKit для iOS, сможет сообщить мне, почему это так или как получить полезный идентификатор для элементов библиотеки пользователя.


person rycirese    schedule 10.06.2018    source источник
comment
Песня была откровенной? У меня были проблемы с тем, чтобы MusicKitJS воспроизводил все, что имеет contentRating явное значение.   -  person tomwilson    schedule 11.06.2018
comment
@tomwilson Я могу воспроизводить явные и неявные песни с идентификатором первого типа. Ни играть со вторым типом.   -  person rycirese    schedule 11.06.2018
comment
Хм, мне удалось воспроизвести вещи из моей библиотеки с помощью: music.api.library.albums().then((albums) =› { music.setQueue({album: Albums[0].id}).then(() = › { music.play() }) });   -  person tomwilson    schedule 12.06.2018
comment
Большое спасибо! Мне нужно было then() на setQueue, иначе это не сработало бы. Вызов воспроизведения сразу после setQueue не работал. Странно, что это сработало для песен из каталога, но я думаю, это имеет смысл, поскольку у него уже есть нужный идентификатор, но не уверен.   -  person rycirese    schedule 12.06.2018
comment
Это не сработает, если я попробую: music.api.library.songs().then(songs =› { music.setQueue({song: song[0].id}).then(() =› { music .играть в() }) });   -  person rycirese    schedule 12.06.2018
comment
Хороший! Если бы я только мог решить свою проблему с откровенными песнями :(   -  person tomwilson    schedule 13.06.2018
comment
@tomwilson Это так странно. Я подтвердил, что могу воспроизводить непристойные песни на своей тестовой установке. Можете ли вы setQueue сыграть одну песню и успешно ее сыграть?   -  person rycirese    schedule 13.06.2018
comment
Я могу... если у песни поле contentRating пустое или чистое. Я на самом деле открыл радар с Apple, и они действительно ответили, запросив дополнительную информацию, так что посмотрим, как это пойдет.   -  person tomwilson    schedule 13.06.2018
comment
@tomwilson У меня есть одна песня для воспроизведения, если я использовал массив этой единственной песни и использовал элементы вместо песни при настройке очереди. Попробуй, может быть?   -  person rycirese    schedule 13.06.2018
comment
Да, я могу заставить песни играть, передавая массив, но явные песни все равно не работают. Также я только что обнаружил, что если я ставлю плейлист в очередь - в очередь будут поставлены только неявные песни. У меня было еще немного споров с Apple, они хотели знать, какую учетную запись я использую. Я полагаю, что это может быть связано с чем-то сломанным в моей учетной записи ИЛИ тем фактом, что я подключаюсь к австралийскому региону Apple Music.   -  person tomwilson    schedule 14.06.2018


Ответы (1)


Большая часть MusicKit JS основана на промисах. Метод setQueue является одним из этих методов, основанных на Promise.

В частности, setQueue может получить данные для вас, если вы у вас еще нет под рукой ответа данных API.

Чтобы убедиться, что данные готовы к использованию, вам нужно выполнить любую функцию воспроизведения в разрешенном промисе.

MusicKit.getInstance().setQueue({ album: 'l.abc123'}).then(function(queue) {
    MusicKit.getInstance().play();
});

or

MusicKit.getInstance().api.library.albums().then(function(albums) {
    MusicKit.getInstance().setQueue(albums[0]).then(function(queue) {
        MusicKit.getInstance().play();
    });
});
person Jae Hess    schedule 14.06.2018