Como faço o ALAS upmix 2.0 para 2.1?

0

Por muito tempo, venho mexendo com a ALSA e por um período igualmente longo, tenho me frustrado com o sistema de configuração bastante opaco que ele usa. É realmente poderoso, sem dúvida, mas conseguir o que eu quero é difícil .

Basicamente, eu quero que minha configuração de estéreo simples seja expandida um pouco com um subwoofer para adicionar um pouco mais de som de clube às vezes. As fontes de áudio que eu uso não tem um sub-canal, então como eu ...

  • Atualize minhas fontes estéreo regulares 2.0 para 2.1 (onde o .1 é o sub canal)
  • Filtre o sub-canal para que o sub só lide com baixo frequências (ou seja, fazer um filtro cruzado)

O ALSA tem os plug-ins upmix e ladspa . Um lida com canais de mixagem enquanto o outro é capaz de aplicar uma variedade de filtros de processamento de sinal digital. Eu tentei e tentei, mas ALSA continuou jogando muito duro para interpretar erros em mim. Eu tenho mixagem e filtragem de trabalho separadamente, mas encadeamento-los juntos nunca foi bem.

    
por MrMajestyk 21.08.2015 / 09:14

1 resposta

2

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 uso alsamixer 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.
por 21.08.2015 / 09:14

Tags