
Show HN: LMS – Lightweight Music server written in C++ - itm
https://github.com/epoupon/lms
======
git-pull
Amazing. Requests:

\- Would prefer a permissive software license. Not much benefit to GPL. I've
seen nice projects I'd have contributed / shared with where collaborative
opportunity didn't happen. Too many obligations, sweeps in too many
situations, and a lot of gray hairs explaining it being a net negative. I try
to encourage a philosophy of YAGNI when doing open source licenses, sheerly
for the sake of backward compatibility with licenses.

Don't you want your code / project to be inter-operable as possible, even with
_other_ licenses? Do you want to make development contributions streamlined as
possible (even from the parade of horribles, e.g. the corporation profiting
from your work with no intention of reciprocal contribution? Why impede their
success? It's not your loss), or do you want potential contributor's interest
to derail into a cost-benefit analysis of running afoul of GPL terms until
they find an alternative?

\- ncurses / ncmpcpp-like frontend. vim keybindings

\- directory-based navigation. easier to navigate around, supports file
structures where id3 tags aren't in place yet

Questions:

\- Any info on the recommendation engine? How does it work?

\- Does musicbrainzId support include id3 tagging?

Congratulations again on the project!

~~~
itm
Thanks for you feedback!

About the software license, the web framework used (wt) is using the GPL
license. So unfortunately I have to stick with it since I include/link with
it. It is likely not a problem for SaaS though.

\- ncmpcpp-like frontend: what do you have in mind actually? I am not sure
since the goal here is to play the music on the device from which you access
to the server.

\- directory-based navigation: well I think that is a matter of taste.
Personally I find the navigation directory based very restrictive. It does not
scale well on a large collection and after all, it is just a fixed view of
what you can offer using tag based browsing. Most people use a
genre/artist/album layout, but using tags you could easily achieve the same,
and go even further and do whatever you want: genre/decade/artist/album,
mood/album, genre/mood/artist, etc. Honestly, I would rather encourage people
to properly tag their files rather than spending time on implementing a clunky
directory based navigation.

\- Any info on the recommendation engine? How does it work? Low-level Data is
fetched from AcousticBrainz. See an exemple here for a random song:
[https://acousticbrainz.org/e73f3d92-4e9f-4db4-943a-41978d9db...](https://acousticbrainz.org/e73f3d92-4e9f-4db4-943a-41978d9dbd72/low-
level/view?n=0) Some features are extracted for each track (the exact list is
here:
[https://github.com/epoupon/lms/blob/develop/src/database/Sim...](https://github.com/epoupon/lms/blob/develop/src/database/SimilaritySettings.cpp#L37))
and all these features are used together to classify the tracks. You can find
details here: [https://en.wikipedia.org/wiki/Self-
organizing_map](https://en.wikipedia.org/wiki/Self-organizing_map) . Once it
is done, you get a map with all your tracks in it, and using the underlying
SOM you can determine the neighbourhood of a given track. The recommendation
engine uses this map. For example, if you want albums that are similar to a
particular one, you look for the tracks of the album in the map and you
retreive the albums of the tracks that are close to them.

\- Does musicbrainzId support include id3 tagging? id3 is a tag format used
mainly in MP3. LMS reads all the tags using taglib. Therefore it can extract
the tags (id3 or whatever) it needs internally (musicbrainz ids, artist,
albumartist, date, etc.) as well as custom tags the administrator want too (
albummood, mood, albumgenre, grouping, etc.) Hope that helps!

~~~
itm
My bad I think I misunderstood your question about musicbrainzId. It is used
internally : \- as a key for albums and artists to properly handle duplicated
names. \- to retreive audio data analysis from AcousticBrainz

If you have musicbrainz identifiers in your file, it is assumed the other tags
(artist, album, etc.) are correct and are directly used.

~~~
git-pull
Thanks for this and the additional information above. Both answers were
informative.

This is the first time I heard of AcousticBrainz and its sig
([https://acousticbrainz.org/e73f3d92-4e9f-4db4-943a-41978d9db...](https://acousticbrainz.org/e73f3d92-4e9f-4db4-943a-41978d9dbd72/low-
level/view?n=0)). Nice! From the ones that brought us MusicBrainz right?

> what do you have in mind actually? I am not sure since the goal here is to
> play the music on the device from which you access to the server.

ncmpcpp _is_ a music client, but for the mpd music server. Not sure if LMS <->
MPD do the same things. compare ncmpcpp to mpc, but w/ ncurses + c++. It has
directory-based navigation which makes it easy to move through music.

Look forward to watching this project grow!

~~~
itm
Yes, actually MusicBrainz and AcousticBrainz are part of MetaBrainz (see
[https://metabrainz.org/projects](https://metabrainz.org/projects)) There is
even a ListenBrainz project :)

------
itm
Hello,

Please feel free to provide any feedback on this project.

I tried my best to make a README as complete as possible, but any
remark/suggestion is welcome (English is not my native language).

~~~
severine
Hey, it looks great! The Readme is really thorough, thanks.

What's been your rationale for building it, what does it better than the rest?

~~~
itm
Hey, thanks for your feedback!

That's a good question, I have to admit there are a lot of similar softwares
available these days.

I noticed that I tend to always listen to the same music, and sadly I even
forget the music I have. That's why I tried to put as many links as I can in
the interface to easily jump from a
title/release/artist/albumartist/genre/whatevercustomtag to another one. In
particular, it should handle (custom) tags with multiple values, and it can
filter over some of them on all views.

I also tried to make a recommendation engine that makes use of a SOM
([https://en.wikipedia.org/wiki/Self-
organizing_map](https://en.wikipedia.org/wiki/Self-organizing_map)). For that
it fetches data from AcousticBrainz
([https://acousticbrainz.org/](https://acousticbrainz.org/)) and makes
clusters of songs that have similar audio characteristics. I have to say it's
not perfect (it's quite good to cluster metal tracks though), but I would like
to go deeper into this subject.

Apart from that, it is really lightweight and that was not really the case of
the avalaible softwares when I started it.

