Como combinar dmix com plugins ladspa para o dispositivo padrão

3

Um tempo eu abandonei todos os daemons de som e vivi feliz desde então com apenas o plugin dmix. No entanto, recentemente fiquei irritado com os diferentes níveis de volume dos vídeos do youtube e decidi ligar um compressor e um limitador. IMHO esta é uma configuração extremamente desejável.

Mas, infelizmente, eu não tive sorte. Eu tenho a reprodução para trabalhar ou capturar, mas nunca os dois. Eu suponho que o problema subjacente é a minha falta de compreensão, então minhas perguntas fundamentais são:

  • Onde posso encontrar uma boa documentação de alsa e .asoundrc, que vai além de meros exemplos e que, por exemplo, explicar as mensagens de erro (veja abaixo) eu tenho.
  • Alguém obteve sucesso em uma configuração de som sem daemon, que incluiu plugins ladspa?
  • Alguém sabe as razões, ou mesmo uma solução para meus problemas particulares (descritos abaixo)?

Para aqueles de vocês que têm paciência para seguir meus problemas aqui estão. Cheguei a ser capaz de tocar um som como esse

aplay -D ladspaChain /usr/share/skype/sounds/CallBusy.wav

mas não consigo reproduzir por meio do dispositivo padrão.

 pcm.!default {
    type plug
    slave.pcm {
    type asym
    playback.pcm "ladspaChain"
    capture.pcm "dsnooper"
   }
}

Sem -D ladspaChain, recebo

aplay: pcm_params.c:170: snd1_pcm_hw_param_get_min: Assertion '!snd_interval_empty(i)' failed.**

Como alternativa, tentei

 pcm.!default {
    type route
    slave.pcm {
    type asym
    playback.pcm "ladspaChain"
    capture.pcm "dsnooper"
   }
    ttable {
        0.0     1       # left channel
        1.1     1       # right channel
    } 
} 

Neste caso, a reprodução funciona, mas o arecord me dá

arecord: set_params:1081: Sample format non available
Available formats:
- S32_LE
    
por Martin Drautzburg 22.12.2013 / 21:15

2 respostas

0

Encontrei uma resposta completa (que está bem de acordo com a resposta de Permat e Ramesh) em link :

ciaranhearne: "Basically I had to define Dmix as a plugin before I could use it"

Enquanto isso funcionou muito bem com apenas alsa, eu não conseguia trabalhar / pulsaudio / apulse (para skype). Quando eu definir o pulso para usar dmix diretamente funcionou, mas ele aproveitou o dispositivo exclusivamente e já não funcionou. Deixar o pulso usar os pcms mais longe do cartão não funcionou.

A solução foi criar dois dmixes. Agora eu tenho

  • Uma maneira de inserir permanentemente plugins do ladspa (um limitador no meu caso)
  • o dispositivo padrão funciona (o firefox está feliz)
  • não pulseaudio
  • o skype ainda funciona por meio do pulso

export APULSE_PLAYBACK_DEVICE=plug:duplexPulse

apulse skype

Aqui está o meu .asoundrc como é agora

#--------------------------------------------------
# Cards
#--------------------------------------------------
pcm.audiophile {
    type hw
    card 0
}

ctl.audiophile {
    type hw
    card 0
}


#--------------------------------------------------
# Normal alsa
#--------------------------------------------------
pcm.!default {
    type plug
    slave.pcm "duplex"
} 

pcm.duplex {
    type asym
    playback.pcm "ladspa"
    capture.pcm "dsnooper"
}


# --- ladspa chain ---

pcm.ladspa {
  type ladspa
  slave.pcm "dmixplug"
  path "/usr/lib/ladspa";
  plugins [
    {
    label fastLookaheadLimiter
    input {
        #InputGain(Db) Limit (db) Release time (s) 
        controls [ 9 -3 10]
        }

    }]
}



pcm.dmixplug {
  type plug
  slave.pcm "dmixer"
}


pcm.dmixer {
    type dmix
    ipc_key 1234
    slave {
        pcm "audiophile"
        period_size 1024
        buffer_size 4096
        rate 44100
    }
} 

pcm.dsnooper {
    type dsnoop
    ipc_key 2048
    ipc_perm 0666 
    slave.pcm "audiophile"
    slave 
    {
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 44100
    }
    bindings {
        0 0
        1 1
    }
}

#--------------------------------------------------
# special entries for pulseaudio/apulse
#--------------------------------------------------

pcm.duplexPulse {
    type asym
    playback.pcm "dmixerPulse"
    capture.pcm "dsnooper"
}

pcm.dmixerPulse {
    type dmix
    ipc_key 1234
    slave {
        pcm "audiophile"
        period_size 1024
        buffer_size 4096
        rate 44100
    }
} 
    
por 26.01.2015 / 19:04
1

Use o plugue (que também aceita tabela) não seja roteado como tipo, o que significa que você pode pular um nível de aninhamento.

    
por 24.05.2014 / 23:11

Tags