我是 Linux Ubuntu 的新手,也是 Windows 的長期用戶,很高興我要轉換。在設定我的桌上型電腦時,大約每 2 秒我就會聽到煩人且重複的揚聲器「爆裂聲」。無論音量大小如何,都會發生這種爆裂聲。如果我拔掉揚聲器的音訊插孔,並僅使用主機板內建的揚聲器,它就會停止。如果我播放聲音,爆音會在播放聲音時停止,並持續約 5 秒,然後恢復。
我正在運行 Linux Ubuntu 18.04.3 LTS。系統資訊報告兩個音訊適配器,HDA-Intel - HDA ATI SB 和 HDA-Intel - HDA NVidia
我最終確實找到了這個問題的解決方案,但我沒有足夠的聲譽點來一起發布問答。
答案1
作業系統的預設行為是在 10 秒後關閉音訊適配器以節省電力。此省電功能會導致爆音,可以停用。
在終端機中鍵入sudo nano /sys/module/snd_hda_intel/parameters/power_save
並將值從 1 變更為 0。
然後鍵入sudo nano /sys/module/snd_hda_intel/parameters/power_save_controller
並將值從 Y 更改為 N。
在我的系統上,這立即解決了音頻爆音問題。然而,重新啟動後,問題又出現了,我發現這些值已經重置。為了保持這些值持久,我必須添加一行程式碼,/etc/modprobe.d/alsa-base.conf
我在文件中的最後一行程式碼之後添加了這行程式碼,options snd-hda-intel power_save=0 power_save_controller=N
儲存文件,然後就可以開始了!
我的大部分資訊都來自這個影片:https://www.youtube.com/watch?v=Pdmy8dMWitg
我必須拼湊出「重新啟動後的持久性」部分,即使我沒有安裝 TLP,我的設定也確實重置了。請注意,影片另有聲明。
在我弄清楚這一點之前,我對 Ubuntu 感到非常沮喪。我希望這可以幫助很多人解決他們的音訊問題!
答案2
作為 @Glen 回答的後續內容,這裡是執行該任務的腳本:
fix_ubuntu_18_04_sound_pop_issue(){
__heredoc__="""
Script that fixes a popping sound due to a power saving feature
References:
https://superuser.com/questions/1493096/linux-ubuntu-speakers-popping-every-few-seconds
https://www.youtube.com/watch?v=Pdmy8dMWitg
"""
sudo echo "obtaining sudo"
# First, there are two system files that need modification
# Changing the values here should fix the issue in your current session.
cat /sys/module/snd_hda_intel/parameters/power_save
cat /sys/module/snd_hda_intel/parameters/power_save_controller
# Flip the 1 to a 0
sudo sh -c "echo 0 > /sys/module/snd_hda_intel/parameters/power_save"
# Flip the Y to a N
sudo sh -c "echo N > /sys/module/snd_hda_intel/parameters/power_save_controller"
# To make this change persistant we must modify a config file
if [ -f "/etc/default/tlp" ]; then
# Some systems (usually laptops) have this controlled via TLP
sudo sed -i 's/SOUND_POWER_SAVE_ON_BAT=1/SOUND_POWER_SAVE_ON_BAT=0/' /etc/default/tlp
# This line contained a typo, addressed on 2020-10-11 11:11 Bcn time
sudo sed -i 's/SOUND_POWER_SAVE_CONTROLLER=Y/SOUND_POWER_SAVE_CONTROLLER=N/' /etc/default/tlp
elif [ -f "/etc/modprobe.d/alsa-base.conf" ]; then
# Append this line to the end of the file
text="options snd-hda-intel power_save=0 power_save_controller=N"
fpath="/etc/modprobe.d/alsa-base.conf"
# Apppend the text only if it doesn't exist
found="$(grep -F "$text" "$fpath")"
if [ "$found" == "" ]; then
sudo sh -c "echo \"$text\" >> $fpath"
fi
cat "$fpath"
else
echo "Error!, unknown system audio configuration" 1>&2
exit 1
fi
}
答案3
作為格倫答案的附錄,出於安全原因,最好使用sudoedit
代替sudo nano
。請注意,您還需要設定EDITOR
環境變數。
所以,而不是:
sudo nano /sys/module/snd_hda_intel/parameters/power_save
使用
EDITOR=nano sudoedit /sys/module/snd_hda_intel/parameters/power_save
而不是
sudo nano /sys/module/snd_hda_intel/parameters/power_save_controller
使用
EDITOR=nano sudoedit /sys/module/snd_hda_intel/parameters/power_save_controller
這個超級用戶問題充分解釋了為什麼更好的原因sudoedit
,sudoedit:為什麼要使用它而不是 sudo vi?