ALSA/疑難解答 - Arch Linux 中文维基

跳至內容

# ALSA/疑難解答

出自 Arch Linux 中文维基
< ALSA
翻譯狀態：

- 本文（或部分內容）譯自 Advanced Linux Sound Architecture/Troubleshooting，最近一次同步於 2021-09-18，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

## 音量

### 沒有輸出

如果`speaker-test`能發出聲音而一些其他程序卻不能，確認是否使用了PulseAudio：

    # fuser -v /dev/snd/*

若是，試試apulseAUR，見Advanced Linux Sound Architecture#PulseAudio 兼容性。或者，終止PulseAudio進程可能會讓聲音在所需的進程中開始工作。

### 重啟後輸出被靜音

運行以下命令：

    # alsactl restore

如果問題持續，請確認alsamixer中的 `Auto-Mute` 選項已被設為 `Disabled`（禁用）。

### 音量過低

運行alsamixer，嘗試提高滑塊的值，必要時解除聲道的靜音。注意如果滑塊很多，可能需要滾動到右側查看是否有被遺漏的滑塊。

如果所有滑塊都已被推到最大，但音量仍然過低，可以嘗試運行以下腳本復位編解碼器設置：

    $ wget -O hda-analyzer.py https://git.alsa-project.org/?p=alsa.git;a=blob_plain;f=hda-analyzer/run.py
    $ su -c 'python2 hda-analyzer.py'

該腳本假定`/usr/bin/python`指向Python 2，但這不符合Arch的默認設置。為避免此問題，運行以下命令：

    $ sed -i 's/python %s/python2 %s/' hda-analyzer.py

關閉analyzer，當提示是否要復位編解碼器時回答「yes」。

如果音量仍然過低，請再次運行alsamixer：復位編解碼器可能會使新的滑塊可用，其中一些可能被設定得較低。

### 聲音音量低

如果發現把音箱/耳機開到最大之後音量仍然低，可以試試softvol插件。將以下內容加入`/etc/asound.conf`。

    pcm.!default {
        type plug
        slave.pcm "softvol"
    }

    pcm.softvol {
        type softvol
        slave {
            pcm "dmix"
        }
        control {
            name "Pre-Amp"
            card 0
        }
        min_dB -5.0
        max_dB 20.0
        resolution 6
    }

注意：可能需要重啟電腦，因為（原作者）重啟alsa後未能加載新配置。另外，如果重啟之後上述配置依然不起效，試試將上述配置中的`plug`換成`hw`。

成功載入更改之後，在alsamixer中會看到 `Pre-Amp` 部分，在此即可調整音量水平。

注意：

- 對 `Pre-Amp` 設置較高的值可能導致聲音失真，請根據對你來說合適的水平進行調節。
- 一些音頻編解碼器可能需要在HDA分析器中更改設置（見#音量過低）才能達到正確的音量而不失真。Checking the HP option under widget control in the Playback Switch (Node[0x14] PIN in the ALC892 codec, for instance) can sometimes improve audio quality and volume significantly.

### 啟動後隨機出現無聲

運行`speaker-test`可以快速測試聲音。如果沒有聲音，錯誤消息可能會像這樣：

     ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
     Playback open error: -16
     Device or resource busy

如果是啟動時就沒有聲音，可能是因為你的系統有多塊音效卡，它們的順序在啟動時有時可能變化。如果是這種情況，試試設置默認音效卡。

如果你使用mpd，而上面的配置提示不起作用，再試試這個方法。

## 麥克風

### 沒有麥克風輸入

請在alsamixer中確保recording下的所有音量等級都調了上去，並且已對麥克風（如Mic、Internal Mic）和/或Capture激活CAPTURE（在alsamixer中，選定這些項並按空格）。試試把Mic Boost設為正，並調高Capture和Digital音量等級；這樣可能會造成靜電噪聲或失真，但一旦你在錄音時聽到有動靜，就可以把它們調低回去了。

