I guess that most of you know about PulseAudio. Beautiful on paper, great in general, but nightmare for those who are not using out of the box supported devices. I for one, have pretty old, still pretty good M-Audio 24/96 in my home desktop. This card is performing well with Ardour and has everything one could ask for home demo recordings. Except of course for mic pre-amps, but those are relatively cheap as separate hardware..
Anyway. Since i switched over from windows back in ’05, this card and it’s “sisters” (1010 and others with ICE1712 chip) worked nicely and out of the box with current Alsas. But that was before PulseAudio. On those classic Alsa installs, the only real problem was that Flash-plugins from those days stole whole interface. Alsa needed killing before it could play anything else again.
Last night, i was trying to launch VirtualBox on my home machine running Fedora 15. With KDE4.5 – If you’re wondering, read my older post. Seemed that i had not installed all the needed modules, though i had ran it earlier. Tried to modprobe and so forth. With no success. Then i tried yum udate. This is where everything went straight to hell. I wasn’t aware that Fedora can and will change kernel in release. 38 changed to 40…
Reboot wouldn’t start it up. I used older kernel to get things going, and google’d the problem. With no real results. Since i’m not a big fan of KDE and even smaller fan of Gnome3, i did what i was thinking earlier. When everything fails – CentOS 6. Install was smooth. As can be expected.
Few things “negative” on CentOS 6 are: No latest, shiny features ore packages. Some basic tools need to be built, like Guake. On positive side, it features Gnome 2.28.2 and offers rock solid stability. First thing after the install you’ll probably want to:
yum install gconf-editor nano
to get rid of spatial file browsing and nano is still “the easy” editor. (I never understood the spatial file browsing…) Once i got everything mostly set up (setting repos for elrepo, rpmforge/repoforge, epel – installing kmod-nvidia, groupinstalled “Development Tools”, google-chrome-beta, falsh-plugin, jre and so on.), there was no sound. Surprise surprise. Since PulseAudio came along, no distribution (with gnome) has ever worked out of the box with ICE1712 cards. KDE’s Phonon has no problem with these cards. Sounds work straight away with latest Kubuntus and Fedora 15 with KDE. Of course. Since it’s using Phonon Instead PulseAudio. So i can safely assume, that the real problem is with Pulse.
I started looking for permanent fix sometime in 2007. There are still bug reports open on PulseAudio project for this chip. After hours of googling and trying different things out, the following (bubblegummy) three step solution is probably the easiest way to get sounds working with M-Audio 24/96 and/or ICE1712 on PulseAudio.
Step one – Edit /lib/udev/rules.d/90-pulseaudio.rules:
nano /lib/udev/rules.d/90-pulseaudio.rules
Append following:
SUBSYSTEMS=="pci", ATTRS{vendor}=="0x1412", ATTRS{device}=="0x1712", ATTRS{subsystem_vendor}=="0x1412", ATTRS{subsystem_device}=="0xd634", ENV{PULSE_PROFILE_SET}="m_audio-audiophile-2496.conf"
Step two – create/edit alsamixer-sets for ICE1712:
nano /usr/share/pulseaudio/alsa-mixer/profile-sets/m_audio-audiophile-2496.conf
Append following:
Profile 1
# This file is part of PulseAudio.
#
# PulseAudio is free software; you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation; either version 2.1 of the
# License, or (at your option) any later version.
#
# PulseAudio is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with PulseAudio; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
; M-Audio Delta Audiophile 2496
;
; This card, based on the Via ICE1712 chipset, has two stereo audio channels
; (1 in and 1 out) and a separate S/PDIF digital stereo channel. Like with
; all ICE1712-based cards, this is exposed by ALSA as a single 10-channel
; device with some of the channels not connected.
;
; See default.conf for an explanation on the directives used here.
[General]
auto-profiles = no
[Mapping analog-stereo-in]
description = Analog Stereo Input
device-strings = hw:%f,0
channel-map = front-left,front-right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7,aux8,aux9
direction = input
[Mapping analog-stereo-out]
description = Analog Stereo Output
device-strings = hw:%f,0
channel-map = front-left,front-right,aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7
direction = output
[Mapping analog-digital-stereo-out]
description = Analog/Digital Stereo Output
device-strings = hw:%f,0
channel-map = front-left,front-right,aux0,aux1,aux2,aux3,aux4,aux5,front-left,front-right
direction = output
[Mapping digital-stereo-out]
description = Digital Stereo Output
device-strings = hw:%f,0
channel-map = aux0,aux1,aux2,aux3,aux4,aux5,aux6,aux7,front-left,front-right
direction = output
[Mapping digital-stereo-in]
description = Digital Stereo Input
device-strings = hw:%f,0
channel-map = front-left,front-right,front-left,front-right,front-left,front-right,front-left,front-right,front-left,front-right,front-left,front-right
direction = input
[Mapping digital-stereo]
description = Digital Stereo Input/Output
#device-strings = hw:%f,1
device-strings = iec958:%f
channel-map = left,right
direction = any
[Profile output:stereo]
description = Analog Stereo Output
output-mappings = analog-stereo-out
input-mappings =
priority = 80
skip-probe = yes
[Profile output:stereo-da+input:stereo-analog]
description = Analog Stereo Input/Output
output-mappings = analog-stereo-out
input-mappings = analog-stereo-in
priority = 100
skip-probe = yes
[Profile output:stereo-da+input:stereo-analog]
description = Analog Stereo Input/Output, Digital Stereo Output
output-mappings = analog-digital-stereo-out
input-mappings = analog-stereo-in
priority = 90
skip-probe = yes
[Profile output:spdif]
description = Digital Stereo Output (Analog Disabled)
output-mappings = digital-stereo-out
input-mappings =
priority = 60
skip-probe = yes
[Profile output:spdif+input:spdif]
description = Digital Stereo Input/Output (Analog Disabled)
output-mappings = digital-stereo-out
input-mappings = digital-stereo-in
priority = 70
skip-probe = yes
Third step – Set another foolproof profile:
nano /usr/share/pulseaudio/alsa-mixer/profile-sets/via-ice1712.conf:
Append following:
Profile 2
; Via ICE1712 multi-channel audio chipset
[General]
auto-profiles = no
[Mapping analog-mch-in]
description = Analog Multi-Channel Main Input
device-strings = hw:%f,0
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right,aux0,aux1,aux2,aux3
direction = input
[Mapping analog-mch-out]
description = Analog Multi-Channel Main Output
device-strings = hw:%f,0
channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right,aux0,aux1
direction = output
[Mapping digital-stereo]
description = Digital Stereo Input/Output
#device-strings = hw:%f,1
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
Restarting Pulse with “pulseaudio -k” should be enough to get things going. Reboot will do the same. And logout/login should also do the same.
There are many ways to get this working, but this is the one way that i have done this on several distributions – including Ubuntu Karmic -> Ubuntu Natty, Fedora 13/14/15 and now CentOS6.
Please note, that these files may be overwritten in case of pulseaudio’s update. And probably another note worthy point is that i’m runnin x86_64 systems. Don’t see any reason why this should not work on i686 systems also.
Almost forgot. You’ll want to install alsa-utils package. That provides envy24control – the gui for setting your channels to something else than default. Which is mute.