I wrestled with this issue for a while and found the issue. For the initial script declaration:
<script
src="https://js-cdn.music.apple.com/musickit/v3/musickit.js"
/>
I removed the async property. The result was synchronous loading of music kit. If you remove async, setQueue() will always return void and play() won't play or provide any error message as to why it isn't working.
I don't think this is intended behaviour but on the slim chance that it is, the documentation could really benefit from specifying that the removal of the async property may apply for the return of search queries but not for playback.
The reason for I removed async in the first place was because the initial load was failing more often than not, with:
Uncaught TypeError: Cannot read properties of undefined (reading 'node')
at musickit.js:13:10194
at musickit.js:13:140
at musickit.js:13:209
It's successful < 25% of the time.
Removing async resolved this issue, which may be helpful to others with different app requirements. I'll create a new post regarding this async issue.
Topic:
Media Technologies
SubTopic:
Audio
Tags: