Is there any DAC compatible with FreeBSD?

I decided to move from Windows 7 to a BSD or Linux OS on desktop and I'll start a home server probably with FreeBSD. I have a few concerns because I have a few USB devices which has drivers / applications only for Windows. One of them is a Suunto Ambit3 sport watch, the other is a Sabaj D3 DAC. I asked both companies if they could support Linux or BSD, but they did not like the idea. It was a hard decision, but I decided to give my DAC to my brother and buy a new one. I'd like to know if there is any DAC (around $100) that works on the other side of the OS realm. I know this is a little bit grey zone, because the question is not just about FreeBSD, sorry for that.
 
Since I'm working from home right now :) here it is: FiiO E10K USB DAC:
Code:
ugen0.5: <FiiO DigiHug USB Audio> at usbus0
uhid0 on uhub5
uhid0: <FiiO DigiHug USB Audio, class 0/0, rev 1.10/0.01, addr 5> on usbus0
uaudio0 on uhub5
uaudio0: <FiiO USB DAC-E10> on usbus0
uaudio0: Play: 96000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 48000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 44100 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 32000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Record: 96000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Record: 48000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Record: 44100 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Record: 32000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Record: 16000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Record: 8000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: No MIDI sequencer.
pcm0: <USB audio> on uaudio0
uaudio0: HID volume keys found.
Code:
# cat /dev/sndstat
Installed devices:
pcm0: <USB audio> (play/rec) default
# lsusb
Bus /dev/usb Device /dev/ugen0.5: ID 1852:7022 GYROCOM C&C Co., LTD
audio/moc plays music fine. Not sure if higher-fidelity is available, since it is connected to a headless server.
 
I decided to move from Windows 7 to a BSD or Linux OS on desktop and I'll start a home server probably with FreeBSD. I have a few concerns because I have a few USB devices which has drivers / applications only for Windows. One of them is a Suunto Ambit3 sport watch, the other is a Sabaj D3 DAC. I asked both companies if they could support Linux or BSD, but they did not like the idea. It was a hard decision, but I decided to give my DAC to my brother and buy a new one. I'd like to know if there is any DAC (around $100) that works on the other side of the OS realm. I know this is a little bit grey zone, because the question is not just about FreeBSD, sorry for that.
As low Ng as the USB audio device isn't extremely peculiar it should work out of the box.
I use a Native Instruments interface that even needs manual driver installation on windows, and yet it works out of the box on FreeBSD.

Except that I haven't figured out yet, how to set it up to use Output 3/4 instead of 1/2. 🙃
 
TL; DR.

The vast majority of the USB DACs support/uses the standard 'USB Audio' driver (non-existent in Windows) and should work out of the box on FreeBSD (and Linux, and likely MacOS).
 
I also use a Fiio dac connected to a vlink2 by musical fidelity

You can enable bitperfect audio on freebsd which works great with mpd and ncmpc
list your audio devices

Bash:
cat /dev/sndstat

edit /etc/sysctl.conf
replace dev.pcm.2 with the number of your audio device

set vchans to 0 and bitperfect to 1

Bash:
# sysrc dev.pcm.2.play.vchans=0
# sysrc dev.pcm.2.bitperfect=1

note the mpd package is called musicpd on freebsd
 
Can report success story with LG Hi-Fi Plus AFD-1200, you can find it quite cheap at various places and is powered by USB so no batteries etc.
 
Wow, thanks! I know the FiiO, I wanted to buy that one or the Sabaj when I decided to buy a DAC. Seeing the answers maybe even this one works with BSD too. I'll try it out. I think there is hope for my Suunto watch too, maybe their application works through Wine and they are supported by the USB driver too.
 
I might be a bit late to the party, but I'm using the USB edition of JDS Labs' OL DAC ($99):
Code:
uhid0: <Yoyodyne Consulting JDS Labs Element DAC, class 0/0, rev 1.10/0.01, addr 6> on usbus2
uaudio0 on uhub5
uaudio0: <JDS Labs Element DAC> on usbus2
uaudio0: Play: 96000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 88200 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 48000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 44100 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play: 32000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: No recording.
uaudio0: No MIDI sequencer.
pcm4: <USB audio> on uaudio0

With the following settings in /etc/sysctl.conf:
Code:
# Assign the default sound unit to the most recently attached device
hw.snd.default_auto=2
# High-quality sample rate conversion
hw.snd.feeder_rate_quality=4
# More verbose /dev/sndstat output
hw.snd.verbose=2

I've also bumped the virtual playback channel up to 88.2 KHz/24 bits per the manufacturer's recommendations (p. 4) in /boot/loader.conf.
For maximum signal fidelity, set the DAC to 24-bit audio and adjust digital volume slightly below 100% at your computer. [...] When using USB mode, set sampling rate to the highest integer multiple of your music collection. For example, use 24/88.2kHz for a collection of 44.1k or 88.2k files. Use 24/96kHz for a collection of 48k or 96k audio files.
Code:
dev.pcm.4.play.vchanformat="s24le:2.0"
dev.pcm.4.play.vchanrate="88200"
 
I use a general USB scarlet 8i6 focusrite. It works out of the box in Linux, no need for any driver, i.e. usbaudio & alsa.
Could not get it to work in Freebsd.
As long as there is no "qasmixer" application or alternative mixer detecting all channels many will not work ...

ardour5/jack didn't worked neither with my usb-dac.
 
...I'd like to know if there is any DAC (around $100) that works... FreeBSD ...
Code:
ugen0.2: <SENUCN Digital Hifi Audio> at usbus0
uaudio0 on uhub0
uaudio0: <Digital Hifi Audio> on usbus0
uaudio0: Play[0]: 192000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 96000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 48000 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 44100 Hz, 2 ch, 24-bit S-LE PCM format, 2x8ms buffer.
uaudio0: No recording.
uaudio0: No MIDI sequencer.
pcm5: <USB audio> on uaudio0
This is a Fosi Audi DAC Converter 24bit / 192kHz. Cost $67 on Amazon. It's the first DAC I've owned so can't compare it to others but sure sounds good through my Beyerdynamic DT 880 250 ohm semi-open headphones. It drives the 250 ohms very nicely.
 
Just posting a list of my DACs / USB sound cards that work on FreeBSD 12.x (recently tested on 12.2-RELEASE). These all work perfectly well for audio playback, and sound really good.


1.) M-Audio Fast Track (not the Pro model) [24bit up to 48kHz)
2.) Audient iD4 [32bit up to 96kHz]
3.) iFi Zen DAC Signature [32bit up to 384kHz]

2 and 3 I can confirm to work in bit-perfect mode, however 2 has serious caveat in full bit-perfect mode. 1 does not work in bit-perfect mode at all.

2 has an issue whereby the record (rec) vchan must be set to the same sample-rate (vchanrate) as the play channel, even in bitperfect mode, which is annoying and not realistically viable in full bit-perfect mode. I have yet to make a bug report for this. If the vchanrate of the rec channel does not match the vchanrate of the play channel, then the sound is distorted/garbled; the music can be heard, but sounds horrible. For bitperfect=0 this not a problem, just set the same vchanrate for both play and rec. But for bitperfect=1 on the play channel; I have to set bitperfect=0 on both channels, set the vchanrate of the rec channel to the same sample-rate that the play chanenel uses and change back to bitperfect=1. This workaround will only work in full bit-perfect mode if the PCM stream is the same samplerate as what we just set the vchanrate to. But in partial bit-perfect mode (vchans=1), whereby OSS is resampling to match the vchanrate and vchanformat, there is no problem as long as the rec vchanrate matches the play vchanrate. In short, if you want proper bit-perfect mode, it's best not buy this USB soundcard and instead buy a proper DAC which only has play channels and supports all the sample rates of your audio collection (I recommend 192kHz or above).

3 seems to work better using the older 5.20 firmware, which unfortunately I had to find a Windows machine to flash it from. MacOS can also be used to flash firmware to this device.

I highly recommend 2 and 3, depending on your budget. They are both available on the market as of the date of this post. 2 is an entry level proffessional grade audio production device (for a recording studio), which works well as DAC in no-bit-perfect mode. 3 is a high end DAC for Hi-Fi audiophiles, and one the best value for money DACs on the market as of writing. The original "Zen DAC" (not the Signature model) should also be good, and is about half the price of the Signature model that I have.

With the right settings in musicpd (MPD server), the audio quality is amazing. I have posted below the relevant sections of my configs for non-bitperfect-mode (still sounds great for my 96kHz/24bit and 192kHz/24bit FLACs). Note that whether using bitperfect mode or not, do not set the format variable in your musicpd.conf audio_output section; it seems to make musicpd use its own resampler, which is poor quality. FreeBSD's native OSS mixer / resampler (virtual channels) is far superior, especially if we set the sysctl hw.snd.feeder_rate_quality=4.

I have only tested these using PCM (Pulse Code Modulation) and not DSD (Direct Stream Digital).


/etc/sysctl.conf for 2:

Code:
# AUDIO
hw.snd.default_auto=0
hw.snd.default_unit=0
hw.snd.feeder_rate_quality=4
#hw.snd.maxautovchans=16
hw.snd.verbose=2
#hw.snd.vpc_0db=45
hw.snd.vpc_autoreset=0
hw.snd.vpc_mixer_bypass=0
dev.pcm.0.bitperfect=0
dev.pcm.0.play.vchans=8
dev.pcm.0.rec.vchans=8
dev.pcm.0.play.vchanformat=s32le:2.0
dev.pcm.0.rec.vchanformat=s32le:2.0
dev.pcm.0.play.vchanmode=passthrough
dev.pcm.0.rec.vchanmode=passthrough
dev.pcm.0.play.vchanrate=96000
dev.pcm.0.rec.vchanrate=96000

/etc/sysctl.conf for 3:

Code:
# AUDIO
hw.snd.default_auto=0
hw.snd.default_unit=0
hw.snd.feeder_rate_quality=4
#hw.snd.maxautovchans=16
hw.snd.verbose=2
#hw.snd.vpc_0db=45
hw.snd.vpc_autoreset=0
hw.snd.vpc_mixer_bypass=0
dev.pcm.0.bitperfect=0
dev.pcm.0.play.vchans=8
dev.pcm.0.play.vchanformat=s32le:2.0
dev.pcm.0.play.vchanmode=passthrough
dev.pcm.0.play.vchanrate=384000


/usr/local/etc/musicpd.conf:

Code:
audio_output {
    type        "oss"
    name        "USB DAC"
    #device      "/dev/dsp0.0"
    #format     "*:*:*"
    mixer_type  "software"
}
 
