Differences between version 3 and previous revision of KnowledgeBase/AlsaEqual.
Other diffs: Previous Major Revision, Previous Author
| Newer page: | version 3 | Last edited on Sunday, 16 September 2012 1:18:19 | by CyberLeo | Revert |
| Older page: | version 2 | Last edited on Saturday, 15 September 2012 23:02:27 | by CyberLeo | Revert |
@@ -1,34 +1,69 @@
+*Note:* The alsaequal package does not support multilib, so configuring it on a 64-bit platform will lock out 32-bit programs. With the below asound.conf/asoundrc, you should be able to run these without equalization by setting the environment variable 'ALSA_ASYM_PLAY' to 'dmix' (or 'null' if you want to silence them completely).
+
Install media-plugins/alsaequal
Configure thus:
/etc/asound.conf:
<code brush="plain">
-# Set default card and device; check
/proc/asound/cards for the names to use
in !card :
+# Set the
default backend
card and device to the onboard Intel HDA codec
; see
+#
/proc/asound/cards for the names of the cards
in the system.
defaults.pcm.!card PCH
defaults.ctl.!card PCH
defaults.pcm.!device 0
defaults.ctl.!device 0
+# Equalizer definition, uses dmix internally; use amixer in a script to adjust
+# the equalizer boost/cut levels, or use the following command to adjust the
+# levels interactively.
+#
+# alsamixer -D equal
+#
ctl.equal {
type equal;
}
-
-
pcm.plugequal
{
+pcm.equal
{
type equal;
- # 32-bit programs will fail because they can't load 64-bit ladspa plugins; point to both in order:
- path "/usr/lib64/ladspa;/usr/lib32/ladspa";
slave.pcm "plug:dmix";
}
-pcm
.equal {
- type plug;
-
slave.pcm plugequal;
-}
+
+# The alsaequal plugin is not compatible with 32-bit programs on amd64, so it
+# will crash them with the following message:
+#
+# Failed to load plugin "/usr/lib/ladspa/caps
.so": /usr/lib/ladspa/caps.so: wrong ELF class: ELFCLASS64
+#
+# To get around this, the asymed definition takes two parameters: PLAY and
+# CAPT, to direct the slave PCMs. These are controlled either by arguments
+# in the slave definition (i.e.
slave.pcm "asymed:dmix,dsnoop" ), or by
+# environment variables (ALSA_ASYM_PLAY=dmix ALSA_ASYM_CAPT=dsnoop aplay ...)
pcm.asymed {
+ @args [ PLAY CAPT ]
+ @args.PLAY {
+ type string
+ default {
+ @func getenv
+ vars [
+ ALSA_ASYM_PLAY
+ ]
+ default "equal"
+ }
+ }
+ @args.CAPT {
+ type string
+ default {
+ @func getenv
+ vars [
+ ALSA_ASYM_CAPT
+ ]
+ default "dsnoop"
+ }
+ }
type asym;
- playback.pcm "plugequal"
;
- capture.pcm "dsnoop"
;
+ playback.pcm $PLAY
;
+ capture.pcm $CAPT
;
}
+
+# Set the default playback device to the above asymed soft-device
pcm.!default {
type plug;
slave.pcm asymed;
}
version 3
Note: The alsaequal package does not support multilib, so configuring it on a 64-bit platform will lock out 32-bit programs. With the below asound.conf/asoundrc, you should be able to run these without equalization by setting the environment variable 'ALSA_ASYM_PLAY' to 'dmix' (or 'null' if you want to silence them completely).
Install media-plugins/alsaequal Configure thus:
/etc/asound.conf:
# Set the default backend card and device to the onboard Intel HDA codec; see
# /proc/asound/cards for the names of the cards in the system.
defaults.pcm.!card PCH
defaults.ctl.!card PCH
defaults.pcm.!device 0
defaults.ctl.!device 0
# Equalizer definition, uses dmix internally; use amixer in a script to adjust
# the equalizer boost/cut levels, or use the following command to adjust the
# levels interactively.
#
# alsamixer -D equal
#
ctl.equal {
type equal;
}
pcm.equal {
type equal;
slave.pcm "plug:dmix";
}
# The alsaequal plugin is not compatible with 32-bit programs on amd64, so it
# will crash them with the following message:
#
# Failed to load plugin "/usr/lib/ladspa/caps.so": /usr/lib/ladspa/caps.so: wrong ELF class: ELFCLASS64
#
# To get around this, the asymed definition takes two parameters: PLAY and
# CAPT, to direct the slave PCMs. These are controlled either by arguments
# in the slave definition (i.e. slave.pcm "asymed:dmix,dsnoop" ), or by
# environment variables (ALSA_ASYM_PLAY=dmix ALSA_ASYM_CAPT=dsnoop aplay ...)
pcm.asymed {
@args [ PLAY CAPT ]
@args.PLAY {
type string
default {
@func getenv
vars [
ALSA_ASYM_PLAY
]
default "equal"
}
}
@args.CAPT {
type string
default {
@func getenv
vars [
ALSA_ASYM_CAPT
]
default "dsnoop"
}
}
type asym;
playback.pcm $PLAY;
capture.pcm $CAPT;
}
# Set the default playback device to the above asymed soft-device
pcm.!default {
type plug;
slave.pcm asymed;
}
Use 'alsamixer -D equal' to change the equalizer settings; they will be saved and restored by the OS boot scripts just like any other soundcard volume setting.
And here's a way to switch presets:
#!/bin/sh
# Mine: "80 74 68 66 66 66 64 62 58 56"
# Flat: "65 65 65 65 65 65 65 65 65 65"
set_equalizer_curve() {
curve="${*}"
ctl=0
for point in ${curve}
do
ctl=$(( ${ctl} + 1 ))
echo cset numid=${ctl} ${point}
done | amixer -D equal -s
}
profile="${1:-mine}"
case "${profile}" in
mine) curve="80 74 68 66 66 66 64 62 58 56" ;;
flat) curve="65 65 65 65 65 65 65 65 65 65" ;;
*) echo "Unknown profile ${profile}" >&2 ;;
esac
[ "${curve}" ] && set_equalizer_curve "${curve}"
