
Show HN: Vuiet – a music player and explorer for Emacs - molteanu
https://github.com/mihaiolteanu/vuiet
======
molteanu
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!

~~~
disgruntledphd2
This should be a blog post, my friend.

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

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

~~~
molteanu
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!

------
bloopernova
This is really nice!

In my nonexistent free time, I'm very slowly learning Lisp. (well, mostly
emacs lisp) I love seeing these sorts of Emacs projects, because I can read
through the source and figure out a little bit more about this strange and
wonderful language.

This brings to mind one of the reasons I love Emacs so much now. It's the
editor with the smallest barrier to learning and extending it, since
everything is Lisp, you configure it with Lisp, you customize it with Lisp,
and packages are written in Lisp.

Anyway, a long-winded roundabout way of saying: Thank you for sharing this!

~~~
disgruntledphd2
C-h f, C-h k and helpful are your friends for that sort of thing (spelunking
through the Emacs source).

------
ashton314
Anybody: “what’s your primary OS?”

Me: “Emacs.” /s

Wanna-be hard-core Emacs user here. Tried this out today, worked beautifully.
A few glitches (I’ll send a bug report if I can reproduce) but splendid by and
large.

There is something to be said for using Emacs an application platform. It is
the ultimate IDE, and a self-contained marvel of hackage that somehow works.

Thanks for posting this!

------
beachwood23
This is a really really cool project. Awesome that it exists.

I wish it was a general CLI, instead of relying on Emacs. Or, I wish I felt
comfortable enough in Emacs to give this a shot.

~~~
molteanu
I think you can turn it into that if you use Emacs as Daemon [1]. Then you
would be able to call vuiet from the command line as this, for example

> emacsclient -e '(vuiet-play-artist "queen")'

You can then turn it into a full CLI tool for interacting with vuiet with some
nice wrappers around the above command, and similar ones. I would be glad if
someone gives it a try. I, for one, feel very comfortable inside Emacs.

Thanks for your nice words! I really appreciate it.

[1]
[https://www.emacswiki.org/emacs/EmacsAsDaemon](https://www.emacswiki.org/emacs/EmacsAsDaemon)

------
trey-jones
I've been using _pianobar_ which is a Pandora CLI and has an emacs package.
It's pretty neat and I have Pandora, but this really looks cool and maybe
better. I'd like to give it a shot.

[https://github.com/PromyLOPh/pianobar](https://github.com/PromyLOPh/pianobar)

[https://github.com/agrif/pianobar.el](https://github.com/agrif/pianobar.el)

~~~
molteanu
Let me know if you're thinking of some feature that you're missing. Feel free
to open an issue, I'll gladly look over it.

------
nanna
Really want to give this a go but having some troubles figuring how to start
it! I've installed it via melpa and then i'm trying to M-x vui[tab] but
nothing's coming up?

I know it's often the most boring bit but an installation and quickstart guide
on the readme would be super appreciated!

Thanks for all the work

~~~
molteanu
You must of course (require 'vuiet), as any package, before using it. Similar
with use-package. Or am I missing something?!

~~~
disgruntledphd2
I'm not sure how it works, but definitely some packages manage to autoload.

------
alexdumitru
I was pretty sure you're Romanian based on the app's name :)

~~~
Koshkin
Very fitting for much of today's music indeed.

------
kleer001
saw this on reddit, still excited about it, gunna see about actually taking a
minute and installing it

