Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I've been a last.fm user for over 10 years now. My routine for listening and discovering new music has been to ask last.fm to play similar artists to some artist I already loved and liked or just let last.fm do it's job and play its suggestions for me based on my listening history.

This worked nicely for me. But as I've drifted more and more to a mousless world thanks to Emacs and StumpWM, I became more and more frustrated every time I've had to change songs, add a song to my favorites or just browse an artist page. This back and forth between the browser and Emacs got tiring after a while. Besides, a few years back, last.fm dumped its old system where it used it's own database to play songs and just played the songs directly from youtube. This got me thinking that maybe I can use last.fm's huge dataset to create my own playlists based on similarities between artists and even browse an artist page as I would do in a browser, only inside Emacs. And since youtube is available to everybody, and mpv can play youtube links and can even do searches, I've started playing with this idea.

Another pain point that I've had is lyrics. Sure, if I can get the above thing working, Emacs will know what song I'm currently playing, and fetching the lyrics and displaying them in a new buffer would be a no brainer. But, lots of times I'm having trouble finding the song FROM the lyrics and not the other way around. Especially if I'm not remembering so many words from the song. So why not keeping a local database with all the lyrics I'm interested in and do a local search, from Emacs, and not from Google. Since counsel and helm are such nice tools, I can use those to browse through the results, hit enter, and play my song. No leaving the Emacsland required.

I've tried to implement this first in Common Lisp and call it directly from the window manager (StumpWM). It worked, but it was somehow hard to use. I then tried to implement it directly in Emacs. The first package was lastfm.el with which I can have access to the whole last.fm database. All artist's songs, similarities, user top tracks, everything. With authentication, the user can also add loved tracks, scrobble tracks and all that. In short, everything you can do from the last.fm page, you can now do from Emacs. This was a nice first step. The second step was to implement the lyrics functionality. This is another package, versuri.el.

And the last step is this package, vuiet.el. It brings together lastfm.el and versuri.el with mpv.el for playing songs and some org-mode for displaying and browsing artists and genres. I've gone wild with the playlists and created more options for them than what is available by default on last.fm. I can pick a random artist from my loved songs list, for example, and then play a random song from a random artist similar to it, ad infinitum. Or, when browsing an artist page, I can do a search first and let counsel guide my way as to the exact name of the artist. Maybe I'm lazy, maybe I forget. All in all, it has been a great tool to listen and discover new music, for the lazy people.

I got mostly positive first impressions until now, and I'm sure there are more exciting features to explore with this tool which I cannot think of right now. Improvements and features are waiting to happen, in short. Some bugs are also lurking in there, for sure. But I'm using it for approximately two months already and I really like it. I'm curious how others would use it, what features do they miss, what bugs do they find, etc.

Thanks for trying it out and happy listening!



This should be a blog post, my friend.

And incidentally, things like this are one of the (many) reasons I love Emacs.


Agree, would love to see this as a blog post!


You mean, in an expanded format, with more details and more of the backstory of how this tool came to be? If that's the case, it sounds interesting, I might do it. Thanks for the suggestion!




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

Search: