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.
- 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
- Then restart Pulseaudio daemon:
pulseaudio --kill pulseaudio --start
- Verify your changes are in effect, by playing some music and finding your
card under /proc/asound:
find /proc/asound -type l
- 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.