alsamixer 在使用我的 asound.conf 文件时崩溃,但没有它却可以正常运行

alsamixer 在使用我的 asound.conf 文件时崩溃,但没有它却可以正常运行

我在使用 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,它又可以正常工作了。

谢谢,问题解决了。

答案1

忘记那个ctl设备;要配置 mpd 混音器,请将其搅拌机类型和/或混频器设备。(如果设备没有可用的混音器控件,则可能需要使用软件混音器。)

繁忙错误是由其他某个程序(可能是)PulseAudio 打开该设备引起的。(您可以在中检查 PID /proc/asound/cardX/pcm0p/sub0/status。)

相关内容