由於pulseaudio wrapper在alsamixer中顯示為「default」，可能需要先按F6選擇你的實際音效卡。可能也需要在Playback部分中啟用並調高Line-in的音量。

使用以下命令來測試麥克風（參考arecord的手冊頁獲取更多信息）：

    $ arecord --duration=5 --format=dat test-mic.wav
    $ aplay test-mic.wav

或者也可用以下命令：

    $ arecord -vv --format=dat /dev/null

同時使用alsamixer就可以輕鬆分辨應當選擇哪個聲道並解除其靜音。

要測試特定設備，使用`--device`後接`hw:C,D`形式的PCM硬體名稱，音效卡編號為 C 而設備編號為 D，如果是plug類硬體的話則使用`plughw:C,D`。例如：

    $ arecord -vvv --format=dat --device=plughw:0,0 /dev/null

如果都不管用，可能需要通過另一設備測試麥克風，以排除硬體故障。

至少對於某些電腦來說，靜音麥克風（MM）僅僅意味著其輸入並不直接送往音箱。它仍然會接收輸入。

很多戴爾筆記本需要在`/etc/modprobe.d/modprobe.conf`中的model名字後面添加「-dmic」：

    options snd-hda-intel model=dell-m6-dmic

一些程序嘗試將OSS作為主輸入軟體。如果之前啟用了`snd_pcm_oss`、`snd_mixer_oss` 或 `snd_seq_oss` 內核模塊（默認不會加載它們），嘗試卸載（unloading）它們。

另見：

- https://www.alsa-project.org/main/index.php/SoundcardTesting
- https://alsa.opensrc.org/Record_from_mic

### 設置默認麥克風/捕獲設備

一些應用（Pidgin、Adobe Flash）並不提供更改捕獲設備的選項。如果你的麥克風是在內置音效卡之外的單獨設備上的話（如USB網絡攝像頭或麥克風）這就會成為問題。要想只更改默認捕獲設備，而讓默認回放設備保持原樣，可以更改 `~/.asoundrc` 文件，加入以下內容：

    pcm.usb
    {
        type hw
        card U0x46d0x81d
    }

    pcm.!default
    {
        type asym
        playback.pcm
        {
            type plug
            slave.pcm "dmix"
        }
        capture.pcm
        {
            type plug
            slave.pcm "usb"
        }
    }

把「U0x46d0x81d」改為你的捕獲設備在ALSA中的音效卡名字。用`arecord -L`可以列出ALSA檢測到的所有捕獲設備。

### 內置麥克風不工作

首先確保alsamixer中的`Capture`視圖下的音量已經啟用。有時「Internal Microphone」不會顯示在按F4顯示出的捕獲列表當中。如果是這樣，啟動alsamixer時指定 `aplay -l` 給出的音效卡編號（如 `alsamixer -c 0` ）就有可能讓它出現。

之後將以下內容加入 `/etc/modprobe.d/snd-hda-intel.conf`：

    options snd-hda-intel enable_msi=1

然後重新加載模塊：

    # rmmod snd-hda-intel && modprobe snd-hda-intel

現在在前述的`Capture`視圖當中就應該會多出來一路輸入了。

### 麥克風有爆裂聲

如果你的麥克風有爆裂或噗噗聲，且無法通過ALSA設置或清潔麥克風插頭解決，試試在 `/etc/modprobe.d/modprobe.conf` 中添加以下行：

    options snd-hda-intel model=MODEL position_fix=3

該選項可以解決純ALSA的爆裂聲，但會對pulseaudio造成問題。要讓pulseaudio等同使用這些設置，編輯`/etc/pulse/default.pa`，找到這一行：

    load-module module-udev-detect

並將其更改為：

    load-module module-udev-detect tsched=0

見 DMA-Position Problem in the kernel docs。

## 音頻質量

### 通過耳機插孔有爆裂聲

無論是遵循了同時輸出操作提示或是嘗試自己完成，都有可能在耳機或外接音箱中聽到爆裂聲。通過將Mic項靜音或音量設為0%可以解決。使用 `alsamixer` 或 `amixer`：

    $ amixer sset "Mic" 0%
    $ amixer sset "Mic" mute

