ALSA、PulseAudio 和 Intel HDA PCH 無聲音

ALSA、PulseAudio 和 Intel HDA PCH 無聲音

我只有一個板載音效卡,即 Realtek ALC298,並且我對進階聲音配置沒有任何需求。只是一個可以聽 YouTube 影片、看電影等的有效音響系統......到目前為止,我已經關注了很多線上文章。總結我嘗試過的所有方法:

  1. 確定通道是否靜音。我使用alsamixer並檢查了pavucontrol,兩者都顯示沒有靜音通道。我在第三步時重複了此步驟(請參閱下文),並且確實不時顯示新頻道,但最終沒有聲音。

  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 守護程序在整個步驟中都在運行。作為一個有趣的旁注,當我執行此步驟時,侏儒聲音設定顯示條形音箱正在移動,就像正在播放某些東西一樣:D

  1. 我找到了一個內核網站上的文章關於 HDA 音訊和無需重新啟動電腦即可動態重新配置音訊編解碼器的核心能力。我設法找到並使用了該hdajackretask實用程序,它是存儲庫的一部分 alsa-tools,它為我提供了一個 GUI。此實用程式將引腳修改寫入user_pin_configs檔案(僅供參考,重新啟動後手動驗證此)。但是我無法找出引腳重新分配的正確組合。以下是可以重新分配的引腳:
0x12
0x13
0x14
0x17
0x18
0x19
0x1a
0x1d
0x1e
0x1f
0x21
  1. 我的想法基本上是使用ALC269模型,因為我看到了有趣的補丁文件當谷歌搜尋時。連結是針對 rasp pi 的,但我認為值得一試,因為它ALC269支援的內核 HDA 音訊模型。雖然這並沒有改變什麼,但也許有人可以從中受益。

在此感謝任何幫助。我的 Linux 技能遠遠超出了我的能力。

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

編輯1

添加了一個帕斯特賓alsa-info.sh了解更多。

答案1

好消息!一位名叫 ronincoder 的非常聰明的 Arch 用戶發現了耳機插孔的修復方法。我與 ronincoder 合作製作了一個內核補丁 [1],我們的補丁已進入 5.7 核心版本!它也被應用於 5.4 LTS 核心。我啟動了 5.7.2 和 5.4.46,耳機插孔的音訊響亮而清晰。 :)

對你起作用嗎?如果您有三星筆記本 9 Pro NP930SBE-K01US 或 NP930MBE-K04US(ronincoder 的是前者,我的是後者),則應該如此。您可以透過執行 alsa_info.sh 並查看「主機板名稱」來檢查您的筆記型電腦型號。 NP930SBE-K01US 和 NP930MBE-K04US 中的 Realtek ALC298 編解碼器分別使用「子系統 ID」0x144dc169 和 0x144dc176 來識別自身。如果 snd_hda_intel 看到這些 id 中的任何一個,它就會實施修復。

揚聲器怎麼樣?我報告了核心 bugzilla 上的內部揚聲器無聲音問題 [2]。 Linux 聲音維護者 Jaroslav Kysela 推測可能有一些放大器連接到 HDA 編解碼器,但這些放大器未由 BIOS 初始化,因此在 Linux 中未啟動。他建議使用 QEMU 轉儲 Windows 驅動程式的編解碼器通訊。然後,我們可以解析轉儲並使用 Early Patching [3] 或編寫另一個核心補丁在 Linux 中重播通訊。雅羅斯拉夫提出這個建議已經一個月了,我已經取得了一些進展,但我仍然沒有很好的轉移。如果您願意幫助我,請加入有關核心 bugzilla 的討論。 ^^

