--- creation date: 2022-01-08 tags: [note,audio,pipewire,pulse,pulseaudio,linux,archlinux] --- * See [[KB/Linux/Desktop/ArchLinux/Audio/pipewire.txt]] for packages * See [[KB/Linux/Desktop/ArchLinux/Audio/pulseaudio.txt]] for packages This document outlines how to get a decent audio setup utilizing a headphone EQ called _dsp_. It's targeted for Linux machines, but use [EqualizerAPO](https://equalizerapo.com/) to similarly use headphones EQ presets. See `HiFi 24bit and 192kHz Music Downloads are Very Silly Indeed` why not more than 44.1 kHz is needed. The following will not enforce 44.1kHz though. ## Why? A target curve T has been tested and be found most comfortable listening to. Try to get each Headphones with EQ settings near that curve T. [EQ presets for a lot of headphones](https://www.reddit.com/r/oratory1990/wiki/index/list_of_presets). ## How-to for Linux Baseline for this is the [following website](https://forum.level1techs.com/t/improving-linux-audio-updated/134511). ### With PipeWire Use `PulseEffects` (X.org) or `Easy Effects` (Wayland) presets for EQ settings and _enable auto-start_. Make sure that `lsp-plugins` is installed for `EasyEffects`. There are some very convenient settings you probably want to set. * Handle suspend (globally in `/etc` or as drop-ins in `~/config/...`) * In `/etc/pipewire/media-session.d/media-session.{conf|confpause}` comment out `suspend-node` to enable suspending feature * In Wireplumber or `/etc/pipewire/media-session.d/alsa-monitor.conf` set a timeout so that your DAC/output device is able to always receive a signal if you like. ```shell node.pause-on-idle = false session.suspend-timeout-seconds = 0 # or any number as seconds ``` * If you like, set a default _sample rate_ in `/etc/pipewire/pipewire.conf`, e.g. for 44.1kHz ```shell default.clock.rate = 44100 default.clock.allowed-rates = [ 44100 ] ``` * Use `systemctl --user restart wireplumber.service pipewire.service pipewire-pulse.service` to restart PipeWire ### With PulseAudio * Allow direct communication to device for PulseAudio. Edit ALSA configuration `/etc/asound.conf`. ```shell # Use PulseAudio plugin hw pcm.!default { type plug slave.pcm hw } ``` * (**OPTIONAL, DO IF YOU WANT A REMAPPED VERSION OF MAIN AUDIO DEVICE IN sink_name=**) Add some _default_ sink names (remap them) in PulseAudio `/etc/pulse/default.pa`. Use `pacmd list-sinks` and `pacmd list-sources` to list your devices and insert as _master_ below. Any user could use `sink_main` and `src_microphone` instead of the specific device as `sink_name=`. This is **OPTIONAL** if you use direct sink name in any user specific file later instead of "sink_main" and "src_microphone" ```shell # create remapped sink/sources with proper names and description # pacmd list-sinks load-module module-remap-sink sink_name="sink_main" master="alsa_output.pci-0000_31_00.4.iec958-stereo" sink_properties=device.description="Toslink" remix=no # pacmd list-sources load-module module-remap-source source_name="src_microphone" master="alsa_input.usb-Samson_Technologies_Samson_Meteor_Mic-00.analog-stereo" source_properties=device.description="Microphone" remix=no ``` * Adapt `.config/pulse/daemon.conf` ```shell flat-volumes = no default-sample-channels = 2 default-channel-map = front-left,front-right default-sample-format = s32ne ;default-sample-rate = 44100 ;alternate-sample-rate = 44100 ;resample-method = speex-float-10 enable-lfe-remixing = no high-priority = yes nice-level = -11 realtime-scheduling = yes realtime-priority = 9 rlimit-rtprio = 9 ``` #### EQ Install [dsp](https://github.com/bmc0/dsp). Create and adapt configuration for dsp. See example below. Use EQ presets for your headphones. * Basic file structure ```shell .config/ladspa_dsp ├── config_beyerdynamic_dt1990 └── eq └── beyerdynamic_dt1990.conf ``` * The main configuration for an additional Pulse sink `.config/ladspa_dsp/config_beyerdynamic_dt1990` ```shell LC_NUMERIC=C effects_chain=@eq/beyerdynamic_dt1990.conf ``` * The EQ settings derived from the target curve found for your headphones, e.g. `.config/ladspa_dsp/eq/beyerdynamic_dt1990.conf` ```shell # Beyerdynamic DT 1990 # preamp gain gain -4.0 lowshelf 90 0.7q +4.0 eq 220 0.7q -3.4 ... ``` * Add a new sink _based on above remapped sink_main_ for the EQ present in `.config/pulse/default.pa` (also some other reasonable default settings) ```shell # load system defaults .include /etc/pulse/default.pa # unload the cork stuff .nofail unload-module module-role-cork .fail # unload the idle suspend stuff .nofail unload-module module-suspend-on-idle .fail # dsp EQ stuff for various headphones .ifexists module-ladspa-sink.so .nofail load-module module-ladspa-sink sink_name=dsp_beyerdynamic_dt1990 sink_master="
OR " plugin=ladspa_dsp label=ladspa_dsp:beyerdynamic_dt1990 sink_properties=device.description="Beyerdynamic\ DT\ 1990\ Pro" .fail .endif ``` * Restart PulseAudio, so that the new sink appears. In your settings, select the newly added DSP sink as default one. Maybe restart device. #### Linux troubleshooting * Something weird going on? Delete anything **except for configuration files** in `.config/pulse/`. * Restarting when changing anything in PulseAudio configuration is highly recommended as some applications might not be able to handle restarting audio system.