### 從掛起狀態恢復後聽到噗聲

在從掛起狀態恢復電腦後可能會聽到一聲噗聲。編輯`/etc/pm/sleep.d/90alsa`，刪除`aplay -d 1 /dev/zero`行即可解決。

### 回放時聲音跳躍

運行alsamixer，如果其中有與不存在的輸出設備相對應的聲道則禁用它們（例如alsamixer顯示了一個實際上並沒有的中置音箱）。

### 音質差或卡頓

如果發現音質特別差，試試在 alsamixer 中調節 PCM 音量到增益（gain）為0的水平。

若使用 snd-usb-audio 驅動，可以試試在 `/etc/asound.conf` 中啟用 `softvol`。下面是針對第一個聲音設備的配置範例：

    pcm.!default {
        type plug
        slave.pcm "softvol"
    }
    pcm.dmixer {
        type dmix
        ipc_key 1024
        slave {
            pcm "hw:0"
            period_size 4096
            buffer_size 131072
            rate 50000
        }
        bindings {
            0 0
            1 1
        }
    }
    pcm.dsnooper {
        type dsnoop
        ipc_key 1024
        slave {
            pcm "hw:0"
            channels 2
            period_size 4096
            buffer_size 131072
            rate 50000
        }
        bindings {
            0 0
            1 1
            }
    }
    pcm.softvol {
      type softvol
      slave { pcm "dmixer" }
      control {
        name "Master"
        card 0
      }
    }
    ctl.!default {
      type hw
      card 0
    }
    ctl.softvol {
      type hw
      card 0
    }
    ctl.dmixer {
      type hw
      card 0
    }

### 開始或停止音頻播放時出現噪音

某些驅動模塊（如 `snd_ac97_codec` 和 `snd_hda_intel`）會在音效卡閒置時關閉它以節約用電。音效卡啟動或關閉時，就會發出刺耳的噪音。甚至在調節音量或開關窗口（KDE4）時也可能發生這種情況。如果你覺得煩的話，試試用 `modinfo your_module` 尋找調整或禁用此功能的模塊選項。

例如，要禁用 `snd_hda_intel` 模塊的節電模式，向 `/etc/modprobe.d/modprobe.conf`添加：

    options snd_hda_intel power_save=0

也可能需要對於音效卡控制器禁用節電：

    options snd_hda_intel power_save=0 power_save_controller=N

也可以使用 `modprobe snd_hda_intel power_save=0` 等為內核模塊設置參數。

也可能需要解除ALSA「Line」通道的靜音才能奏效。任何值都可以（只要不是0或者過高的話）。例如對於板載VIA VT1708S（使用`snd_hda_intel`模塊），即使將 `power_save` 設為0也會發出爆裂聲。解除「Line」通道的靜音並設置音量值為1即可解決問題。

來源： https://docs.kernel.org/sound/designs/powersave.html

### 使用CPU頻率動態調整時聲音發生跳躍

使用 `ondemand` 或 `conservative` 頻率策略、啟用CPU頻率動態調整時，某些音效卡和 ALSA 驅動的組合會導致來自所有來源的聲音出現跳躍。目前的解決方案是用回 `performance` 策略。

更多信息見 CPU frequency scaling 。

## 硬體與音效卡

### 驗證輸出參數

檢查 `/proc/asound/cardX/pcmYp/subZ/hw_params` 的內容，其中 `X`、 `Y`和`Z`與系統有關。 要找到該文件，請在通過ALSA進行輸出的同時執行以下命令：

    $ find /proc/asound/ -name hw_params | xargs -I FILE grep -v -l "closed" FILE | grep '/proc/asound/card./pcm.p/sub./hw_params'

如果沒有任何播放，應該不會有結果。

