我在使用 alsamixer 时遇到了一个奇怪的问题。我有这个 asound.conf 文件,它可以为我的“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
}
如果我运行 alsamixer 时不使用任何命令行参数和上述 asound.conf 文件,alsamixer 就会崩溃并显示不太有用的错误消息:
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
如果我删除 asound.conf 文件,alsamixer 仍能正常运行。
不幸的是,我需要重新映射频道才能使 mpd 工作。
有没有办法重新映射频道并且不让 alsamixer 崩溃?
仅供参考:如果我指定 USBStreamer 设备,alsamixer 可以正常运行。不幸的是,mpd 在调用 alsamixer 时似乎没有那么具体。
编辑:如果我从 asound.conf 中删除 ctl.!default 块,并重新启动 alsa,alsamixer 无需指定设备即可正常运行。... mpd想它通过 alsa 播放,但我的扬声器没有发出声音。我认为 ctl.!default 块正在做一些重要的事情。
此外,speaker-test 不再工作。它抱怨资源繁忙:
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
这是 /etc/mpd.conf 的 audio_output 部分
audio_output {
type "alsa"
name "USB Streamer - LX521.4"
device "hw:USBStreamer,0"
}
虽然这与我的问题无关,但我发现 asound.conf 文件有点丑陋。我对 ALSA 配置文件的理解还很初级,但我相信这相当于上面的内容(删除了 ctl.!default 部分):
pcm.!default {
type plug
slave.pcm {
type hw
card USBStreamer
device 0
}
ttable {
0.8 1
1.9 1
}
}
这是声音设备的 amixer“简单控制”:
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
啊哈!看起来 mpd 可能正在使用 ALSA,这就是为什么我无法进行扬声器测试:
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
看起来 mpd 确实被冻结了。对 mpc 的请求需要很长时间,并导致错误消息,例如:
mpc
mpd error: Timeout
所以我需要暂时关闭 mpd...让我们看看我是否可以这样做。我相信“sudo service mpd stop”应该可以解决问题。该请求需要很长时间...好的,扬声器测试又可以正常工作了!
但 mplayer 不工作:
[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
好的,我使用 mplayer 参数“ao=alsa:device=default”修复了这个问题,这告诉它使用 asound.conf 重新映射的默认设备。
接下来是 mpd。感觉正在取得进步,真好。
我将 mpd 设置为使用默认 ALSA 设备(而不是 hw:USBStreamer),这样通道重新映射就完成了。重新启动 mpd,它又可以正常工作了。
谢谢,问题解决了。