Contexto
Estou archlinuxem funcionamento no meu laptop há anos e nunca precisei do microfone. Agora eu preciso, mas não consigo encontrar uma maneira de configurá-lo corretamente.
Eu uso alsae pulseadio.
Executando alsamixercomo usuário, tenho dois medidores:
|| ||
Master Capture
Eu tenho os dois emudecidos e habilitados para valores sensíveis (~ 50%).
Executando alsamixercomo root, tenho vários medidores:
|| || || || || ||
Master Headphones Speaker PCM Microphone MIC Boot
|| || || || ||
Beep Loopback Internal Internal Capture
Se eu ativar o Loopbackas root , posso ouvir o microfone de volta pelos alto-falantes .
Se eu selecionar explicitamente minha placa de som alsamixercomo usuário, obtenho os mesmos comandos que o root (e se eu ativar Loopbackaqui, também ouço o microfone dos alto-falantes). Eu recebo o seguinte:
(À direita, há mais dois Internalmedidores, o Loopback(ativar / desativar) e um mutável Off-hook)
No entanto, não importa o que eu faça e o quanto eu me importe com os medidores da alsa, nunca consigo passar o microfone para o aplicativo do usuário. Em essência, toda vez que corro arecord, recebo a seguinte saída:
$ arecord -vv -f dat /dev/null
Recording WAVE '/dev/null' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
ALSA <-> PulseAudio PCM I/O Plugin
Its setup is:
stream : CAPTURE
access : RW_INTERLEAVED
format : S16_LE
subformat : STD
channels : 2
rate : 48000
exact rate : 48000 (48000/1)
msbits : 16
buffer_size : 24000
period_size : 6000
period_time : 125000
tstamp_mode : NONE
tstamp_type : GETTIMEOFDAY
period_step : 1
avail_min : 6000
period_event : 0
start_threshold : 1
stop_threshold : 24000
silence_threshold: 0
silence_size : 0
boundary : 6755399441055744000
#+ | 00%
aplay, por outro lado, funciona perfeitamente.
Minha placa de som é ( lspci):
# lspci| grep -i audio
00:14.2 Audio device: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 Azalia (Intel HDA)
Eu olhei para o wiki do arch e tentei configurar o seguinte em /etc/modprobe.d/modprobe.conf(e reiniciei a máquina):
options snd-hda-intel model=dell-m6-dmic
(Não consigo que o microfone envie dados ao aplicativo do usuário com ou sem essa configuração.)
Meus hdamódulos atuais são:
# lsmod |grep hda
snd_hda_codec_si3054 16384 1
snd_hda_codec_realtek 69632 1
snd_hda_codec_generic 69632 1 snd_hda_codec_realtek
snd_hda_intel 32768 5
snd_hda_codec 106496 4 snd_hda_codec_realtek,snd_hda_codec_si3054,snd_hda_codec_generic,snd_hda_intel
snd_hda_core 61440 5 snd_hda_codec_realtek,snd_hda_codec_si3054,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
snd_hwdep 16384 1 snd_hda_codec
snd_pcm 86016 4 snd_hda_codec_si3054,snd_hda_codec,snd_hda_intel,snd_hda_core
snd 65536 18 snd_hda_codec_realtek,snd_hda_codec_si3054,snd_hwdep,snd_timer,snd_pcm,snd_hda_codec_generic,snd_hda_codec,snd_hda_intel
Para ser completo, esta é a minha pulseaudioconfiguração (não tentei me intrometer):
$ pulseaudio --dump-conf
### Read from configuration file: /etc/pulse/daemon.conf ###
daemonize = no
fail = yes
high-priority = yes
nice-level = -11
realtime-scheduling = yes
realtime-priority = 5
allow-module-loading = yes
allow-exit = yes
use-pid-file = yes
system-instance = no
local-server-type = user
cpu-limit = no
enable-shm = yes
flat-volumes = no
lock-memory = no
exit-idle-time = 20
scache-idle-time = 20
dl-search-path = /usr/lib/pulse-9.0/modules
default-script-file = /etc/pulse/default.pa
load-default-script-file = yes
log-target =
log-level = notice
resample-method = auto
enable-remixing = yes
enable-lfe-remixing = no
lfe-crossover-freq = 0
default-sample-format = s16le
default-sample-rate = 44100
alternate-sample-rate = 48000
default-sample-channels = 2
default-channel-map = front-left,front-right
default-fragments = 4
default-fragment-size-msec = 25
enable-deferred-volume = yes
deferred-volume-safety-margin-usec = 8000
deferred-volume-extra-delay-usec = 0
shm-size-bytes = 0
log-meta = no
log-time = no
log-backtrace = 0
rlimit-fsize = -1
rlimit-data = -1
rlimit-stack = -1
rlimit-core = -1
rlimit-rss = -1
rlimit-as = -1
rlimit-nproc = -1
rlimit-nofile = 256
rlimit-memlock = -1
rlimit-locks = -1
rlimit-sigpending = -1
rlimit-msgqueue = -1
rlimit-nice = 31
rlimit-rtprio = 9
rlimit-rttime = 200000
De acordo com o comentário de Faheem Mitha, estou confiante de que pulseaudio tmpfstem as permissões corretas:
# ls -la /run/user/861213/pulse/
total 4
drwx------ 2 grochmal users 80 Jul 4 21:44 .
drwx------ 5 grochmal users 120 Jul 4 21:46 ..
srw-rw-rw- 1 grochmal users 0 Jul 4 21:44 native
-rw------- 1 grochmal users 4 Jul 4 21:44 pid
E pavucontrolfoi silenciado. Eu não sabia pavucontrolque resultou no problema em primeiro lugar:
Questão
Estou sem idéias. Eu acredito que a Loopbackinterface de áudio existe no espaço do kernel , portanto, o meu problema é que eu não posso trazer os dados de microfone em espaço do usuário . No entanto, não tenho 100% de certeza disso.
Que outras opções posso dar snd-hda-intel(ou aos outros módulos) que podem ser relevantes para um microfone que funciona na interface de loopback, mas não se propaga para a camada de aplicativo?
Eu poderia estar fazendo algo errado pulseaudio? Mas, novamente, pulseaudiofuncionou corretamente (junto com alsa) por todo esse tempo, e eu uso com audacitybastante frequência.
alsamixer.
alsamixer. Por enquanto, adicionei a captura de tela e confirmei minhas pulseaudiopermissões (até reiniciei a máquina para garantir que minha intromissão como root não afetasse algo). Agora estou tentando jogar mais com pulseaudio.
Beep. Sem alegria
pavucontrol. Isso resolve. Eu realmente me pergunto como isso aconteceu. Tenho outra máquina usando exatamente o mesmo módulo Intel HDA, o mesmo sistema operacional (com as mesmas atualizações), o mesmo alsa e o mesmo pulseaudio; e não foi silenciado lá. Antes de seu comentário pavucontrolnão ter sido instalado em nenhuma das duas máquinas (o archlinux possui pavucontrolum pacote separado).

