A configuração abaixo lida com a minha situação e está baseada em esta postagem que descreve algo muito semelhante. Vou comentar sobre as diferentes seções para transmitir os bits que eu faço entender. Algumas delas, eu realmente não entendo, mas eu aceito que elas são necessárias para fazer as coisas funcionarem. Por favor, adicione explicações, se você é capaz de refinar mais sobre isso:
As configurações do ALSA são basicamente uma cadeia de blocos que se referem uns aos outros. Um bloco transfere um conjunto de canais de áudio para serem processados por outro referindo-se ao próximo bloco alinhado com a tag slave
. A primeira tag na minha configuração especifica o dispositivo padrão, ou seja, os aplicativos do dispositivo de áudio são usados se nada for especificado
pcm.!default "plug:upmix21"
O plug-in upmix
manipula a mixagem dos canais de entrada para um número diferente de canais. Aqui, nós passamos de 2.0 para 5.1, já que o upmix
plugin manipula n canais onde n% 2 = 0 e porque me permite evitar usar um plugin route
que eu nunca consegui trabalhar
pcm.upmix21 {
type upmix
slave.pcm "lowpass_51to51_plug"
delay 0
channels 6
}
O pcm.lowpass_51to51_plug
é uma necessidade sintática porque o bloco upmix21
parece aceitar apenas blocos de tipo plug
como escravos.
pcm.lowpass_51to51_plug {
type plug
slave.pcm "lowpass_51to51"
}
Esse bit lida com a chamada dos filtros LADSPA. Existem alguns deles. No Ubuntu, no Raspian e assim por diante, eles vêm com os pacotes cmt
e swh-plugins
. Eles podem ser usados para todos os tipos de coisas - a ALSA é apenas uma. Em sua instalação, você deve verificar se path
aponta para onde os filtros ladspa
residem em seu sistema.
Nesta configuração, eu uso dois plugins, referidos por seus IDs. 1098
é um filtro de passagem que apenas copia a entrada para a saída, mas sem ela, os canais não mencionados especificamente não receberão som algum. A sintaxe é um pouco estranha, porque mesmo que você especifique apenas o canal de entrada e saída 0, todos os canais são copiados. É assim que funciona, aparentemente. Filtro 1051 é um filtro de baixa passagem que aceita uma frequência de crossover - 120Hz no meu caso. Aplico-o ao canal 5, ou seja, o canal LFE ou subwoofer no sinal estéreo upmixed.
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.
}
}
}
}
Este próximo bit eu não entendo muito, mas é necessário - caso contrário, ALSA vai vomitar, dizendo algo sobre incompatibilidade de formato. Basicamente, definimos o formato de áudio para S16_LE
(estéreo de 16 bits low-endian?). Eu acho que isso já foi estabelecido, mas eu aceito que eu precise disso - por favor, adicione uma explicação aqui, se puder.
pcm.upmix_51to51_float {
type lfloat
slave.pcm "21route"
slave.format "S16_LE"
}
Como eu estava testando, eu realmente usei uma configuração 5.1 para descobrir o que funcionava e o que não funcionava. Esse bloco me permite silenciar canais que não quero. O ttable
contém os mapeamentos no formato <input channel>.<output channel> <volume>
. Este é realmente o bloco final, já que o slave é surround51
- um dispositivo pcm que vem com minha placa de som ASUS Xonar U7. Verifique aplay -l
e aplay -L
para ver como seus dispositivos são chamados.
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
}
}
É isso. Eu não sei quanto tempo eu gastei com isso no total. Tem sido um projeto ligado e desligado por um longo tempo, mas agora está realmente funcionando. Espero que isso ajude alguém a gastar menos tempo com isso do que eu.
Como nota de rodapé, tenho mpd
e upmpdcli
sendo executado em cima disso em um RasPi 2. Usando o BubbleUPNP no Android e o SWYH no Windows, isso me permite transmitir o Google Music, minha própria mídia e quase qualquer outra coisa para minha configuração super chique. Yay!
EDITAR: coisas que ainda preciso fazer:
- Na verdade, não tenho um controle de volume que funcione com o BubbleUPNP
ainda. Eu preciso de uma definição adequada ALSA
ctl
. Na verdade, não é um grande problema - eu apenas usoalsamixer
para aumentar o volume para 100% por padrão - então eu manualmente (sim, chocante) ajuste o volume no meu amplificador. - Eu quero redirecionar todo áudio dos meus dispositivos Android,
mas eu só posso fazer isso usando dispositivos enraizados e o
Xposed
estrutura. Isso funciona muito bem, mas eu quero ser capaz de fazer isso. o material da raiz.