======ALSA-only audio on Linux======
this is a guide on how to setup ALSA to be enjoyable by itself without an audio server.
I will be showing changes to ///etc/asound.conf// as to effect all users (including daemons such as MPD). you can also use //~/.asoundrc// for setup specific to your user.
=====devices=====
multiple commands can list available audio cards and devices.
**alsactl** can be used:
$ alsactl info 1
#
# Sound card
#
- card: 1 # card number.
id: sofhdadsp
name: sof-hda-dsp
longname:
driver_name: sof-hda-dsp
mixer_name: Realtek ALC233
components:
controls_count: 54
pcm:
- stream: PLAYBACK
devices:
- device: 1 # device number.
id: HDA Analog (*) # name.
name:
subdevices:
- subdevice: 0
name: subdevice #0
...
by default //alsactl info// will show card 0. you most likely have multiple cards.
**aplay** will also list sound cards and devices.
$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA ATI HDMI], device 0: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
...
card 1: sofhdadsp [sof-hda-dsp], device 1: HDA Analog (*) []
Subdevices: 1/1
Subdevice #0: subdevice #0
...
card 1 and device 1 will be used for this guide. in most places, this is specified with **"hw:1,1"**. the first number is the card and the second is the device.
=====mixing=====
[[https://www.alsa-project.org/wiki/Asoundrc#dmix|dmix]] is a software mixer for audio output. it will allow multiple programs to simultaneously play sound at the same time.
in //asound.conf//, the following configuration could be used to create a software mixer that can be accessed by multiple users.
pcm.mixer {
type dmix
ipc_key 1024
ipc_key_add_uid false # remove these two lines to only allow
ipc_perm 0666 # one user to use the mixer at a time.
slave {
pcm "hw:1,1" # hardware output device to use.
}
}
pcm.!default plug:mixer # set the default device to the mixer.
=====S/PDIF multichannel=====
the **a52** alsa plugin can be used to output Dolby Digital 5.1 (or lower) multichannel audio through S/PDIF.
you must have the plugin installed. look in your distribution's repositories for a package similar to "alsa-plugins". it may be in a separate package such as "alsa-plugins-a52", as on Alpine Linux.
here is an example configuration:
pcm.surround {
type a52
slavepcm "hw:1,1"
channels 6
bitrate 1000
rate 48000
format S16_LE
}
=====equalization=====
[[https://github.com/bassdr/alsaequal|alsaequal]] is a 10-band software equalizer in the form of an ALSA plugin.
each user has their own persistent settings, stored in //~/.alsaequal.bin//. if, for example, you are running MPD as its own mpd user, you must either copy or link the //alsaequal.bin// file to its home directory, or manually configure it seperately.
the following configuration builds on the previous section on dmix. an asoundrc using solely alsaequal can be very simple.
pcm.dmix_stereo {
type dmix
ipc_key 1024
ipc_key_add_uid false
ipc_perm 0666
slave {
pcm "hw:1,1"
period_time 0
period_size 1024
buffer_size 4096
rate 48000
}
bindings { # channel configuration (stereo, quad, 5.1, ...).
0 0
1 1
}
}
pcm.plug_eq_stereo {
type equal
slave.pcm "plug:dmix_stereo"
}
pcm.eq_stereo { # this plug is needed to make the alsaequal output suitable for use by most applications.
type plug
slave.pcm "plug_eq_stereo"
}
ctl.eq_stereo { # this ctl is what allows adjustment in alsamixer (or similar utilities).
type equal
}
pcm.!default eq_stereo
with this configuration, the equalizer can be changed with ctl **eq_stereo**:
alsamixer -D eq_stereo
====multichannel====
here is an example of using alsaequal with **a52**.
...
pcm.surround {
type a52
slavepcm "hw:1,1"
channels 6
bitrate 1000
rate 48000
format S16_LE
}
pcm.plug_eq_surround {
type equal
channels 6 # changes channel configuration to 5.1.
controls ".alsaequal.surround.bin" # sets the control information file to at ~/.alsaequal.surround.bin. this must be changed if there are to be multiple alsaequals of differing channel configurations.
slave.pcm "plug:surround"
}
pcm.eq_surround {
type plug
slave.pcm "plug_eq_surround"
}
ctl.eq_surround {
type equal
channels 6
controls ".alsaequal.surround.bin"
}
...
the surround equalizer can be changed with ctl **eq_surround** using this configuration.
{{tag>audio alsa linux}}