
Estou tendo um problema peculiar com o alsamixer. Eu tenho este arquivo asound.conf que executa um remapeamento de canal para meu dispositivo "USBStreamer":
pcm.usbSTR {
type hw
card USBStreamer
device 0
}
pcm.usbREMAP {
type plug
slave.pcm usbSTR
ttable.0.8 1
ttable.1.9 1
}
pcm.!default {
type plug
slave.pcm usbREMAP
}
ctl.!default {
type plug
slave.pcm usbREMAP
}
Se eu executar o alsamixer sem argumentos de linha de comando e o arquivo asound.conf acima, o alsamixer travará com a mensagem de erro não tão útil:
ALSA lib dlmisc.c:254:(snd1_dlobj_cache_get) Cannot open shared library /usr/lib/i386-linux-gnu/alsa-lib/libasound_module_ctl_plug.so
cannot open mixer: No such device or address
Se eu excluir o arquivo asound.conf, o alsamixer funcionará perfeitamente.
Infelizmente, preciso do remapeamento do canal para que o mpd funcione.
Existe uma maneira de remapear o canal e não travar o alsamixer?
Para sua informação: se eu especificar o dispositivo USBStreamer, o alsamixer funciona bem. Infelizmente, parece que o mpd não é tão específico quando chama o alsamixer.
editar: Se eu apagar o bloco ctl.!default do asound.conf e reiniciar o alsa, o alsamixer funcionará bem sem especificar um dispositivo. . . mpdachaestá tocando também, mas nenhum ruído sai dos meus alto-falantes. Acho que aquele bloco ctl.!default estava fazendo algo importante.
Além disso, o teste de alto-falante não está mais funcionando. Está reclamando de um recurso ocupado:
speaker-test -c 10 -t sin -D plughw:USBStreamer
speaker-test 1.1.0
Playback device is plughw:USBStreamer
Stream parameters are 48000Hz, S16_LE, 10 channels
Sine wave rate is 440.0000Hz
Playback open error: -16,Device or resource busy
Aqui está minha parte audio_output de /etc/mpd.conf
audio_output {
type "alsa"
name "USB Streamer - LX521.4"
device "hw:USBStreamer,0"
}
Embora isso seja periférico ao meu problema, achei o arquivo asound.conf um pouco feio. Meu entendimento dos arquivos de configuração do ALSA é rudimentar, mas acredito que seja equivalente ao acima (com a parte ctl.!default apagada):
pcm.!default {
type plug
slave.pcm {
type hw
card USBStreamer
device 0
}
ttable {
0.8 1
1.9 1
}
}
Aqui está o amixer de "controles simples" para o dispositivo de som:
amixer -D hw:USBStreamer scontrols
Simple mixer control 'Mic',0
Simple mixer control 'Mic',1
Simple mixer control 'USBStreamer Clock Selector',0
Simple mixer control 'USBStreamer Output',0
Simple mixer control 'USBStreamer Output',1
Ah! Parece que talvez o mpd esteja usando ALSA e é por isso que não consigo fazer o teste do alto-falante:
sudo fuser -v /dev/snd/*
[sudo] password for rybu:
USER PID ACCESS COMMAND
/dev/snd/controlC0: mpd 935 F.... mpd
/dev/snd/pcmC1D0p: mpd 935 F...m mpd
Parece que o mpd está congelado. As solicitações para mpc demoram uma eternidade e resultam em mensagens de erro como:
mpc
mpd error: Timeout
Então eu preciso matar o mpd um pouco. . . vamos ver se consigo fazer isso. Acredito que um "sudo service mpd stop" deve resolver o problema. Esse pedido está demorando muito. . . ok, o teste do alto-falante está funcionando novamente!
mas o mplayer não está funcionando:
[AO_ALSA] alsa-lib: pcm.c:2135:(snd_pcm_open_conf) type is not defined
[AO_ALSA] Playback open error: No such file or directory
Failed to initialize audio driver 'alsa'
[AO SDL] Samplerate: 44100Hz Channels: Stereo Format s16le
[AO SDL] using aalib audio driver.
[AO SDL] Unable to open audio:
Failed to initialize audio driver 'sdl:aalib'
Could not open/initialize audio device -> no sound.
Audio: no sound
Ok, eu consertei isso com os argumentos do mplayer "ao=alsa:device=default" isso diz para ele usar o dispositivo padrão remapeado asound.conf.
A seguir, mpd. É bom estar progredindo.
Eu configurei o mpd para usar o dispositivo ALSA padrão (não hw:USBStreamer) para que o remapeamento do canal seja feito. Reinicie o mpd e ele funcionará perfeitamente novamente.
Obrigado, problema resolvido.
Responder1
Esqueça esse ctl
dispositivo; para configurar o mixer mpd, defina seutipo_misturadore/oudispositivo_misturador. (Se o dispositivo não tiver controles de mixer utilizáveis, talvez seja necessário usar o mixer de software.)
O erro de ocupado é causado por algum outro programa (provavelmente) PulseAudio abrindo o dispositivo. (Você pode verificar o PID em /proc/asound/cardX/pcm0p/sub0/status
.)