High Bitrate Playback on Audioengine D1

I own an Audioengine D1 DAC which I love. It’s very Appley in design. Since I bought it two years ago, I have continously learnt to notice ever so subtle differences in quality of music playback, to the point that I can easily tell apart compressed and uncompressed music, and somewhat the difference between new and used equipment. A double blind test is definitely in order to prove the above abilities.

Recently reading over the spec of my D1 DAC, I saw that it resamples everything to 24bit/96Khz for playback. From past knowledge, I knew that resampling is a very complex and resource hungry operation and the small silicon inside the DAC cannot possibly do the best that can be done. So after a bit of searching online, I managed to force Pulseaudio on my Linux machine to always stream 24/96 bitstream to my DAC, and do software resampling on my main CPU. It sure is a power hungry process. The highest quality sampler, src-sinc-best-quality eats up 40% of my one core of a Xeon 3.2Ghz CPU! And that’s per stream, so if I have music playing and watch a youtube video, that’s one CPU core gone. src-sinc-medium-quality drops the usage by more than half, to 13% without any noticable difference.

  1. To force 24/96, edit /etc/pulse/daemon.conf and add/uncomment the following lines:
    resample-method = src-sinc-medium-quality
    default-sample-format = s24-32le
    default-sample-rate = 96000
  2. Then restart Pulseaudio daemon:
    pulseaudio --kill
    pulseaudio --start
  3. Verify your changes are in effect, by playing some music and finding your card under /proc/asound:
    find /proc/asound -type l
  4. See the content of streamN under the relevant directory for your card above:
    cat /proc/asound/D1/stream0
    2010 REV 1.7 Audioengine D1 at usb-0000:00:1a.0-1.1, full spe : USB Audio
    
    Playback:
      Status: Running
        Interface = 1
        Altset = 1
        Packet Size = 600
        Momentary freq = 96000 Hz (0x60.0000)
        Feedback Format = 10.14
      Interface 1
        Altset 1
        Format: S24_3LE
        Channels: 2
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000, 88200, 48000, 44100, 32000
      Interface 1
        Altset 2
        Format: S16_LE
        Channels: 2
        Endpoint: 1 OUT (ASYNC)
        Rates: 96000, 88200, 48000, 44100, 32000
    Note that Status: Running is referencing Interface = 1 and Altset = 1 which is 24/96 according to the rest of the output.