以下示例輸出是對於一段位深度24位，採樣頻率44.1 kHz的音頻：

    cat /proc/asound/card1/pcm0p/sub0/hw_params

    access: RW_INTERLEAVED
    format: S24_3LE
    subformat: STD
    channels: 2
    rate: 44100 (44100/1)
    period_size: 5513
    buffer_size: 22050

更多信息見 ALSA文檔。

### 內核升級後出現「Unknown hardware」錯誤

在初始化ALSA的過程中有可能會輸出下面的錯誤信息：

    Unknown hardware "foo" "bar" ...
    Hardware is initialized using a guess method
    /usr/bin/alsactl: set_control:nnnn:failed to obtain info for control #mm (No such file or directory)

或者：

    Found hardware: "HDA-Intel" "VIA VT1705" "HDA:11064397,18490397,00100000" "0x1849" "0x0397"
    Hardware is initialized using a generic method
    /usr/bin/alsactl: set_control:1328: failed to obtain info for control #1 (No such file or directory)
    /usr/bin/alsactl: set_control:1328: failed to obtain info for control #2 (No such file or directory)
    /usr/bin/alsactl: set_control:1328: failed to obtain info for control #25 (No such file or directory)
    /usr/bin/alsactl: set_control:1328: failed to obtain info for control #26 (No such file or directory)

只需重新保存ALSA混音器設定：

    # alsactl -f /var/lib/alsa/asound.state store

可能需要用alsamixer重新配置ALSA。

### 修復錯誤的音頻插孔映射

如果你的音頻插孔（插頭）映射不正確，但ALSA工作正常，可以試試HDA Analyzer，一個用於HD-audio控制的pyGTK2 GUI，見ALSA wiki。 嘗試調整 PIN 節點的 Widget Control 部分，讓麥克風為 IN 而耳機插孔為 OUT。 Referring to the Config Defaults heading is a good idea.

注意：此腳本不兼容Python 3（Arch Linux的默認Python實現）。要使用該腳本，將`run.py`中出現的`python`全部替換為`python2`，從而將腳本指向Python 2版本。之後把腳本設為可執行並運行。

### S/PDIF輸出不工作

若主板/音效卡的同軸/光纖數字輸出不工作或停止工作，且已經在alsamixer啟用之並解除靜音，嘗試運行：

    $ iecset audio on

由於這樣有時在重啟後可能又會停止工作，也可以將其寫成systemd服務並啟用。

### 與PC喇叭衝突

如果你確認所有聲道都已解除靜音，音效卡驅動配置正確，且音量大小也合適，但還是聽不到聲音，那麼請試試將下面的內容添加到`/etc/modprobe.d/modprobe.conf`：

    options snd-NAME-OF-MODULE ac97_quirk=0

以上修補據觀察可用於 `via82xx`

    options snd-NAME-OF-MODULE ac97_quirk=1

以上修補據報告可用於 `snd-intel8x0`

### HP TX2500

添加以下2 行到 `/etc/modprobe.d/modprobe.conf`：

    options snd-cmipci mpu_port=0x330 fm_port=0x388
    options snd-hda-intel index=0 model=toshiba position_fix=1
    options snd-hda-intel model=hp (works for tx2000cto)

### 當 S/PDIF 顯卡安裝上時無聲

查詢可用的模塊及其次序：

    $ cat /proc/asound/modules

     0 snd_hda_intel
     1 snd_ca0106

在`/etc/modprobe.d/modprobe.conf`中禁用不想要的顯卡音頻編解碼器：

    /etc/modprobe.d/modprobe.conf

    install snd_hda_intel /bin/false

如果兩個設備使用同一模塊，可使用snd_hda_intel模塊的`enable`參數；它是一個布爾數組，可以啟用/禁用所希望的顯卡。

    options snd_hda_intel enable=1,0

### 錯誤的音效卡model類型

儘管ALSA通過BIOS檢測音效卡，有時候ALSA可能無法識別你的model類型。音效卡晶片可以在`alsamixer`中找到（如ALC662），model可以在 `/etc/modprobe.d/modprobe.conf` 或 `/etc/modprobe.d/sound.conf`中設置。例如：

    options snd-hda-intel model=MODEL

