[GUIDE] Apos Merlin DAC on Linux — MPD Bitperfect Setup & Amanero Firmware 1.01 Sample Rate Fix

[GUIDE] Apos Merlin DAC on Linux — MPD Bitperfect Setup & Amanero Firmware 1.01 Sample Rate Fix

Hi all,

I’ve been setting up the Merlin DAC on Debian Linux with MPD for
bitperfect playback and ran into a frustrating issue that took
quite a while to diagnose — complete silence when playing 44.1kHz
files, with no errors anywhere in the logs.

After a long debugging session with the help of Claude (yes, the
AI — it turned out to be a surprisingly solid audio troubleshooting
partner), we traced the root cause to a sample rate negotiation
limitation in the Amanero Combo768 firmware 1.01 that affects
Linux UAC2 driver behavior.

I’m sharing the full guide here hoping it saves other Linux users
the same headache. It covers everything from identifying the
firmware issue to a working MPD + PulseAudio configuration with
clean switching between bitperfect music mode and system audio.

Feel free to ask questions — happy to help.

================================================================

THE SHORT VERSION

The Amanero Combo768 module on the Merlin (firmware 1.01) does
NOT advertise 44.1kHz family sample rates (44100, 88200, 176400)
to the Linux ALSA subsystem. This means bitperfect playback of
44.1kHz files via direct hw: access fails silently — the DAC
shows the correct rate in hw_params but produces no audio.

The workaround is to use MPD’s SoX resampler to upsample
everything to 96kHz before sending it to the DAC.

================================================================

HARDWARE & SOFTWARE

  • DAC: Apos x Geshelli Merlin (Amanero Combo768, fw 1.01)
  • Amp: Apos Gremlin tube amp
  • OS: Debian 13 Trixie (kernel 6.x)
  • Player: MPD + Cantata frontend
  • Audio: PulseAudio 17 (system audio) / MPD (music playback)

================================================================

STEP 1 — IDENTIFY YOUR CARD

First, find the exact ALSA card name for the Merlin:

cat /proc/asound/cards

You should see something like:
1 [Combo768]: USB-Audio - Amanero Combo768
Amanero Technologies Amanero Combo768 at usb-…

The card name is “Combo768”. Always use the name-based device
string (hw:CARD=Combo768,DEV=0) instead of the number-based one
(hw:1,0) — the number can change between reboots.

Check firmware version:
lsusb -v -d $(lsusb | grep -i amanero | awk ‘{print $6}’)
2>/dev/null | grep -i “bcdDevice|idVendor|idProduct”

--> idVendor: 0x16d0
--> bcdDevice: 1.01  (this is the problematic firmware)

================================================================

STEP 2 — DISCOVER THE FIRMWARE LIMITATION

Run this to see what sample rates the DAC actually advertises
to ALSA:

aplay -D hw:CARD=Combo768,DEV=0 --dump-hw-params /dev/zero \
2>&1 | head -30

Expected output:
RATE: [32000 1536000]
FORMAT: S32_LE DSD_U32_BE

Notice: RATE starts at 32000, not 44100. The DAC declares a
continuous range but in practice ALSA cannot open it at 44100Hz
in hw: direct mode with firmware 1.01.

What happens when you try to play a 44.1kHz file:

  • hw_params correctly shows rate: 44100
  • MPD reports no error
  • Complete silence from the DAC

This is NOT a Linux driver issue. The Amanero module simply does
not negotiate the 44.1kHz family correctly with the Linux UAC2
driver at firmware 1.01. A firmware update via the Amanero
Windows tool would likely fix this, but no Linux firmware update
tool exists at this time.

================================================================

STEP 3 — MPD CONFIGURATION (WORKING SOLUTION)

File: ~/.config/mpd/mpd.conf

log_level "verbose"

audio_output {
    type            "alsa"
    name            "Geshelli Merlin (Amanero)"
    device          "hw:CARD=Combo768,DEV=0"
    mixer_type      "none"
    auto_resample   "no"
    auto_format     "no"
    auto_channels   "no"
    format          "96000:32:2"
}

resampler {
    plugin          "soxr"
    quality         "very high"
}

