Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: LMS – Lightweight Music server written in C++ (github.com)
7 points by itm 13 days ago | hide | past | web | favorite | 8 comments

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


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

- Does musicbrainzId support include id3 tagging?

Congratulations again on the project!

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... Some features are extracted for each track (the exact list is here: https://github.com/epoupon/lms/blob/develop/src/database/Sim...) and all these features are used together to classify the tracks. You can find details here: 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!

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.

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...). 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!

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


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).

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?

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). For that it fetches data from AcousticBrainz (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.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact