SND_HDSPE(4)

πŸ“¦
version 15.1 Β· 2 versions
, in freebsd 15.1, nixpkgs unstable

✨ snd_hdspe β€” RME HDSPe bridge device driver ✨

okay bestie so this whole page is SND_HDSPE(4) from the Kernel Interfaces Manual, and it's literally about making bougie German audio hardware work on your machine. let's get into it πŸ’…


🌸 NAME 🌸

snd_hdspe β€” the RME HDSPe bridge device driver. that's it, that's the vibe πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

so if you wanna bake this driver right into your kernel (main character energy, love that for you), you drop these lines into your kernel configuration file:

device sound
device snd_hdspe

or, if you'd rather load it as a module at boot time (lowkey more chill ngl), put this line in loader.conf(5):

snd_hdspe_load="YES"

either way, sound is happening πŸ’–


πŸ‘‘ DESCRIPTION πŸ‘‘

the snd_hdspe bridge driver is literally the matchmaker πŸ’ž β€” it lets the generic audio driver sound(4) attach to RME HDSPe audio devices. bridge driver doing bridge things, we stan a connector.


🎧 HARDWARE 🎧

here's the hardware glow-up list β€” the snd_hdspe driver supports these audio devices:

  • RME HDSPe AIO (with optional AO4S-192 and AI4S-192 extension boards) πŸŽ€
  • RME HDSPe RayDAT 🌈

by default, each pcm(4) device corresponds to a physical port on the sound card. for ADAT ports, the 8 channel, 4 channel and 2 channel formats are supported. the effective number of ADAT channels is 8 channels at single speed (32kHz-48kHz), 4 channels at double speed (64kHz-96kHz), and 2 channels at quad speed (128kHz-192kHz). depending on the sample rate and channel format you picked, not all pcm channels can be mapped to ADAT channels and vice versa β€” so like, some combos just don't line up, no cap 😭


🧚 LOADER TUNABLES 🧚

these settings can be entered at the loader(8) prompt or in loader.conf(5). very set-it-up-front, very prepared queen πŸ’…

  • hw.hdspe.unified_pcm β€” if you set this to 1, all physical ports get combined into one unified pcm device. when it's opened in multi-channel audio software, this makes all ports available at the same time, and fully synchronized β€” like a group chat where everyone actually shows up 🫢 for the resulting channel numbers, consult the following:
    • HDSPe AIO β€” single speed: play 20 | rec 18; double speed: play 16 | rec 14; quad speed: play 14 | rec 12
    • HDSPe RayDAT β€” single speed: play 36 | rec 36; double speed: play 20 | rec 20; quad speed: play 12 | rec 12

⭐ SYSCTL TUNABLES ⭐

these settings and informational values can be accessed at runtime with the sysctl(8) command. if multiple RME HDSPe sound cards are installed, each device has a separate configuration β€” every card gets its own personality, iconic πŸ’– to adjust the following sysctl identifiers for a specific sound card, insert the respective device number in place of 0.

  • dev.hdspe.0.sample_rate β€” set a fixed sample rate from 32000, 44100, 48000, up to 192000. this is usually required for digital connections (AES, S/PDIF, ADAT). the default value of 0 adjusts the sample rate according to pcm device settings.
  • dev.hdspe.0.period β€” the number of samples processed per interrupt, from 32, 64, 128, up to 4096. setting a lower value here results in less latency, but increases system load due to frequent interrupt processing. extreme values may cause audio gaps and glitches β€” so like, don't be extra about it 😭
  • dev.hdspe.0.clock_list β€” lists possible clock sources to sync with, depending on the hardware model. this includes internal and external master clocks as well as incoming digital audio signals like AES, S/PDIF and ADAT.
  • dev.hdspe.0.clock_preference β€” select a preferred clock source from the clock list. HDSPe cards will sync to this clock source when available, but fall back to auto-sync with any other digital clock signal they receive. set this to internal if the HDSPe card should act as master clock πŸ‘‘
  • dev.hdspe.0.clock_source β€” shows the actual clock source in use (read only). this differs from what is set as clock preference when in auto-sync mode. it's giving "who am i really" πŸ¦‹
  • dev.hdspe.0.sync_status β€” display the current sync status of all external clock sources. status indications are none for no signal at all, lock for when a valid signal is present, and sync for accurately synchronized signals (required for recording digital audio). three moods, all valid πŸ’€

the following tunables are applicable to HDSPe AIO devices only:

  • dev.hdspe.0.input_level β€” select the sensitivity of the analog line input. available reference levels for the input signal are LowGain, +4dBu and -10dBV.
  • dev.hdspe.0.output_level β€” select the gain level of the analog line output. available reference levels for the output signal are HighGain, +4dBu and -10dBV.
  • dev.hdspe.0.phones_level β€” adjust the gain level of the phones output, separately from the analog line output. available reference levels for the output signal are HighGain, +4dBu and -10dBV. headphones doing their own thing, we love independence 🎧

where appropriate these sysctl values are modeled after official RME software on other platforms, and adopt their terminology. consult the RME user manuals for additional information 🫢


πŸ”₯ SEE ALSO πŸ”₯


🌈 HISTORY 🌈

the snd_hdspe device driver first appeared in FreeBSD 10.0. elder emoji moment, respect the OG ⭐


🫢 AUTHORS 🫢

the snd_hdspe driver was written by Ruslan Bukin <br@bsdpad.com>. Florian Walpen <dev@submerge.ch> contributed clock source settings and restructured the pcm device mapping β€” clock icon behavior fr fr πŸ’œ


and that's the whole page bestie!! this one's from Debian, dated November 2, 2024, page SND_HDSPE(4) β€” go forth and make beautiful synchronized audio, mwah πŸ’‹πŸŽ€

πŸ“¦ where this page comes from