CMUS Bash

I initially turned to CMUS because every other music player struggled with my external hard drive. However, I stayed for its fast, no-nonsense command-line interface. One feature I found myself missing, a nostalgic memory from my Rockbox days, was the ability to shuffle music by entire albums rather than individual tracks. Today, I’m excited to share a Bash script that fills this gap. It groups your songs into albums, shuffles the albums, and feeds the result back into CMUS.

The Problem: Cmus and Playlists

Cmus is a feature-rich music player that runs in the terminal, offering a fast and resource-efficient way to play your favorite tunes. While it does have a shuffle feature, it shuffles individual songs rather than complete albums. For those of us who appreciate the cohesiveness of listening to an entire album, this can be a bit of a letdown.

The Solution: A Bash Script to Shuffle Albums

To solve this problem, I’ve written a Bash script that automates the process of creating a shuffled playlist of complete albums. The script uses awk to group songs by their albums and awk for loops to shuffle these groups. Finally, it imports this new playlist into Cmus.

Here’s a link to the script’s repository

The script also allows you to set an album limit (currently manual by setting the ALBUM_LIMIT variable), so you can control how many albums appear in your shuffled playlist.

How It Works

  1. Fetching the Latest Library: The script starts by fetching the latest library from Cmus using cmus-remote.

  2. Grouping Songs by Album: It then uses awk to read through this library and group songs by their album.

  3. Shuffling Albums: awk scripts are used to shuffle these grouped albums.

  4. Importing the Playlist: Finally, the script imports this new shuffled playlist back into Cmus.

Usage

  1. Download the script and place it in a directory.
  2. Make the script executable with chmod +x script-name.sh.
  3. Run the script with ./script-name.sh.

Why This Script is just the beginning

The real point isn’t the script, it’s cmus-remote. Once you know it’s there, nearly any feature you miss from Rockbox or anywhere else is one script away.

This Bash script offers a simple yet effective way to shuffle complete albums in Cmus, providing a more Rockbox-like listening experience. It’s a great example of how we can use scripting to extend the functionality of existing software to better meet our needs.

So go ahead, give it a try and let your favorite albums play in a new, shuffled order!