也有其他的model設置。大部分情況下ALSA默認的就可以了。如果想要查詢更加針對於你音效卡的設置，訪問ALSA音效卡列表，查找你的型號，點擊Details，然後閱讀「Setting up modprobe...」部分。將這些值輸入`/etc/modprobe.d/modprobe.conf`。例如對於英特爾AC97音效卡：

    # ALSA portion
    alias char-major-116 snd
    alias snd-card-0 snd-intel8x0
    # module options should go here

    # OSS/Free portion
    alias char-major-14 soundcore
    alias sound-slot-0 snd-card-0

    # card #1
    alias sound-service-0-0 snd-mixer-oss
    alias sound-service-0-1 snd-seq-oss
    alias sound-service-0-3 snd-pcm-oss
    alias sound-service-0-8 snd-seq-oss
    alias sound-service-0-12 snd-pcm-oss

### 英特爾板載音效卡

#### 英特爾板載音效卡無聲

問題可能是由加載了兩個相衝突的模塊導致的，具體是 `snd-intel8x0` 和 `snd-intel8x0m`。這種情況下屏蔽掉 `snd-intel8x0m`：

    /etc/modprobe.d/modprobe.conf

    blacklist snd-intel8x0m

在`alsamixer` 或 `amixer`中靜音「External Amplifier」 也可能有效。見 ALSA wiki。

在mixer中解除「Mix」設置的靜音也有可能有幫助。

#### 英特爾板載音效卡耳機無聲

如果是使用 Intel Corporation 82801 I (ICH9 Family) HD Audio Controller 的筆記本，可能需要將該行加入 modprobe 或 sound.conf：

    options snd-hda-intel model=model

其中 model 為下列之中的一個：

- dell-m6
- dell-vostro
- generic
- laptop
- laptop-hpsense
- olpc-xo-1_5

注意：可能需要將此「options」行置於對應於您的音效卡的「alias」行之後。

可以在內核文檔中看到所有可用的 model，如 https://docs.kernel.org/sound/hd-audio/models.html ，但請確認它是對應於您的內核版本的正確文檔版本。

可用 model 列表也見於這裡。使用以下命令即可獲知音效卡晶片名稱（其中的*應當改為符合您的相應文件的值）。注意有些晶片可能已經更名，不能直接對應於該文件中的條目。

    $ grep Codec /proc/asound/card*/codec*

注意如果進行此操作，則有很大可能所有輸入設備（內置及外置麥克風）都不能工作，所以要麼就用耳機，要麼用麥克風。如果受到此bug影響，請將其報告給ALSA。

另外，如果蜂鳴器（pcspkr）出現問題：

    options snd-hda-intel model=$model enable=1 index=0

### HDMI

#### HDMI 輸出不工作

以下流程可以用來測試 HDMI 音頻。繼續之前請確認已經通過 `alsamixer` 啟用輸出並解除其靜音。

注意：如果是使用 AMD 顯卡，則有一個必要的內核模塊默認被禁用了。詳見 ATI#HDMI 音頻輸出[損壞的連結：無效的章節]。

使用 HDMI 電纜連接 PC 與顯示器，並使用 xrandr 啟用顯示器。

用 `aplay -l` 檢測音效卡與設備編號。例如：

    $ aplay -l

    **** List of PLAYBACK Hardware Devices ****
    card 0: SB [HDA ATI SB], device 0: ALC892 Analog [ALC892 Analog]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 0: SB [HDA ATI SB], device 1: ALC892 Digital [ALC892 Digital]
      Subdevices: 1/1
      Subdevice #0: subdevice #0
    card 1: Generic [HD-Audio Generic], device 3: HDMI 0 [HDMI 0]
      Subdevices: 1/1
      Subdevice #0: subdevice #0

向設備發送音頻。按照上面步驟的例子，將音頻發送到 `card 1`， `device 3`：

    $ aplay -D plughw:1,3 /usr/share/sounds/alsa/Front_Center.wav

