~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