[1] 作為參考,我們的補丁將其作為提交 14425f1f521f 放入 Linus 樹中(ALSA:hda/realtek:為三星筆記本添加怪癖)。 [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

答案2

在elementaryOS(基於Ubuntu 20.04)上,透過編輯設定檔sudo vim /etc/modprobe.d/alsa-base.conf並替換來修復我的MacBook Pro 2012上沒有聲音的問題

options snd-hda-intel model=generic

經過

# options snd-hda-intel model=generic
options snd-hda-intel probe_mask=1

進一步的解釋細節:

注意:我不確定為什麼會出現沒有聲音的問題,或者之前發生了什麼變化,因為它在安裝後一開始就可以工作。

但是,pacmd list-cards在終端機中查詢時,輸出會從(修復之前)更改為:

ports:
    analog-input-mic: Mikrofon (priority 8700, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-input-microphone"
    analog-output-speaker: Lautsprecher (priority 10000, latency offset 0 usec, available: unknown)
        properties:
            device.icon_name = "audio-speakers"
    analog-output-headphones: Kopfhörer (priority 9900, latency offset 0 usec, available: no)
        properties:
            device.icon_name = "audio-headphones"
    iec958-stereo-output: Digitalausgang (S/PDIF) (priority 0, latency offset 0 usec, available: unknown)
        properties:

到(修復後):

ports:
    [Out] Speaker: Speaker (priority 100, latency offset 0 usec, available: unknown)
        properties:
            
    [Out] Headphones: Headphones (priority 200, latency offset 0 usec, available: no)
        properties:
            
    [In] Mic2: Headphones Stereo Microphone (priority 200, latency offset 0 usec, available: unknown)
        properties:

(請注意此處語法的差異。)

另外,輸出sudo vim aplay -l從(修復之前)更改為:

Karte 0: PCH [HDA Intel PCH], Gerät 0: Generic Analog [Generic Analog]
  Sub-Geräte: 0/1
  Sub-Gerät #0: subdevice #0
Karte 0: PCH [HDA Intel PCH], Gerät 1: Generic Digital [Generic Digital]           
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

到(修復後):

Karte 0: PCH [HDA Intel PCH], Gerät 0: CS4206 Analog [CS4206 Analog]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0
Karte 0: PCH [HDA Intel PCH], Gerät 1: CS4206 Digital [CS4206 Digital]
  Sub-Geräte: 1/1
  Sub-Gerät #0: subdevice #0

答案3

所以這裡的問題是 Realtek 的 ALC298 有不同的匯流排要求,即 I2S。從 linux56 開始,不支援 I2S 音訊編解碼器,這似乎是新標準。聯想、三星和華為似乎使用了符合這一新 I2S 標準的聲卡,我發現關於此問題有很多未解決的線程/主題被遺棄。

我找到了一種修復耳機的解決方法,該方法對我和另一個使用Samsung Notebook Pro 9 的人有效。 、模型和其他特定於ALSA 的設定屬性。您可以找到完整的信息,包括替代的自訂內核補丁Arch Linux 論壇

答案4

試試下面的這些說明。因為他們可以解決我的系統上類似的問題。

  1. 您執行“aplay”命令,但什麼也沒聽到。運行“sudo aplay”命令怎麼樣?如果 ALSA 正在工作,您可以聽到聲音。

  2. 我認為pulseaudio正在您的系統中運行。但 alsa-lib 和 snd-hda-intel 驅動程式之間可能存在一些相容問題。

    $pacmd 列表卡

檢查“連接埠”上的結果。如果看不到與揚聲器相關的內容,則表示pulseaudio無法辨識音效卡。

  1. 編輯“/usr/share/alsa/ucm2/HDA-Intel/HDA-Intel.conf”檔案。如果您在“Define.Use”後面看到一個空字串,只需在該字串中輸入“3”即可。然後保存。

  2. 重新啟動您的機器。如果仍然聽不到任何聲音,請檢查聲卡是否為“Dummy Output”。如果是這樣,請將“options snd-hda-intel model=generic”添加到“/etc/modprobe.d/alsa-base.conf”的末尾。

這個問題主要是由“HDA-Intel.conf”引起的。我真的不明白為什麼開發人員將“Define.Use”字串保留為空。

相關內容