Como envio minha saída de áudio por meio de um filtro passa-alto no ALSA?

3

Eu moro em um duplex, e meu vizinho pode ouvir minha música se tiver algum baixo nele. Como solução, quero configurar o ALSA para aplicar um filtro de alta freqüência ao áudio que sai pelos alto-falantes (mas não pelos fones de ouvido). Como faço isso?

    
por Metamorphic 30.11.2016 / 00:11

1 resposta

3

Aqui está a seção relevante do meu ~/.asoundrc . Eu tenho meus alto-falantes conectados a um dispositivo de áudio USB que aparece como hw:3 para ALSA. Na minha configuração pessoal, já existe um dispositivo hw3mix , conforme descrito aqui , que mistura vários fluxos de clientes no hw:3 . Outras opções são possíveis, conforme mostrado nas linhas comentadas:

pcm.hw3highpass {
    type ladspa
    slave.pcm "plug:hw3mix";
    # you can choose a different hardware device (no mixing) like this:
#    slave.pcm "plughw:0,0";
    # and you can even specify basic mixing in the same line:
#    slave.pcm "plug:dmix:0"

    # but note that the following doesn't work, we need 'plug' to
    # convert to/from floating point
#    slave.pcm "hw3mix";

    path "/usr/lib/ladspa";
    plugins [{
        label hpf
        input {
            controls [ 1000 ]
        }
    }]
    hint {
        show on
        description "Highpass filter for hw:3"
    } 
}

pcm.!default plug:hw3highpass

O filtro passa-alta é um plug-in LADSPA (rótulo hpf ). Outros plugins estão disponíveis que podem ser úteis em minha situação de vida, por exemplo, para adicionar um compressor .

O plugin plug , que invoco duas vezes, é um plugin mágico que faz a conversão automática de formato. É necessário fazer interface com o LADSPA, que quer ponto flutuante. Você pode ver a cadeia de filtros e observar o fato de que a conversão de ponto flutuante está sendo feita, executando o comando aplay -v some.wav . Sem um prefixo plug: na definição% escravo hw3mix você obtém uma mensagem de erro obscura "ALSA lib pcm_params.c: 2162: (snd1_pcm_hw_refine_slave) Slave PCM não utilizável". Sem plug: no alias padrão na última linha, você recebe outra mensagem de erro obscura "aplay: set_params: 1292: tipo de acesso não disponível". Yay Linux!

Estou perguntando e respondendo a minha própria pergunta porque a documentação da ALSA era incompreensível, e outras soluções que encontrei na rede foram desnecessariamente complicadas - usando uma% numérica id em vez de label para a seção de plugins LADSPA; ou definir dois dispositivos nomeados extras para fazer a conversão de número inteiro flutuante < - & gt ;, em vez de usar o prefixo plug: como mostrado aqui; ou não mencionar a possibilidade de aliasing diretamente para um dispositivo plug:... como eu faço na última linha. Fiquei surpreso ao descobrir como a configuração é simples e como a ALSA / LADSPA é útil e poderosa, uma vez que se entende o básico.

Eu encontrei o tutorial do Volker Schatz "Um olhar atento sobre a ALSA" indispensável para descobrir algumas dessas coisas . Aparentemente, a ALSA evoluiu um pouco desde que seu tutorial foi escrito, pois ele diz que nunca fez o Dmix funcionar, e ele diz que aliases para dispositivos com argumentos não são permitidos (meu pcm.default é um alias).

    
por 30.11.2016 / 00:11

Tags