Last edited:
Time for an almost yearly update! I recently replaced my JDS Labs OL DAC with a better-measuring Chi-fi DAC, the Topping D10s ($89 on Singles' Day). It sounds great!

Code:
uaudio1: <D10s> on usbus1
uaudio1: Play[0]: 384000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 352800 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 192000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 176400 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 96000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 88200 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 48000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: Play[0]: 44100 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio1: No recording.
uaudio1: No MIDI sequencer.
pcm6: <USB audio> on uaudio1

I'm using the following settings:

/boot/loader.conf

Code:
hint.pcm.6.vpc="0"
hint.pcm.6.vol="100"
hint.pcm.6.pcm="100"

/etc/sysctl.conf

Code:
# Assign the default sound unit to the most recently attached device
hw.snd.default_auto=2
# High-quality sample rate conversion
hw.snd.feeder_rate_quality=4
# More verbose /dev/sndstat output
hw.snd.verbose=2
hw.snd.vpc_0db=100

# Enable bit-perfect playback for USB DAC
dev.pcm.6.play.vchans=0
dev.pcm.6.bitperfect=1

And speaking of DSD, I've created a port of a tool called dsf2flac, which you can use to play DSD files (via DSD-over-PCM) in the following fashion:

Bash:
❯ dsf2flac --dop \
    --samplerate=176400 \
    --infile=01\ -\ David\ Elias\ -\ The\ Window\ -\ Vision\ of\ Her\ \(DSD64\).dsf \
    --outfile=- \
    2>/dev/null | \
    mpv -
 
After some further testing on my Audient iD4 (device 2 in my above post) I have made some important edits to that post. This USB soundcard does not work in full bit-perfect mode unless all your sources are the same samplerate and match the vchanrate set on the play and rec channels. I suspect there is a bug in FreeBSD OSS whereby the rec channel samplerate effects the play channel processing. It should not matter what the rec channel samplerate is set to, but yet it does make the audio output distorted and sounds horrible as I described in my previous post.

Best to buy proper DAC for HiFi quality audio in bit-perfect mode.
 
And speaking of DSD, I've created a port of a tool called dsf2flac, which you can use to play DSD files (via DSD-over-PCM) in the following fashion:

audio/musicpd does DoP (DSD over PCM).

This is good to know. I did get an album in DSD once or twice. I used some command line tool to convert the one big album file to multiple per-track FLACs. IIRC I had to use at least two tools. The first step I had to do was use the CUE files to split the DSD file into tracks. I cannot remember the tools I used, but it was probably done on a Linux box.

I wonder if it was 'dsf2flac' that I used. Unfortunately my Linux boxes have untuned bash and the history is probably long been overwritten. Crazy that in 2020 the default shell history is still so limited.

I'm not interested in DSD playback, don't see any advantage. I'm very happy with high resolution FLAC and PCM. I will always convert any DSD (.dsf) to FLAC. Thanks for porting this great tool to FreeBSD!
 
The mpd is support DSD over PCM (not yet released).

ver 0.23 (not yet released)
* protocol
- new command "getvol"
- show the audio format in "playlistinfo"
* database
- proxy: require MPD 0.20 or later
- proxy: require libmpdclient 2.11 or later
- proxy: split search into chunks to avoid exceeding the output buffer
- upnp: support libnpupnp instead of libupnp
* decoder
- openmpt: new plugin
* output
- oss: support DSD over PCM
- pipewire: new plugin
- snapcast: new plugin
* tags
- new tags "ComposerSort", "Ensemble", "Movement", "MovementNumber", and "Location"
* new build-time dependency: libfmt
 
I have a Schiit Modi which costs more than $100 but works on any system that has uac2 over USB. That was the answer to my query. I use Linux for that, haven't tested on BSD, but I can do that if someone intends to buy on


Alexander V
(Schiit Audio)
Nov 13, 2020, 12:51 PST
Hi,

We have not tested every distro but most common ones do work with modi in my experience. As long as your machine supports uac2 over usb you should be fine.
Best,
Alexander V


KC8Bbp04p9GhM5Y6J6Zvi3tRmQTLAkPtK4-4fz50SoMkgjB3bhoLgUJuH5aACTafbwsnMarD3vF3NnrHEK92z9vA-6DsIGoEWY13BZ1_sTNFPh_G4XOPzatcZEYVSK0PsdGlfTzR4m-5mItnpwY00MP1mMnwpkPLFlUocG1m8-HCcDZeo3T5QKSlbPRz0csmd7v3E-lz87bO9WOzU5hoC8n5D2i-LZgCwDfWoTew4_F9HnOz=s0-d-e1-ft
Bobmc
Nov 13, 2020, 11:23 PST
Is Linux such as Manjaro or Ubuntu compatible with Modi 3 USB?
 
Just posting a list of my DACs / USB sound cards that work on FreeBSD 12.x (recently tested on 12.2-RELEASE). These all work perfectly well for audio playback, and sound really good.


1.) M-Audio Fast Track (not the Pro model) [24bit up to 48kHz)
2.) Audient iD4 [32bit up to 96kHz]
3.) iFi Zen DAC Signature [32bit up to 384kHz]

2 and 3 I can confirm to work in bit-perfect mode, however 2 has serious caveat in full bit-perfect mode. 1 does not work in bit-perfect mode at all.

2 has an issue whereby the record (rec) vchan must be set to the same sample-rate (vchanrate) as the play channel, even in bitperfect mode, which is annoying and not realistically viable in full bit-perfect mode. I have yet to make a bug report for this. If the vchanrate of the rec channel does not match the vchanrate of the play channel, then the sound is distorted/garbled; the music can be heard, but sounds horrible. For bitperfect=0 this not a problem, just set the same vchanrate for both play and rec. But for bitperfect=1 on the play channel; I have to set bitperfect=0 on both channels, set the vchanrate of the rec channel to the same sample-rate that the play chanenel uses and change back to bitperfect=1. This workaround will only work in full bit-perfect mode if the PCM stream is the same samplerate as what we just set the vchanrate to. But in partial bit-perfect mode (vchans=1), whereby OSS is resampling to match the vchanrate and vchanformat, there is no problem as long as the rec vchanrate matches the play vchanrate. In short, if you want proper bit-perfect mode, it's best not buy this USB soundcard and instead buy a proper DAC which only has play channels and supports all the sample rates of your audio collection (I recommend 192kHz or above).

3 seems to work better using the older 5.20 firmware, which unfortunately I had to find a Windows machine to flash it from. MacOS can also be used to flash firmware to this device.

