Prerequisites
‣ Processor with support for SSE4.2 instructions on x86-64, or 64-bit ARM
‣ BIOS capable of UEFI boot (bootable image)
‣ Audio device(s) with ALSA driver support
‣ Ubuntu Server 24.04 LTS Noble Numbat, Debian 12 Bookworm or Fedora 39 Server/Minimal 64-bit OS installed
‣ No graphical user interface / desktop environment
Downloading and installing packages
Install necessary packages, dependencies for these packages are available in the OS package repository.
Download and install libgmpris (and libsoup3 for Debian Bookworm as well as libgupnp for Ubuntu Noble) packages. And then the hqplayerd package for your distribution.
Package contains example configuration file and documentation as a readme text file.
Downloading and configuring bootable image
Download the hqplayer-embedded image and write the image to a media you plan to use for booting, such as USB memory stick.
Once booted up, you can use the web management interface from another computer using URL “http://hqplayer.local:8088” or login as “root” (no password) from console. Default username for web interface is “hqplayer” and default password is “password“. Please change the password as soon as possible, either through the web interface, or from command line using command “hqplayerd -s username password“. The image will attempt to appear under name “hqplayer” on the network, but you can also see the obtained IP adress using command “ifconfig”, “ip a”, or from HQPlayer Client’s control panel.
Additional documentation can be found in /usr/share/hqplayer/readme.txt
Currently available overlays on RaspberryPi images
‣ allo-boss-dac-pcm512x-audio
‣ allo-digione
‣ allo-katana-dac-audio
‣ allo-piano-dac-pcm512x-audio
‣ allo-piano-dac-plus-pcm512x-audio
‣ applepi-dac
‣ audioinjector-addons
‣ audioinjector-ultra
‣ audioinjector-wm8731-audio
‣ audiosense-pi
‣ audremap
‣ dionaudio-loco
‣ dionaudio-loco-v2
‣ disable-bt
‣ disable-wifi
‣ dwc-otg
‣ dwc2
‣ fe-pi-audio
‣ gpio-fan
‣ gpio-poweroff
‣ gpio-shutdown
‣ hifiberry-amp
‣ hifiberry-dac
‣ hifiberry-dacplusadc
‣ hifiberry-dacplusadcpro
‣ hifiberry-dacplusdsp
‣ hifiberry-dacplushd
‣ hifiberry-dacplus
‣ hifiberry-digi
‣ hifiberry-digi-pro
‣ iqaudio-codec
‣ iqaudio-dac
‣ iqaudio-dacplus
‣ iqaudio-digi-wm8804-audio
‣ i-sabre-q2m
‣ justboom-both
‣ justboom-dac
‣ justboom-digi
‣ media-center
‣ merus-amp
‣ rpi-cirrus-wm5102
‣ rpi-dac
‣ rpi-poe
‣ superaudioboard
Defining combo interfaces in hqplayerd.xml
To define a combo interface for multi-endpoint output, add a new <combo> element in the configuration file. To enable combo interface for output, set output type to “combo”. At the moment, only useful attribute for the combo element is “any_dsd” to control overall capability to do any DSD output rate. This combo element is used as a parent to collect ordered list of sub-endpoints / backends, such as as “alsa” and/or “network”. Note! For network endpoints, this feature requires NAA version 5.1.0 or higher!
Each endpoint element has two additional attributes; “channels” to define number of channels, and “trigger” to define start trigger type. For example list of two 2-channel sub-endpoints forms a combined 4-channel endpoint. First two channels go to the first sub-endpoint, and last two channels to the second one. “trigger” attribute defines how the endpoint start is synchronized. It can be “net” for network based trigger which works for all network endpoints. Or it can be “time” which works for ALSA endpoint and network endpoints backed by an ALSA backend.
Here is an example of combo endpoint with two Linux-based endpoints:
<combo any_dsd="0">
<network address="naa1" any_dsd="1" channels="2" dac_bits="0" device="hw:CARD=HA200,DEV=0" dualwire="0" ipv6="1" pack_sdm="0" period_time="-1" trigger="net"/>
<network address="naa2" any_dsd="1" channels="2" dac_bits="20" device="hw:CARD=Standard,DEV=0" dualwire="0" ipv6="1" pack_sdm="0" period_time="-1" trigger="net"/>
</combo>
In above example period time is defined as -1, which instructs endpoint to use minimum possible DMA block size. However, this may not work reliably. But values ranging from 1 to 10 are more likely usable. Value of “0” means to use the driver / system default. It is important to note that in many cases (but not always), this DMA block size defines device start time granularity, so for better synchronization one may want to use a relatively low figure. For example on Windows with ASIO backend, this is largely dependent on the driver implementation and is better controlled through the driver control panel. On macOS with CoreAudio backend, this is always controlled by CoreAudio and thus the value should be left at 0.
When trigger is set to “time” and endpoints are distributed on the network, it is important to consider accurate clock synchronization using NTP. For example HQPlayer OS and NAA OS are preconfigured with NTP time synchronization. When “time” synchronization is used within a single server between devices, correctness of the absolute time is not important as there is only one clock involved.