
MusicKit JS - tosh
https://developer.apple.com/documentation/musickitjs
======
kitsunesoba
Props to Apple for releasing this. The way Spotify has handled the deprecation
of libspotify without a proper replacement and removing streaming/playback
from their other SDKs has been extremely disappointing.

~~~
DelightOne
I'm kinda late to the party and I wonder. With streaming/playback, do you mean
player control, playing sound or other missing features?

[https://developer.spotify.com/documentation/web-playback-
sdk...](https://developer.spotify.com/documentation/web-playback-
sdk/reference/#api-spotify-player-toggleplay)

~~~
kitsunesoba
libspotify and the old iOS Spotify SDK used to provide the ability to stream
and play songs in your app, without having to play through a Spotify device or
backgrounded Spotify app. This was particularly great in the case of
libspotify because it was written in C, making it easy to bind to whichever
language you preferred. It was complete enough to write an entire alternative
client with.

It looks like this web playback SDK works by creating a local Spotify Connect
device to play to, which I guess would technically work, but it’d be much
nicer if it just directly played songs as libspotify did and now MusicKit JS
does.

~~~
DelightOne
Hmm that sounds indeed much better! Sadly not C, but cross-platform JavaScript
is still nice to have.

Is it possible to embed this in native apps with an embedded browser? Hmm
sounds complicated, or is there a different way to integrate this (using the
apis the library uses).

~~~
kitsunesoba
Embedding just the web player in native apps would be a pain due to
communication between the native and web layer. If you just did the whole
thing in JS (electron, etc) you’re barely any better off than the official
client in terms of resource consumption, defeating much of the point of
building an alternative client.

There are reverse engineered libraries available (mainly librespot[1]) but
they come with the caveat of violating the EULA and risking the accounts used
with it. AFAIK Spotify hasn’t banned anybody for using it yet, but it’s always
a possibility.

[1] [https://github.com/librespot-org/librespot](https://github.com/librespot-
org/librespot)

~~~
DelightOne
Good that they limit use to Premium users, making them not lose money.

Thanks for the tip!

------
benbristow
Doesn’t seem like there’s an NPM package. Would be better if you could import
it with Webpack and use await rather than callbacks etc.

~~~
mrcarruthers
Well it's using promises, so you can just await those.

But agreed, the documentation looks like it was written in 2014/2015.

~~~
zodiakzz
The "user's cloudAlbums" example is awful. Might as well use callbacks if you
aren't gonna chain promises to avoid callback hell.

~~~
tantalor
Where is that? Link?

~~~
zodiakzz
Under the "JavaScript Methods" heading

[https://developer.apple.com/documentation/musickitjs#3004817](https://developer.apple.com/documentation/musickitjs#3004817)

    
    
        music.authorize().then(function() {
            music.api.library.albums.then(function(cloudAlbums) {
                // user's cloudAlbums
            });
        });
    
        Should be:
    
        music.authorize().then(function() {
            return music.api.library.albums;
        }).then(function (cloudAlbums) {
            // user's cloudAlbums
        });

------
jamsinclair
A 99 USD commercial web API. This one, and their other endpoints, require
being part of paid Apple Developer program. I understand, but it's frustrating
if you're wanting to play around or use in free open source.

~~~
saagarjha
Do any competing platforms have a similar API with a less imposing barrier?

~~~
mixedCase
Spotify and Deezer, OTOH.

------
PedroBatista
I don't get it.

What's the use for this? ( in a mainstream product way, not in some cool
personal private project way)

~~~
duskwuff
One real-world use case is on Genius.com, where it can be used to play songs
(or previews, for users without Apple Music) while reading an analysis of
their lyrics.

------
parhamn
I've always wondered why Netflix and all don't have clip widgets that you can
link/embed on other sites. It is essentially free mass embedded paywalls.

~~~
GuiA
I can see the short term benefit, but inevitably some big content distributor
would want to opt out on condition of providing their content to Netflix due
to some disadvantage they perceive with it. From there more and more content
providers would want to opt out (“Disney does it, we should do it too because
it makes us more like Disney”) and then the feature becomes useless and people
who use it get mad.

~~~
echelon
They can do it once their library is 100% Netflix originals.

~~~
smnrchrds
Tangential questions: has anyone done an analysis of share of originals in
Netflix library as a function of time?

------
staticvar
You can play your iTunes library online now?

~~~
dewey
Your Apple Music library, this SDK already exists for years so it’s not
exactly new.

~~~
crooked-v
If you have "Sync Library" turned on (the feature's gone through several
renames by now), it will also let you play local mp3s that have been uploaded.

------
gyrgtyn
can a web app play music and run js with the screen off?

------
dawnerd
About time. Rdio has such an amazing embed api (I built the JS api for it at
the time and a site that was really heavily used). Total shame when Apple
bought and shut them down. Maybe I can bring that old site out from the dead.
Hmm

~~~
mackey
Apple did not buy Rdio, they basically went out of business and sold what they
left to Pandora.

~~~
dawnerd
Hmm it's been a while. I don't know why Apple stuck in my brain. Maybe it was
another service similar...

But still, I miss rdio.

~~~
scarface74
Are you thinking about Lala?

[https://www.cultofmac.com/211126/the-inside-story-of-how-
app...](https://www.cultofmac.com/211126/the-inside-story-of-how-apple-bought-
music-startup-lala-and-then-bought-it-again/)

~~~
dawnerd
Oh very likely. I don’t really remember the name but they interface looks so
familiar.