Key points:

  • “format 96000:32:2” locks MPD output to 96kHz/32bit
  • SoX resampler converts any other rate before output
  • Do NOT use both “resampler” and “samplerate_converter” —
    they conflict and MPD will fail to start
  • Do NOT use plughw: — it bypasses direct ALSA control
  • Do NOT set a fixed format without the resampler block —
    MPD will attempt to send 44.1kHz directly and produce silence

Make sure soxr is available:
mpd --version | grep soxr

If not:
sudo apt install libsoxr-dev

================================================================

STEP 4 — PULSEAUDIO FOR SYSTEM AUDIO (OPTIONAL)

If you want system audio (browser, YouTube, etc.) to also go
through the Merlin, PulseAudio can handle it — but it cannot
share the device with MPD simultaneously. The solution is a
clean switch between the two modes.

PulseAudio configuration:

~/.config/pulse/default.pa:
.include /etc/pulse/default.pa
set-default-sink alsa_output.usb-Amanero_Technologies_Amanero_Combo768_9EC012DBE0903628-00.analog-stereo

~/.config/pulse/daemon.conf:
default-sample-rate = 96000
alternate-sample-rate = 48000
default-sample-format = s32le
resample-method = soxr-vhq
exit-idle-time = -1

IMPORTANT: Do NOT add a manual module-alsa-sink entry pointing
to hw:CARD=Combo768 in default.pa — it will conflict with
module-udev-detect and crash PulseAudio on startup. Let udev
detect the Merlin automatically and just set it as default sink.

================================================================

STEP 5 — SWITCH SCRIPTS

Since MPD (hw: direct) and PulseAudio cannot share the Merlin,
use these two scripts to switch between modes:

~/audio-mpd.sh — bitperfect music mode:
#!/bin/bash
systemctl --user stop pulseaudio.service pulseaudio.socket
sleep 1
systemctl --user start mpd.service
echo “MPD bitperfect mode active → Merlin”

~/audio-system.sh — system audio mode:
#!/bin/bash
systemctl --user stop mpd.service
sleep 1
systemctl --user start pulseaudio.service
echo “System audio mode active → Merlin via PulseAudio”

Make them executable:
chmod +x ~/audio-mpd.sh ~/audio-system.sh

================================================================

STEP 6 — VERIFY IT’S WORKING

While playing a track in Cantata/MPD:

cat /proc/asound/card1/pcm0p/sub0/hw_params

Expected output:
format: S32_LE
channels: 2
rate: 96000 (96000/1)

Check no other process is holding the device:
fuser /dev/snd/*
→ should show only the MPD pid

================================================================

AUDIO SIGNAL PATH

MPD mode (Cantata):
File → MPD → SoX resampler (→96kHz) → ALSA hw:Combo768
→ Merlin DAC → Gremlin amp → headphones

System mode (YouTube/browser):
Browser → PulseAudio (internal resampling) → ALSA
→ Merlin DAC → Gremlin amp → headphones

Switch:
~/audio-mpd.sh → stops PA, starts MPD
~/audio-system.sh → stops MPD, starts PA

================================================================

KNOWN LIMITATIONS

  1. 44.1kHz family files are NOT played bitperfect — they are
    upsampled to 96kHz by SoX. Files recorded natively at 96kHz
    and above pass through without conversion.

  2. The firmware update that would fix the 44.1kHz issue requires
    a Windows-only tool from amanero.com. A VM with VirtualBox +
    USB passthrough is a possible workaround for Linux-only users.

  3. MPD and PulseAudio cannot use the Merlin simultaneously in
    hw: direct mode — the switch scripts are required.

================================================================

QUESTIONS FOR APOS/GESHELLI

It would be great to have official clarification on:

  1. Is the 44.1kHz family limitation specific to firmware 1.01,
    or is it a known behavior of the Amanero Combo768 on Linux?

  2. Is there a planned firmware update that addresses this?

  3. Is there any possibility of a Linux-compatible firmware
    update tool, or at least documentation of the USB descriptor
    changes between firmware versions?

================================================================

Hope this helps other Linux users out there.

2 Likes

Yo. This is a crazy amount of troubleshooting you did. Thanks so much for sharing it. This will be one of those things one random person every few months will google and find as the only result, so I appreciate it.