💾 Archived View for rulmer.xyz › songmem.gmi captured on 2023-07-22 at 16:17:07. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
ooo oOOO oOOOo OooOO O OO OOO OO O OO OOO O O O o OOOo OooooO OoooO OoO O oOO O O OoooOOO O OoOO oOOo Oo ooo oOOOOo OooO O oOOOOOOOo oOooOOOo OooOOOOOOOOOoo oOOOOOO OOO o OOO OO o
This article contains two parts: I'll start by sharing some of my favourite songs, diving into a few genres I enjoy. After that I will show how I keep track of what I hear and how I generated the recommendations from the first part.
These are the ten songs I've listened to the most over the past three years:
$ songmem --favourite | head Tempers - What Isn't There Papertwin - Alkaline Lovers Revenge - Dreams Tempers - Eyes Wide Wider Daniel Deluxe - Territory Beach House - Space Song Waveshaper - Radio Signal Calamine - Trampoline Oliver Tree - Enemy Gatekeeper - Chains
It's a bustle of tracks I enjoy in different moods and through different phases. I'll try to group them and give you an insight into what I enjoy about them.
The two Tempers songs are part of my dark "gothy" favourites. It's a genre that features themes of rejection, death, fear, loss and loneliness. At a first glance this might seem depressing and you could think people listen to music like this, just to wallow in sadness. This is not how I view it.
I feel like the artists of this sphere are making an effort to embrace dark emotions instead of pushing them aside. It's easy to feel alone, when facing problems in an environment where people mostly share their joy, but these artists dare to share their unpleasant feelings and I find that comforting. However, I'm not interested in becoming comfortable with despair; instead I view this dark music as a way to confront emotions and gain clarity. When you listen to a few tracks of this genre, you'll find that many are quite energetic and maybe you can even see how they might feel uplifting. Here are a few songs of this kind:
$ songmem --suggestions "Tempers - Eyes Wide Wider" | head -n 13 Tempers - What Isn't There Sixth June - Never Leave Me Tempers - Undoing Tempers - Hell Hotline Prudence - Your Funeral Crystal Castles - Vanished Vore Aurora - Envenom Tempers - Strange Harvest Tropic of Cancer - More Alone ILLUSTRATION SONORE - Flying Lights Cabaret Nocturne - Blind Trust Pleasure Symbols - Ultraviolence Xiu - Why We're Gone
Lingering a little longer in the shadows, let me introduce you to a little more "electric", more proactive section of my music library. In my favourites you saw 'Daniel Deluxe - Territory' and 'Gatekeeper - Chains'. These tracks feel dystopian to me and in my mind they are connected to cyberpunk themes. I listen to these when I am feeling energetic, but have become bored of the "light" music in my library. Here's a handful of tracks like that:
$ songmem --suggestions "Daniel Deluxe - Territory" | head -n13 Daniel Deluxe - Darkness Daniel Deluxe - Almaz Gatekeeper - Chains Daniel Deluxe - Sojourn Power Glove - Motorcycle Cop Daniel Deluxe - Star Eater Maniac Lover - The Victim Machine Murkula - Goredello Power Glove - Crypt Power Glove - Nightmare Power Glove - Power Core (Extended Version) ALEX and Tokyo Rose - Antagonist Vector Seven - Trauma Team
Dark music is not all I listen to. Let me end my suggestions with something more light: tracks like 'Papertwin - Alkaline', 'Beach House - Space Song' or 'Waveshaper - Radio Signal' I would describe as dreamy and laid-back music, well suited for a rainy afternoon in an armchair with some hot tea. Here's some more of that:
$ songmem --suggestions "Papertwin - Alkaline" | head -n5 Waveshaper - Radio Signal Molly Nilsson - Mountain Time Lovers Revenge - Dreams Chromatics - Running Up That Hill De Lorra/Augustus Wright - Endless
$ songmem --suggestions "Molly Nilsson - Mountain Time" | head Waveshaper - Radio Signal Papertwin - Alkaline Beach House - Space Song Droid Bishop - Nightland Lovers Revenge - Dreams Trevor Something - Fade Away MALO - March of Progress Kavinsky - Nightcall Lifelike - So Electric quadle - Deep Purple
You will have noticed the word songmem above. It is a command line program that I wrote to keep track of what songs I listen to. After a while it will learn which songs I find similar and becomes able to make suggestions. With this, I am able to create "unique playlists" on the fly without having to think much about it. This has become my main way of playing music and I like how it enables me to perfectly mold my music stream to my current mood.
You can get songmem by cloning git@github.com:codesoap/songmem.git and following the instructions in the README.
The first and most important step is to register the songs you heard with songmem. This is done with e.g. `songmem --register 'Low Hum - Comatose'`. Of course, this would be very tedious to do manually every time. It needs to be automated. I can show you how to do this with the mpd music player; starting this script and letting it run in the background would basically work:
while song="$(mpc -f '%artist% - %title%' current --wait)" do songmem --register "$song" done
The script I'm using is a little more convoluted though, because I want to register the song only if it has been playing for at least 20s and I also had to workaround some instability:
$ cat ~/bin/songmem-mpd #!/usr/bin/env sh # Extra loop, because mpc failed me once with # "MPD error: Socket connection aborted". while true do while song="$(mpc -f '%artist% - %title%' current --wait)" do # Kill background processes from previous loops: pkill -P "$" # Register a hearing of the started song, if it is still playing # after 20s: sleep 20 \ && mpc status | grep -q 'playing' \ && songmem --register "$song" & done done
After you've tracked your listening patterns for a while, you can ask songmem to analyze the collected data. You can call `songmem | head` to see which songs you heard last, `songmem --favourite | head` to see the songs you heard most or `songmem --frecent | head` to get a list of songs you recently heard a lot.
Most interesting, however, is probably `songmem --suggestions '<your-songname-here>' | head`. It will check which songs you often heard before or after the given song.
Typing these commands is impractical for everyday use, so I encourage you to write your own little script(s) around songmem. I've got one I call "sng" (it's quick to type); it lists suggestions for the last heard song, let's me select one with fzf and queues it in mpd automatically. Here is some inspiration to get you going:
# This script assumes that all songs are stored like "Artist - Song title". song=$(songmem --suggestions "$(songmem | head -n1)" | fzf) artist=$(printf '%s' "$song" | awk -F ' - ' '{print $1}') title=$(printf '%s' "$song" | awk '{i=index($0, " - "); print substr($0, i+3)}') mpc add "$(mpc search artist "$artist" title "$title" | head -n1)"
This works well for me in most cases, but there are some scenarios, where songmem becomes less useful:
- When it's impossible to integrate songmem with your music player.
- If you mostly listen to full albums, songmem will mostly suggest other songs from the album you just heard.
- If you spell the same song differently when registering it with songmem, it will not recognize the song.
I hope you found something interesting in here. There is a lot more I could write about the technical details or my scripts and tools around songmem, but this article has become quite lengthy already. Don't hesitate to contact me, if you have any questions or comments.