若 aplay 沒有任何報錯，但還是聽不到聲音，「重啟」功放、顯示器或電視機。由於 HDMI 接口在連接時會進行握手，它在之前可能會發現沒有音頻流嵌入，於是禁用音頻解碼。如果使用獨立的窗口管理器，可能需要在聲音正在播放時插入 HDMI 電纜。

mplay 及其他應用可以配置為使用特別的 HDMI 設備作為音頻輸出。但 flashplugin 只能使用默認設備。以下方法可以覆蓋默認設備，但在從 HDMI 接口斷開電視的時候就需要改回去。

若測試成功，創建或編輯 `~/.asoundrc` 文件，以將 HDMI 設為默認音頻設備。

    ~/.asoundrc

    pcm.!default {
        type hw
        card 1
        device 3
    }

或者如果以上配置不奏效，請嘗試：

    ~/.asoundrc

    defaults.pcm.card 1
    defaults.pcm.device 3
    defaults.ctl.card 1

或者如果使用

    $ speaker-test -Dplug:hdmi

在 HDMI 或 DisplayPort 上測試成功，可以使用以下配置（在聯想 ThinkPad T430s 上測試成功）：

    ~/.asoundrc

    pcm.!default {
        type plug
        slave.pcm "hdmi"
    }

#### HDMI 5.1 聲音發送到了錯誤的揚聲器

可通過 ALSA 的 `remap` 功能將聲音重定向到想要的揚聲器。為此，將以下內容加入 `/etc/asound.conf`：

    pcm.!hdmi-remap {
        type asym
        playback.pcm {
            type plug
            slave.pcm "remap-surround51"
        }
    }

    pcm.!remap-surround51 {
        type route
        slave.pcm "hw:0,3"
        ttable {
            0.0= 1
            1.1= 1
            2.4= 1
            3.5= 1
            4.2= 1
            5.3= 1
        }
    }

## 應用

### SDL：SDL 應用沒有聲音

如果在使用基於 SDL 的應用時聽不到聲音，嘗試設置環境變量 `SDL_AUDIODRIVER` 為 `alsa`。

### OpenAL：使用 OpenAL 的應用沒有聲音

Openal 默認使用 pulseaudio，要更改次序，將以下配置加入 `/etc/openal/alsoft.conf`：

    drivers=alsa,pulse

### VirtualBox：虛擬機沒有聲音

如果你在使用VirtualBox的時候出現問題，嘗試以下命令：

    $ alsactl init

    Found hardware: "ICH" "SigmaTel STAC9700,83,84" "AC97a:83847600" "0x8086" "0x0000"
    Hardware is initialized using a generic method

同時你需要在你的音頻軟體中激活ALSA輸出。也可以嘗試在虛擬機設置中選擇不同的聲音設備，從而找到能夠工作的。

### 其他：一般性應用問題

對於其它堅持採用其自身音頻設置的應用，如 XMMS 或 MPlayer，需要設置其特定選項。

對於 MPlayer 或 mpv，將以下行加入相應的配置文件：

    ao=alsa

如對於 XMMS2，進入其選項並確保聲音驅動設為 ALSA 而非 oss。

要在 XMMS 中進行此操作：

- 打開 XMMS
  - Options > Preferences.
  - 選擇 ALSA 輸出插件。

對於不提供 ALSA 輸出的應用，可以使用來自 alsa-oss包 軟體包的 aoss。要使用 aoss，請在運行程序時加上 `aoss` 前綴，例如：

    aoss realplay

pcm.!default{ ... } 對於我（原作者）來說不管用了。下面這些還可以用：

    pcm.default pcm.dmixer

## 其他問題

### 同時播放時出現問題

如果您在同時播放時遇到問題，且安裝了 PulseAudio ，則其默認配置是「獨占」音效卡。一些 ALSA 用戶可能對自己的配置已經很滿意，不希望使用 PulseAudio。 解決方案是編輯 `/etc/asound.conf` 並注釋掉以下內容：

    # Use PulseAudio by default
    pcm.!default {
        type pulse
        fallback "sysdefault"
        hint {
            show on
            description "Default ALSA Output (currently PulseAudio Sound Server)"
        }
    }

