151 lines
No EOL
5.6 KiB
Markdown
151 lines
No EOL
5.6 KiB
Markdown
---
|
|
creation date: 2022-01-08
|
|
tags: [note,audio,pipewire,pulse,pulseaudio,linux,archlinux]
|
|
---
|
|
|
|
* See [[KB/Linux/Desktop/Audio/pipewire.txt]] for packages
|
|
* See [[KB/Linux/Desktop/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="<MAIN SINK NAME> OR <sink_main from OPTIONAL STEP>" 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. |