Linux

無聲音的 ALSA、PulseAudio 和 Intel HDA PCH

  • June 10, 2021

我只有一個板載音效卡,它是 Realtek ALC298,我不需要任何高級聲音配置。只是一個可以收聽 youtube 影片、看電影等的工作音響系統……到目前為止,我已經關注了許多線上文章。總結一下我嘗試過的所有內容:

  1. 確定通道是否靜音。我使用alsamixer並檢查了pavucontrol,兩者都沒有顯示靜音通道。我在第 3 步(請閱讀下文)時重複了此步驟,並且不時顯示新頻道,但最終沒有聲音。
  2. 弄清楚是 ALSA 還是 PulseAudio 問題。所以我用aplay -l
**** 播放硬體設備列表 ****
卡 0:PCH [HDA Intel PCH],設備 0:ALC298 模擬 [ALC298 模擬]
子設備:1/1
子設備#0:子設備#0
卡 0:PCH [HDA Intel PCH],設備 3:HDMI 0 [HDMI 0]
子設備:1/1
子設備#0:子設備#0
卡 0:PCH [HDA Intel PCH],設備 7:HDMI 1 [HDMI 1]
子設備:1/1
子設備#0:子設備#0
卡 0:PCH [HDA Intel PCH],設備 8:HDMI 2 [HDMI 2]
子設備:1/1
子設備#0:子設備#0
卡 0:PCH [HDA Intel PCH],設備 9:HDMI 3 [HDMI 3]
子設備:1/1
子設備#0:子設備#0
卡 0:PCH [HDA Intel PCH],設備 10:HDMI 4 [HDMI 4]
子設備:1/1
子設備#0:子設備#0

從那裡使用了一個 PCM 格式的 wav 文件aplay -D plughw:0,0 test.wav,它給出了:

播放 WAVE 'test.wav':有符號 32 位 Little Endian,速率 44100 Hz,立體聲

但是什麼都沒有!沒有聲音,揚聲器或耳機。我得出的結論是這是一個 ALSA 問題,而不是 PulseAudio 問題,但我確實有疑問,因為 PulseAudio 守護程序在整個步驟中都在執行。作為一個有趣的旁注,當我執行此步驟時,gnome 聲音設置顯示條形音箱正在移動,就好像正在播放一樣:D

  1. 在核心網站上找到了一篇關於 HDA 音頻和核心能夠動態重新配置音頻編解碼器而無需重新啟動機器的文章。我設法找到並使用了作為repohdajackretask一部分的實用程序, 它為我提供了一個 GUI。alsa-tools此實用程序將引腳修改寫入user_pin_configs文件(僅供參考,重啟後手動驗證)。但是,我無法弄清楚引腳重新分配的正確組合。以下是可以重新分配的引腳:
0x12
0x13
0x14
0x17
0x18
0x19
0x1a
0x1d
0x1e
0x1f
0x21
  1. 我的想法是基本上使用ALC269模型,因為我在Google搜尋時看到了一個有趣的更新檔文件。連結適用於 rasp pi,但我認為值得一試的ALC269受支持的核心 HDA 音頻模型。雖然這並沒有改變什麼,但也許有人可以從中受益。

任何幫助在這裡表示讚賞。我遠遠超出了我的Linux技能。

PS: manjaro, linux56 雖然所有發行版的音效卡都有相同的問題。在過去的幾個月裡,我幾乎安裝了所有發行版,希望聲音能正常工作。

編輯 1

添加了一個pastebinalsa-info.sh獲取更多資訊。

好消息!一位名叫 ronincoder 的非常聰明的 Arch 使用者發現了耳機插孔的修復方法。我與 ronincoder 合作製作核心更新檔

$$ 1 $$我們的更新檔進入了 5.7 核心版本!它也被應用於 5.4 LTS 核心。我啟動了 5.7.2 和 5.4.46,耳機插孔的音頻響亮而清晰。:) 對你起作用嗎?如果您有三星 Notebook 9 Pro NP930SBE-K01US 或 NP930MBE-K04US(ronincoder 是前者,我的是後者),則應該如此。您可以通過執行 alsa_info.sh 並查看“Board Name”來檢查您的筆記型電腦型號。NP930SBE-K01US 和 NP930MBE-K04US 中的 Realtek ALC298 編解碼器分別使用“子系統 ID”0x144dc169 和 0x144dc176 標識自己。如果 snd_hda_intel 看到其中任何一個 id,它就會實施修復。

揚聲器呢?我在核心 bugzilla 上報告了 no-sound-on-internal-speakers 問題

$$ 2 $$. Linux 聲音維護者 Jaroslav Kysela 推測可能有一些放大器連接到 HDA 編解碼器,這些放大器沒有被 BIOS 初始化,因此在 Linux 中不活動。他建議使用 QEMU 轉儲 Windows 驅動程序的編解碼器通信。然後,我們可以使用 Early Patching 解析轉儲並在 Linux 中重放通信$$ 3 $$或編寫另一個核心更新檔。Jaroslav 提出這個建議已經一個月了,我已經取得了一些進展,但我仍然沒有很好的轉儲。如果您想幫助我,請加入關於核心 bugzilla 的討論。^^ $$ 1 $$作為參考,我們的更新檔作為送出 14425f1f521f 進入了 Linus 的樹(ALSA:hda/realtek:為三星筆記本添加 quirk)。 $$ 2 $$ https://bugzilla.kernel.org/show_bug.cgi?id=207423 $$ 3 $$ https://www.kernel.org/doc/html/v4.17/sound/hd-audio/notes.html#early-patching

引用自:https://unix.stackexchange.com/questions/579486