Тут у меня случился диспут по поводу качества звука моего лаптопа. Пришлось перебрать по винтикам жизненный путь звука на нём. И вот что нашёл.
PulseAudio у меня выпилен, чистая ALSA, Audacious и т.д. Оказалось, что ALSA по умолчанию настроена так, что включен dmix (т.е. могут звучать несколько программ сразу), а частота дискретизации выставлена 48000. Это значит, что если кто-то хочет использовать устройство «default» и частоту не 48000, то ему придется делать передискретизацию. ALSA по умолчанию использует быстрый алгоритм из libsamplerate, имеющий полосу пропускания... всего 80%! Т.е. если у меня почти вся музыка в 44100, то реально на выходе будут только частоты до 18 кГц вместо примерно 21 кГц, не говоря уже о других артефактах и загрузке процессора. Этот режим хорош только для тех, у кого убоищная встроенная звуковуха может только 48000, а процессор тоже старый и слабый.
Есть как минимум три решения этой проблемы:
1) Использовать более качественный алгоритм, например, samplerate_medium или samplerate_best. Первый у меня жрет около трети ядра процессора Intel N3520. Второй - практически более 90%. Так что годится только для мощных процессоров. Делается просто - в ~/.asoundrc пишется:
#defaults.pcm.rate_converter "samplerate_best"
defaults.pcm.rate_converter "samplerate_medium"
#defaults.pcm.rate_converter "samplerate_linear"
#defaults.pcm.rate_converter "samplerate_order"
2) Использовать для музыки устройство не по умолчанию, например, «front», или как оно у вас в списке покажется в настойках Audacious или чем вы там слушаете музыку. Физически будет работать тот же DAC и тот же выход звука, но в обход передискретизации и dmix. При этом другие программы играть звук уже не смогут, устройство будет занято монопольно. Главное, чтобы реально звуковая карточка поддерживала хотя бы самые популярные 44100 и 48000. Некоторые карточки могут только 48000, для них способ не имеет смысла. И да, при этом способе - минимальный расход времени CPU и мощности.
3) Компромиссный вариант - просто поменять частоту дискретизации dmix с 48000 на 44100. Пишем в ~/.asounrdrc:
defaults.pcm.dmix.rate 44100
Я так и сделал. Теперь 99% всей музыки играется без передискретизации, оставшийся 1% приводится к скорости 44100 алгоритмом с полосой пропускания 90%:
defaults.pcm.rate_converter "samplerate_medium"
defaults.pcm.dmix.rate 44100
При этом сохраняется возможность играть звук из нескольких программ.