Overview

License: MIT

The MusicPlayerPlus project provides integration and extension of several audio packages designed to stream and play music. MusicPlayerPlus interacts with the Music Player Daemon (MPD). Outputs from the MPD streaming audio server are used as MusicPlayerPlus inputs for playback and visualization. MusicPlayerPlus components are used to manage and control MPD and ALSA configuration.

MusicPlayerPlus integrations and extensions are primarily aimed at the character-based terminal user. They enable an easy to use seamlessly integrated control of audio streaming, playing, music library management, and visualization in a lightweight character-based environment.

Audio streaming is provided by the Music Player Daemon (MPD). At the core of MusicPlayerPlus is the mpplus command which acts as a front-end for a variety of terminal and/or tmux sessions.

The mpplus command can be used to invoke:

  • The lightweight character-based MPD client, mpcplus

  • One or more terminal emulators running an MPD client and visualizer

  • A tmux session using the tmux session manager tmuxp

  • A spectrum visualizer

  • A download of album cover art for every album in a music library

  • Conversion of all WAV/M4A format media in a music library to MP3 format media

  • An import of a music library to the Beets media library manager

  • A download of lyrics for all songs in the music library without lyrics

  • Analysis and retrieval of audio-based information for media matching a query

  • YAMS MPD Last.fm scrobbler activation

  • Any MPD client the user wishes to run

  • One of several asciimatics animations optionally accompanied by audio

  • A fuzzy listing and searching of the audio library using fzf

[Note:] Typical use of mpplus as a music player and spectrum visualizer will invoke a tmux session to display the MPD client, spectrum visualizer, and album cover art all in a single terminal window. MusicPlayerPlus configures tmux with a custom key binding to exit tmux sessions. To exit an mpplus tmux session, the Alt-x key binding can be used.

Integration is provided for:

  • mpd, the Music Player Daemon

  • mpcplus, character-based MPD client

  • beets, media library management system

  • essentia, acoustic metadata analysis and extraction

  • mopidy, music server with cool extensions

  • navidrome, self-hosted music server and streamer

  • yams, MPD scrobbler for Last.fm

  • cava, an audio spectrum visualizer

  • mplayer, a media player

  • fzf, interactive fuzzy finder

  • asciimatics - automatically display a variety of character-based animation effects

  • asciinema - automatically create ascii character-based video clips

  • tmux, a terminal multiplexer

  • tmuxp, a tmux session manager

  • Enhanced key bindings for extended control of terminal windows and tmux sessions

  • Several terminal emulators

    • kitty (the default MusicPlayerPlus terminal emulator)

    • cool-retro-term

    • gnome-terminal

    • tilix

The goal of MusicPlayerPlus is to provide the user with a sophisticated set of complex music library tools that can be integrated and managed in a fairly simple to understand fashion. Also, to make some cool looking powerful stuff happen from the command-line in a character-based environment.

Requirements

MusicPlayerPlus is compiled and packaged for installation on any Linux platform. It has been tested on the following platforms:

  • Arch Linux

  • CentOS Linux

  • Fedora Linux

  • Raspberry Pi OS

  • Ubuntu Linux

Installation and initialization require admistrative privilege. The mppinit command, executed after installing MusicPlayerPlus, installs several packages and therefore requires access to the Internet along with administrative privilege (e.g. sudo privilege).

Memory and storage requirements depend upon the size of the music library.

With a moderate sized music library, the Music Player Daemon can exceed a 2GB memory capacity. Therefore, 4GB or more of memory is recommended.

Storage should be sized to adequately host what will likely be a growing music library. Plan ahead and leave your library room to grow. A few hundred Gigabytes of storage might suffice for some music libraries but a Terabyte or more will provide room to grow. Testing is performed on systems with 4GB RAM and 2TB storage using a 600GB music library.

Essentia metadata extraction, Blissify similarity analysis, and transcoding all consume significant CPU resources. Testing has been performed on systems with the following CPU resources:

  • 8 x Intel® Core™ i7-7700K CPU @ 4.20GHz

  • 2 x Intel® Celeron® CPU G1840 @ 2.80GHz

  • 4 x ARMv7 Processor rev 3 (v7l)

All of these processors were able to handle significant loads. However, import, metadata extraction, and transcoding are all much quicker on the 8 x Intel® Core™ i7-7700K CPU @ 4.20GHz system. Although not necessary, these infrequent operations consume much less time on a more powerful CPU.

MusicPlayerPlus Commands

MusicPlayerPlus adds the following commands to your system:

  • mpplus : Primary user interface, invokes an MPD client, spectrum visualizer, and more

  • mpcplus : Featureful NCurses MPD client, compiled with spectrum visualizer

  • mppinit : One-time initializaton of a user’s mpcplus configuration

  • mppcover : Display album cover art for currently playing song

  • mppdl : Downloads audio tracks from Bandcamp, Soundcloud, or a URL

  • mpcplus-tmux : Runs mpcplus, a visualizer, and displays album art in a tmux session

  • mppsplash-tmux : Runs mppsplash, a visualizer, in a tmux session

  • mppsplash : Fun ascii art screens using ASCIImatics animations. Ascii art commands:

    • mppjulia : ASCIImatics animated zoom on a Julia Set

    • mppplasma : ASCIImatics animated plasma graphic

    • mpprocks : ASCIImatics animated MusicPlayerPlus splash screen

  • raise_cava : Raises the mppcava spectrum visualizer window

  • set_term_trans : Sets an xfce4-terminal window’s transparency level

  • fzmp : Browse, search, and manage MPD library using fzf fuzzy finder and mpc MPD client

  • artist_to_albumartist : Copies the Artist tag to the AlbumArtist tag

  • create_playlist : Create a new playlist using a Beets query

  • listyt : List YouTube video titles and urls

  • bliss-analyze : Acoustic analysis of audio files

  • blissify : Create MPD playlists using song similarity

  • essentia_streaming_extractor_music : Analyze and extract acoustic characteristics

  • mpd-configure : Create an MPD configuration file optimized for bit perfect playback

  • mpd-monitor : Display info on currently playing MPD song

The bliss-analyze and blissify commands are currently not available on Raspberry Pi installations due to lack of support for that architecture in the ffmpeg library.

[Note:] MusicPlayerPlus functions as a front-end and management system for any MPD/Mopidy/Navidrome client. The default MPD client is mpcplus but any MPD client can be configured by setting MPD_CLIENT in ~/.config/mpprc. While mpcplus is the recommended MPD client, ncmpcpp is also supported with some integration for visualizer data source management. Other MPD clients available for use with MusicPlayerPlus include ncmpc, pms, vimpc, pimpd2, nncmpp, mmtc, and mpq.

Additional detail and info can be found in the MusicPlayerPlus Wiki.