Show_HN: ~bhyvxe/hypermpd – hypermpd emerges with competitive features vs. MPD

icmpkitty1 pts0 comments

~bhyvxe/hypermpd -

hypermpd is a futuristic fork of mpd 0.25 going the extra mile to ensure proper decoding and bit-perfection. -

sourcehut git

~bhyvxe/hypermpd

summary

tree

log

refs

licenses

hypermpd is a futuristic fork of mpd 0.25 going the extra mile to ensure proper decoding and bit-perfection.

Licensed under

BSD-2-Clause,

GPL-2.0-or-later,

ISC,

LGPL-2.1-only

5dde9778

nhkintact

a day ago

C/LD

1023a59f

nhkintact

a day ago

hello world

d1f92336

nhkintact

a day ago

hello world

refs

main

browse

log

clone

read-only<br>https://git.sr.ht/~bhyvxe/hypermpd<br>read/write<br>git@git.sr.ht:~bhyvxe/hypermpd

Clone repo to your account

You can also use your local clone with<br>git send-email.

hypermpd

hypermpd is a latency-optimised fork of MPD v0.25. real-time audio threads,<br>bit-perfect short-circuit through the filter chain, SCHED_FIFO on every audio<br>path, 25 ms ALSA buffer default, configurable PipeWire ring buffer, and a<br>kqueue event backend for BSD. in general, this is the only fork of MPD which<br>approaches the concept of an "audio pipeline" as a realtime signal processor,<br>explaining the low-level precision.

due to the drastic degree of changes still, i'll avoid trying to merge<br>back upstream with the predecessor.

install

./configure && ninja -C build && sudo ninja -C build install

a best-default configuration is installed to $sysconfdir/hympd.conf<br>(typically /usr/local/etc/) and discovered automatically on first run.<br>PipeWire output, soxr-very-high resampling, ffmpeg+mad decoders,<br>bind to 127.0.0.1:6600.

select audio backends at build time:

./configure --disable-pipewire --enable-alsa

suppress the default config if you write your own:

./configure --no-default-config

on non-Linux (BSD, macOS, Windows), meson natively handles the build:

meson setup build && ninja -C build && sudo ninja -C build install

the only user-configurable thing is their MPD client.

per-location profile

binary: $prefix/bin/hympd<br>config: ~/.config/hympd/hympd.conf<br>~/.hympdconf<br>~/.hympd/hympd.conf<br>$sysconfdir/hympd.conf<br>state: ~/.config/hympd/{database,log,pid,state,sticker.sql}<br>manual: $datadir/doc/hypermpd/

license

GNU General Public License version 2.

"it sounds just like mpd; don't bother."

this will be a dismissive statement that arises on occasion, so i'm killing it now: mpd isn't perfect, but the two programs do produce identical streams based on a rough code comparison. there's a discrepancies that put hympd ahead, however. the first is the multiple ways in which decoder data is read correctly by the output plugin.

-- a zero-copy short-circuit: mpd 0.25 is constantly processing audio where it is unnecessary, contributing to instability in its bit-perfection. every audio data chunk goes through an entire filter chain (replaygain into user filters -> soft vol > format conversion). even when the filter is idle, data is still copied from the non-proc'd chunk, expanded to a floating point, processed through the filter stage therein, then rewritten.

-- no upscaling by default in the software vol. filter: the predecessor from which this was created currently left-shifts each sample by 16 bits going from a 16-bit source format to 24-bit stored within a 32-bit container. at 100% volume, the multiplier is 1.0, but the short-circuit condition (zero-copy chunk rendering) doesn't get to trigger because the format is now different (S16 -> S24_P32), meaning that source format =/= output format during playback. the data that reaches the DAC is still "correct" (S16

~bhyvxe/hypermpd licenses:

BSD-2-Clause,

GPL-2.0-or-later,

ISC,

LGPL-2.1-only

hypermpd hympd build bhyvxe audio filter

Related Articles