Arlodotexe / strix-music

Combine any music sources into a single library. It's your music. Play it your way.
http://www.strixmusic.com
139 stars 4 forks source link

[Feature] Add Apple Music #199

Open ivanicin opened 2 years ago

ivanicin commented 2 years ago

Describe the problem

First congratulations as this is a truly great effort.

I understand that you currently make just some foundations and that it may take a while for that.

Anyway I think that a must have for this is just two things to work: Spotify (listed but not implemented) and Apple Music (not even listed and that's why I am opening this as an issue so that you at least put it in the future plans). All other things are potentially nice added value for many, but if you don't implement those two services which are the biggest streaming services that will be a red flag for many potential users.

Describe the proposed change

Apple Music does have REST API so you can implement it.

I would definitely consider to give at least some small sponsorship if those things get implemented (actually if it works well the only reason that I wouldn't do it is if I found some alternative solution that works for me). And that's surely not enough for your to do that but I think it is likely to affect at least some other people too.

Alternatives

No response

Additional info

No response

Help us help you

No, I'm unable to contribute a solution.

Arlodotexe commented 2 years ago

Hey @ivanicin, congratz on your first feature request.

You'd be right, right now we're focused on tidying up the SDK and making sure it's fit to handle anything we throw at it.

As long as Apple gives developers an open (not to mention, legal) way to stream Apple Music as a third-party, this is something we'd love to make Strix-compatible as soon as we can.

If anyone wants to begin work on this, we have a complete step-by-step guide on how to build a core from scratch.

The SDK is still in alpha and subject to breaking changes, but if work is done in this repository, we'll be happy to automatically migrate any breaking changes for you.

ivanicin commented 2 years ago

A quick search shows that Apple Music for C# already exists: https://github.com/MattPress/AppleMusicAPI.NET

However it is GPL so neither I can use it neither you can directly use it but I am sure it will help you to implement it quicker when you decide to do so.

ivanicin commented 2 years ago

Also this appears to be using REST API: https://github.com/xamarin/ios-samples/tree/main/ios11/MusicKitSample

I might end up using that for start as at the moment for me priority is iOS and some basic Apple Music features, while more would be definitely interesting and that's how I found your project :).

yoshiask commented 2 years ago

A quick search shows that Apple Music for C# already exists: https://github.com/MattPress/AppleMusicAPI.NET

However it is GPL so neither I can use it neither you can directly use it but I am sure it will help you to implement it quicker when you decide to do so.

It's hard to see because it's buried in the src directory for the app, but Strix is also licensed under GPL.

ivanicin commented 2 years ago

A quick search shows that Apple Music for C# already exists: https://github.com/MattPress/AppleMusicAPI.NET However it is GPL so neither I can use it neither you can directly use it but I am sure it will help you to implement it quicker when you decide to do so.

It's hard to see because it's buried in the src directory for the app, but Strix is also licensed under GPL.

If your documentation on nuget is correct then you are using LGPL which is entirely different thing.

ivanicin commented 2 years ago

OK I see that it is GPL now possibly you haven't updated that on nuget. Then I wish you good luck and I do find that this extremely ambitious and worth the respect, but this isn't for any kind of commercial use and hopefully you have figured out your intended target market.

Arlodotexe commented 2 years ago

As per our pledge[1], [2], we'll always be a free and open standard. You'll never be charged to use or build with any part of Strix. We rely on donations from our supporters.

The Strix Music SDK and all things built on it/for it are at minimum LGPLv3 + Additional terms. Reasons for this included

The Strix Music App, our various shells and our (unfinished) WinUI control library are GPLv3. This is because

Switching to Apache 2.0 or MIT isn't off the table in the future, but these are what we've landed on for now. This is also from memory, so it may be incomplete. Let me know if I missed anything, and I'll update it 🙂

Also note that a lot of tooling isn't designed to handle multiple licenses per repo, so it might show incorrectly in some places. These will all get fixed when we eventually split the into separate repos.

ivanicin commented 2 years ago

The Strix Music SDK and all things built on it/for it are at minimum LGPLv3 + Additional terms. Reasons for this included

@yoshiask is right that currently you have stated differently: https://github.com/Arlodotexe/strix-music/blob/master/src/Sdk/StrixMusic.Sdk/LICENSE

But then info on nuget is correct so you should update the file above.

Arlodotexe commented 2 years ago

@ivanicin LGPLv3 is a modification of GPLv3. LGPL requires the full GPL to be present, and full GPL allows for LGPL to be present. LGPL then allows us to define additional terms.

They're all required to be in different files. See LICENSE.LESSER and LICENSE.ADDITONAL in the same folder.

See also How to Use GNU Licenses for Your Own Software

Arlodotexe commented 2 years ago

Also this appears to be using REST API: https://github.com/xamarin/ios-samples/tree/main/ios11/MusicKitSample

That certainly looks promising for iOS devices! Only problem is running on non-Apple devices, we should be using .NET Standard 2.0 unless we have a very good reason to multitarget.

After some basic research, I found these, which should be everything we need:

So this is already looking significantly more promising than most other music services!

We get a REST API that works in NS2.0, and a native/cross-platform way to play audio, which would be handled by the consuming application, not the strix core.