A script for Konversation IRC client to "do stuff" with mpd (music player daemon).
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Jay Moore 3fd89311da MOV AX, AX 2 days ago
LICENSE Go Go Gadget Bash 3 days ago
README.md MOV AX, AX 2 days ago
mpdirc MOV AX, AX 2 days ago

README.md

konversation-mpd - an mpd script for the Konversation IRC client

An mpd interface for Konversation. Functions as a scrobbler/announcer for a window, as well as allows control of MPD by passing commands.

Requirements

  • mpd
  • bc

mpd is obvious. bc is used to do math on sample rates.

Installation

  • Make any changes to the formatting of the output you wish, and copy the script to wherever Konversation looks for scripts on your system.
  • Assign /exec mpdirc to an alias of your choosing.

Usage

The script functions as both a spaannouncer and as an MPD client. We'll assume you assigned it to /mpd in Konversation.

Playback Announcer

Simply feeding /mpd will spaannounce your plaback information to the current window.

/me mpd: Song Title - Artist (From: Album) [ elapsed/duration | audioformat | bitrate | codec]

[Paused] will be appended to the song title if in paused state. mpd: Not Playing will be shown if in stop state.

The format in which this is sent can be modified in the script itself. Simply rearrange and/or remove information you don't want. A list of variables are provided in this readme in case you want to add something.

MPD client

The script can function as a "full" client by feeding commands/arguments to /mpd. Anything you send to the script will be passed to mpd as a command.

play [position] - Starts playback. Optional: Position to start playback at. Otherwise, uses current position.
pause           - Toggles Pause. 
next            - skip track
previous        - go back a track

These are just the commonly used examples. A full set of commands are available in mpd's command reference. If the command fails, the mpd error is returned to the chat window. If you want to type out the stupid long command to add a file to your playlist; it will take it and pass it.

But it's mostly to be able to go /mpd next.

How It Works

The script talks to mpd (directly) using a file-handler to /dev/tcp/localhost/6600. After dropping it's banner response, we send it the status and currentsong commands; mpd responds with a ton of fields. We convert all of those fields in to a variable=value. We then check if the format is DSD or a sample rate and either specify a rate or divide by 1000. The extension of the file is obtained and some logic is done to determine which codec information we're going to display. We slap all of this in to a variable formatted the way we want; and send it to koversation over dBus.

Arguments passed to the script beyond Konversation's server and target are passed directly to mpd as a client command.

TODO

  • List of variables, in case there's something you want I'm not already listing.
  • Playback controls: start, stop, pause, skip...all from within IRC.
  • Use, test, fix edge cases.

CHANGES

30-AUG-2025: Initial Release. Only announcer.
31-AUG-2025: Stop/Pause states. Added remote/client features.

Variables

Since mpd reports things in the name: value format, it's easy to convert everything in to a script variable. As a result we pull in some additional information that's not used; whether any of it is useful I don't know. I'm just getting a full look at this list myself.

repeat=0
random=0
single=0
consume=0
partition=default
playlist=14
playlistlength=12
mixrampdb=0
state=play
song=0
songid=1
time=65:176
elapsed=64.992
bitrate=5644                # kbps
duration=176.360
audio=44100:16:2 (dsdxx:2)  # DSD content does not report a bit-depth, and it reports it's DSD rate as sample rate. Please don't use this directly.
nextsong=1
nextsongid=2
file=Path/To/File.ext
Added=2014-10-31T00:26:24Z
Track=1                     # This is album track title.
Date=2014
Album=Album Title
Artist=Artist
Title=Track Title
Performer=Performer
Time=176
duration=176.360
Pos=0
Id=1

Additionally, here are some script-specific variables you can use in the output:

audio_result    - This generates samplerate khz/bitdepth-bit/stereo|format_part. It divides the sample rate by 1000, formats it from : to /, and it
                  also handles the DSD formatting. Inserts the MHz sample rate and appends the DSD format_part if it exists.
format_part     - The audio format portion of audio_result containing sample rate, bith depth, and stereo.
codec_result    - This determines what to show for codec, capitialized file extension or DSD stuff. Also reports Super Audio CD if ISO is detected.