Crie o dispositivo ALSA com 1 canal de 2

0

Estou tentando usar o Linphone com meu microfone, mas o som é muito instável. Depois de mexer um pouco com arecord , descobri que, embora o som no meu dispositivo sysdefault esteja instável, a gravação em front:CARD=Generic funciona melhor e com menos ruído.

No entanto, front aparentemente só pode ser gravado com 2 canais ativos. O Linphone força o mono na entrada (em teoria, ele poderia usar estéreo, mas não parece haver uma maneira de definir isso na configuração), e assim ele dá um erro alsa, já que ele não pode configurar os canais corretamente.

O mesmo acontece se eu usar arecord para forçar um canal ao dispositivo:

$ arecord -f cd -d front:CARD=Generic,DEV=0 -c 1 -V stereo /tmp/file
Recording WAVE '/tmp/file' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
arecord: set_params:1247: Channels count non available

Estou, assim, tentando criar um dispositivo no ALSA que deve reduzir a resolução do microfone em um único canal, mas parece que não consigo (sou um novato da ALSA). Eu tentei usar esta resposta , mas não funciona:

pcm.front cards.pcm.front
pcm.makemono {           
        type plug      
        slave.pcm {  
                type route                     
                slave.pcm "pcm.front"
                slave.channels 2
                ttable {  
                        0.0 1  
                        1.0 1
                }                   
        }                               
}

...

$ arecord -f cd -d makemono -c1 -V stereo /tmp/file
Recording WAVE '/tmp/file' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
arecord: set_params:1247: Channels count non available

Como posso fazer isso?

    
por Svalorzen 08.02.2017 / 15:17

1 resposta

2

Você quer um canal de software com dois canais de hardware, então você precisa fazer o mapeamento na direção oposta:

...
ttable {
    0.0 1
    0.1 1
}

E você deve usar a opção correta para especificar o dispositivo:

$ arecord --help | grep -i -- ^-d
-D, --device=NAME       select PCM by name
-d, --duration=#        interrupt after # seconds
    
por 08.02.2017 / 15:47