Приведенная ниже конфигурация хорошо справляется с моей ситуацией и основана на этом посте, который описывает нечто очень похожее. Я буду комментировать различные разделы , чтобы передать биты , которые я понимаю. Некоторые из них я не совсем понимаю, но я согласен, что они необходимы для того, чтобы все заработало. Пожалуйста, добавьте объяснения, если вы можете уточнить это:
Конфигурации ALSA представляют собой цепочку блоков, которые ссылаются друг на друга. Один блок передает набор аудиоканалов для обработки другим, ссылаясь на следующий блок в соответствии с меткой slave
. Первый тег в моей конфигурации указывает устройство по умолчанию, т.е. приложения аудиоустройства используют, если ничего не указано
pcm.!default "plug:upmix21"
Плагин upmix
смешивать входные каналы с разным количеством каналов. Здесь мы переходим с 2.0 на 5.1, поскольку плагин upmix
обрабатывает только n каналов, где n% 2 = 0, и потому что он позволяет мне избежать использования плагина route
который мне никогда не удавалось заставить работать
pcm.upmix21 {
type upmix
slave.pcm "lowpass_51to51_plug"
delay 0
channels 6
}
pcm.lowpass_51to51_plug
является синтаксической необходимостью, потому что кажется, что блок upmix21
принимает блоки типа plug
только как подчиненные .
pcm.lowpass_51to51_plug {
type plug
slave.pcm "lowpass_51to51"
}
Этот бит обрабатывает вызов фильтров LADSPA. Их довольно много. На Ubuntu, Raspian и т.д. Они поставляются с cmt
и swh-plugins
. Они могут быть использованы для всех видов вещей - ALSA только одна. При установке вы должны проверить, что path
указывает, где бы фильтры ladspa
в вашей системе.
В этой конфигурации я использую два плагина, на которые ссылаются их идентификаторы. 1098
- это сквозной фильтр, который просто копирует вход на выход, но без него каналы, не упомянутые специально, не получат звук. Синтаксис немного странный, потому что, хотя вы указываете только входной и выходной канал 0, все каналы копируются. Видимо, так оно и есть. Фильтр 1051 - это фильтр нижних частот, который принимает частоту кроссовера - в моем случае 120 Гц. Я применяю это к каналу 5, то есть к каналу LFE или сабвуфера в микшированном стереофоническом сигнале.
pcm.lowpass_51to51 {
type ladspa
slave.pcm "upmix_51to51_float"
path "/usr/lib/ladspa"
channels 6
plugins {
0 {
id 1098 # Identity (Audio) (1098/identity_audio)
policy duplicate
input.bindings.0 "Input";
output.bindings.0 "Output";
}
1 {
id 1051 # Low-pass filter.
policy none
input.bindings.5 "Input";
output.bindings.5 "Output";
input {
controls [ 120 ] # No higher than 120 Hz - nothing good.
}
}
}
}
Этот следующий бит я не совсем понимаю, но это необходимо - в противном случае ALSA скажет что-то о несовместимости форматов. По сути, мы устанавливаем аудиоформат на S16_LE
(стерео 16-битный low-endian?). Я думаю, что это уже установлено, но я согласен, что мне это нужно - пожалуйста, добавьте объяснение здесь, если можете.
pcm.upmix_51to51_float {
type lfloat
slave.pcm "21route"
slave.format "S16_LE"
}
Во время тестирования я фактически использовал настройку 5.1, чтобы выяснить, что работает, а что нет. Этот блок позволяет мне отключить каналы, которые я не хочу. Таблица ttable
содержит отображения в форме <input channel>.<output channel> <volume>
. На самом деле это последний блок, так как он подчинен - surround51
- устройство pcm, которое поставляется с моей звуковой картой ASUS Xonar U7. Проверьте aplay -l
и aplay -L
чтобы увидеть, как называются ваши устройства.
pcm.21route {
type route
slave.pcm "surround51"
ttable {
0.0 1 # left channel
1.1 1 # right channel
2.2 0 # mute
3.3 0 # mute
4.4 0 # mute
5.5 1 # sub channel
}
}
Вот и все. Я не знаю, сколько времени я потратил на это всего. Это был включенный и выключенный проект в течение длительного времени, но сейчас он действительно работает. Надеюсь, это поможет кому-то тратить на это меньше времени, чем я.
Как примечание, у меня есть mpd
и upmpdcli
работающие поверх этого на RasPi 2. Используя BubbleUPNP на Android и SWYH на Windows, это позволяет мне транслировать Google Music, мои собственные медиафайлы и почти все остальное в мою супер шикарную установку. Ура!
РЕДАКТИРОВАТЬ: То, что мне еще нужно сделать:
- У меня на самом деле нет регулятора громкости, который работает с BubbleUPNP еще. Мне нужно правильное определение ALSA
ctl
. На самом деле это не большая проблема - я просто использую alsamixer
чтобы увеличить громкость до 100% по умолчанию, а затем вручную (да, шокирующе) отрегулирую громкость на моем усилителе.
- Я хочу иметь возможность перенаправлять все аудио с моих устройств Android, но я могу сделать это только с помощью корневых устройств и платформы
Xposed
. Это работает очень хорошо, но я хочу быть в состоянии сделать это горе.
корень вещи.