======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}}