注釋掉以下內容可能也有幫助：

    ctl.!default {
        type pulse
        fallback "sysdefault"
    }

比起完全卸載 PulseAudio，這大概是個更簡單的方法。

相應地，以下是一個可用的 /etc/asound.conf 的示例：

    pcm.dmixer {
        type dmix
        ipc_key 1024
        ipc_key_add_uid 0
        ipc_perm 0660
    }
    pcm.dsp {
        type plug
        slave.pcm "dmix"
    }

注意：此 `/etc/asound.conf` 本來是配合 MPD 全局配置使用的，在該情況下工作正常。見 #同一時間只有一個用戶可以使用。
注意：或者，如果沒有安裝 PulseAudio，只是想在原版 ALSA 下使用 `dmix` 的話，見 上游文檔。特別地，可能需要將上述配置中的 `dsp` 換成 `!default`。另外，如果察覺到該操作導致某些應用在播放時出現跳躍（聲音聽起來不流暢）， and complain about underrun occurring, 可能需要在 `pcm.dmixer` 中調整 `slave.buffer_size`。

### 刪除舊的 ALSA 狀態文件

alsa-utils包 軟體包提供了 `alsa-store.service` ，在系統關機時會自動將當前 ALSA 狀態保存到 `/var/lib/alsa/asound.state`。對於嘗試重置當前 ALSA 狀態的用戶來說這可能會帶來問題，因為每次關機時都會以當前狀態重新創建 `asound.state` 文件（如試圖從混音器移除用戶定義的通道時）。通過創建以下空文件，可暫時禁用 `alsa-store.service` 服務：

    # mkdir -p /etc/alsa
    # touch /etc/alsa/state-daemon.conf

`state-daemon.conf` 的存在會阻止 `alsa-store.service` 在關機時保存 `asound.state`。禁用該服務後，可以這樣刪除 `asound.state` 文件：

    # rm /var/lib/alsa/asound.state

重啟之後，之前的 ALSA 狀態應該會丟失，當前狀態應該會重置到默認值。刪除我們創建的條件文件來重新啟用 `alsa-store.service`：

    # rm /etc/alsa/state-daemon.conf

下次關機時應該就會以 ALSA 默認值重新創建 `asound.state` 文件。也可以用此命令立即生成該文件：

    # alsactl store

如果想要清除 ALSA 狀態而不重啟，可使用 `rmmod` 移除聲音驅動模塊，然後手動刪除 `asound.state` 中不想要的條目，然後用 `modprobe` 重新安裝聲音驅動模塊。

### 同一時間只有一個用戶可以使用

你可能會發現同一時間只有一個用戶可以使用 dmixer。對於大多數情況這樣也許可以，但對於以單獨用戶運行 mpd 的人來說就會造成問題。當 mpd 正在播放，普通用戶就不能通過 dmixer 播放聲音。儘管確實可以在用戶的登錄帳戶下運行 mpd，也有另一個解決方案被發現出來。將 `ipc_key_add_uid 0` 行加入 `pcm.dmixer` 塊就可以解除這一鎖定。以下是來自 `asound.conf` 的一個片段，其餘部分與上述相同。

    ...
    pcm.dmixer {
        type dmix
        ipc_key 1024
        ipc_key_add_uid 0
        ipc_perm 0660
    slave {
     ...

### 戴爾筆記本上出現爆裂或噗噗聲

檢查是否安裝了 i8kutilsAUR ，是否有程序（如 `i8kmon.service`）在讀寫該模塊提供的接口，因為 i8kutils BIOS 系統調用在一些系統上會短時阻塞內核運行。詳見 Fan speed control#Dell laptops 中的警告。

分類：​

- 聲音

隱藏分類：​

- 包含損壞章節連結的頁面

ALSA/疑難解答
新增話題