I highly recommend 2 and 3, depending on your budget. They are both available on the market as of the date of this post. 2 is an entry level proffessional grade audio production device (for a recording studio), which works well as DAC in no-bit-perfect mode. 3 is a high end DAC for Hi-Fi audiophiles, and one the best value for money DACs on the market as of writing. The original "Zen DAC" (not the Signature model) should also be good, and is about half the price of the Signature model that I have.

With the right settings in musicpd (MPD server), the audio quality is amazing. I have posted below the relevant sections of my configs for non-bitperfect-mode (still sounds great for my 96kHz/24bit and 192kHz/24bit FLACs). Note that whether using bitperfect mode or not, do not set the format variable in your musicpd.conf audio_output section; it seems to make musicpd use its own resampler, which is poor quality. FreeBSD's native OSS mixer / resampler (virtual channels) is far superior, especially if we set the sysctl hw.snd.feeder_rate_quality=4.

I have only tested these using PCM (Pulse Code Modulation) and not DSD (Direct Stream Digital).


/etc/sysctl.conf for 2:

Code:
# AUDIO
hw.snd.default_auto=0
hw.snd.default_unit=0
hw.snd.feeder_rate_quality=4
#hw.snd.maxautovchans=16
hw.snd.verbose=2
#hw.snd.vpc_0db=45
hw.snd.vpc_autoreset=0
hw.snd.vpc_mixer_bypass=0
dev.pcm.0.bitperfect=0
dev.pcm.0.play.vchans=8
dev.pcm.0.rec.vchans=8
dev.pcm.0.play.vchanformat=s32le:2.0
dev.pcm.0.rec.vchanformat=s32le:2.0
dev.pcm.0.play.vchanmode=passthrough
dev.pcm.0.rec.vchanmode=passthrough
dev.pcm.0.play.vchanrate=96000
dev.pcm.0.rec.vchanrate=96000

/etc/sysctl.conf for 3:

Code:
# AUDIO
hw.snd.default_auto=0
hw.snd.default_unit=0
hw.snd.feeder_rate_quality=4
#hw.snd.maxautovchans=16
hw.snd.verbose=2
#hw.snd.vpc_0db=45
hw.snd.vpc_autoreset=0
hw.snd.vpc_mixer_bypass=0
dev.pcm.0.bitperfect=0
dev.pcm.0.play.vchans=8
dev.pcm.0.play.vchanformat=s32le:2.0
dev.pcm.0.play.vchanmode=passthrough
dev.pcm.0.play.vchanrate=384000


/usr/local/etc/musicpd.conf:

Code:
audio_output {
    type        "oss"
    name        "USB DAC"
    #device      "/dev/dsp0.0"
    #format     "*:*:*"
    mixer_type  "software"
}
thank you for detailed feedback on your cards. the impression i have now is that not every USB card do work with bitperfect mode, which was a very frustrating experience for me as i expected it to be universal. i have shiit fulla2 usb dac, a half-decent card that was a presented to me by someone, i did not buy myself. i tried nearly everything to workaround bitperfect mode, but it's just not working, i getting white noise and that's all. other than that it plays quite well. so that means, various products do no follow uac2 usb standart and have some quirky usb or bitperfect mode with USB via uaudio have some limitations. Now that i planning to upgrade to better USB dac in future, i lost with choices which one would work with bitperfect as i don't want any resampling, mixing, etc. i reported this in https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=253160 so that anyone aware that USB dacs can be problematic in certain setups ( like bitperfect mode )
 
Hi, I'm having trouble getting my USB DAC working. I can't get /dev/dsp* to show up, but the USB DAC seem to be detected. I see the USB device in dmesg:
Code:
uaudio0 on uhub4
uaudio0: <iFi (by AMR) HD USB Audio> on usbus5
uaudio0: Play[0]: 384000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 352800 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 192000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 176400 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 96000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 88200 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 48000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: Play[0]: 44100 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
uaudio0: No recording.
uaudio0: No MIDI sequencer.
pcm0: <USB audio> on uaudio0
uaudio0: No HID volume keys found.

And here is the output of /dev/sndstat
Code:
$ cat /dev/sndstat
Installed devices:
pcm0: <USB audio> (play) default
No devices installed from userspace.

What do I need to do to get /dev/dsp* to show up?
 
Back
Top