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
}

如果我在沒有命令列參數和上述 asound.conf 檔案的情況下運行 alsamixer,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 -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 -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。)

相關內容