When I built my previous Linux workstation in 2007, I equipped it with a M-Audio Audiophile 2496 professional audio card. I was very pleased with its quality – superb sound, excellent recording capabilities, S/PDIF and MIDI in/out, and proper RCA connectors instead of the standard crappy 3,5mm jack sockets. Even my untrained ear could hear the difference in sound quality between M2496 and the motherboard’s built-in sound card. It worked excellently with both ALSA and Jack-Audio-Connection-Kit, and as the system was using Gentoo Linux, I was able to keep the system Pulseaudio-free until the end of its lifespan.
I built my current AMD Ryzen-based workstation some 2,5 years ago, and I really wanted to continue using the M2496 card somehow. However, there were two issues: first, the card uses an older PCI bus connector, which isn’t supported on modern motherboards any more (unless you use a some kind of PCI-to-PCIe adapter; not applicable in my case anyway, the water cooling takes too much space).
My solution was to buy an used Intel Atom-based Mini-ITX motherboard with a spare PCI connector, and use it with the M2496 card as an Arch Linux-based sound server. Because you cannot really avoid Pulseaudio on modern Linux desktops any more, I decided to use Pulseaudio’s RTP-based streaming solution between the desktop and the sound server.
And that brings us to the second issue: M-Audio 2496 and other ICE1712-based cards does not work with Pulseaudio out of the box. No sound, period.
There’s an open, unresolved bug report on this from more than 10 years ago… quite incomprehensible. I know that Lennart Poettering hates ICE1712-based sound cards, but this is still too much… Well, it just means that M-Audio users need to do everything the hard way, manually editing and creating configuration files.
- Make sure that M-Audio is set as the default sound card (usually it is set as a secondary card, check with
aplay -l
.): create/edit the file/etc/modprobe.d/alsa-base.conf
and reboot:
options snd_ice1712 index=0
options snd_hda_intel index=1
- Add a new rule to
/lib/udev/rules.d/90-pulseaudio.rules
(this will be overwritten by an update, so make a backup):
LABEL="pulseaudio_check_pci" + # M-Audio Audiophile 2496 + # ICE1712 + ATTRS(vendor)=="0x1412", ATTRS(device)=="0x1712", ENV(PULSE_PROFILE_SET)="via-ice1712.conf"
The
vendor
-string may be different on other ICE1712 cards, please check withlspci -nn
. - Finally, create a profile definition in
/usr/share/pulseaudio/alsa-mixer/profile-sets/via-ice1712.conf
; Via ICE1712 multi-channel audio chipset ; ; This chipset has up to four stereo pairs of input and four stereo pairs of ; output, named channels 1 to 8. Also available are separate S/PDIF stereo ; channels (input and output), and a separate "system-out" stereo jack that ; supports 6-channel hardware mixing. ; ; The S/PDIF stereo channels can be controlled via the mixer for hw:0, and ; additionally, the 8 main outputs can be loop-routed to a separate stereo ; input pair, available as channels 11 and 12. ; ; Many cards available from vendors do not expose all channels from this chip ; to an external port, which effectively reduces the number of channels that ; are useful to the user. However, the ALSA driver still exposes all channels ; even if they are not connected. ; ; We knowingly only define a subset of the theoretically possible ; mapping combinations as profiles here. ; ; See default.conf for an explanation on the directives used here. [General] auto-profiles = no [Mapping analog-mch-in] description = Analog Multi-Channel Main Input device-strings = hw:%f,0 channel-map = aux0,aux1,front-left,front-right,aux2,aux3,aux4,aux5,aux6,aux7,aux8,aux9 direction = input [Mapping analog-mch-out] description = Analog Multi-Channel Main Output device-strings = hw:%f,0 channel-map = front-left,front-right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7 direction = output [Mapping digital-stereo] description = Digital Stereo Input/Output device-strings = iec958:%f channel-map = left,right direction = any [Mapping analog-system-out] description = Analog Stereo System-Out device-strings = hw:%f,2 channel-map = left,right direction = output [Profile output:mch] description = Multi-Channel Output Active (Digital Disabled) output-mappings = analog-mch-out analog-system-out input-mappings = priority = 90 skip-probe = yes [Profile output:mch+input:mch] description = Multi-Channel Input/Output (Digital Disabled) output-mappings = analog-mch-out analog-system-out input-mappings = analog-mch-in priority = 100 skip-probe = yes [Profile output:spdif] description = Digital Output (Multi-Channel Disabled) output-mappings = digital-stereo analog-system-out input-mappings = priority = 80 skip-probe = yes [Profile output:spdif+input:spdif] description = Digital Input/Output (Multi-Channel Disabled) output-mappings = digital-stereo analog-system-out input-mappings = digital-stereo priority = 90 skip-probe = yes [Profile output:system] description = System Output Only output-mappings = analog-system-out input-mappings = priority = 60 skip-probe = yes
- Restart Pulseaudio:
pulseaudio -k pulseaudio --start
The original source for the Pulseaudio fix can be found here.