2021年5月18日 星期二

Linux 錄音測試/麥克風除錯之作業系統篇: pavucontrol

用 pavucontrol 跟 audacity 做麥克風測試 錄影片或線上會議時, 自己覺得最煩的是我的麥克風的聲音錄不起來/對方聽不見。 (攝影機我不太開, 所以比較沒 (遇到) 問題。) 更煩的是通常看不見錯誤訊息, 不知道該如何除錯。

最近搜尋 「linux sound architecture」 跟 「linux audio stack」 (特別是圖片搜尋), 粗略讀了幾篇, 總算有個較清楚的概觀。 大推最簡單清楚的 12 兩篇, 特別是 LearnDigitalAudio 的簡單明瞭金字塔圖。 簡單地說, 硬體之上是提供統一 API 的 ALSA, 再上去是可以接受多音源/可以混音的 PulseAudio (那些對於延遲零容忍的專業人士們則採用 JACK ), 最上層則是應用軟體。 以前我都只會開 (較低階的) alsamixer 來檢查麥的問題, 明明麥已啟用卻還是有可能錄不出聲音; 現在知道了: 應該開比較高階的 pavucontrol (PulseAudio Volume Control) 來看。 它比較接近應用程式、 用起來比較簡單、 也比較常是問題的來源。

啟動 pavucontrol 之後, 切到 「輸入裝置」 分頁。 試著把麥克風插入電腦後面的孔、 等幾秒、 拔掉、 再插入前面的孔。 過程中你會在 pavucontrol 視窗上看到它自動偵測到裝置 (麥) 出現/消失的狀況。 確認你想用的那一顆麥已經 「設定為預設 (fallback) 裝置」 (右上角最右邊的勾)、 確認 「音訊靜音」 沒有被按下去 (右上角最左邊的消音喇叭)。 我發現有幾次應用軟體 (正在使用 jitsi 的瀏覽器、audacity) 無法把聲音送給麥克風, 都是因為預訊裝置突然跳到 「monitor of 內部音效類比立體聲」。 當你製造聲響時, 有一根顯示多少分貝 (dB) 的棒子應該要抖動。 它上方的拉棒 (slider) 可以控制麥的敏感度。 調到太左邊, 錄下來的聲音會很小; 調到太右邊, 聲音不只太大, 還可能被截斷而變成破音。 如果沒有以上效果, 請見下方的除錯步驟。

再來打開聲音檔編輯軟體 audacity。 右上橫條 「點選以開始監聽」 給他點下去, 跟剛剛一樣, 會看到棒子開始隨著你的聲音抖動。 請看 我的手指彈麥測試短片。 很短, 用 celluloid 看影片時, 要勾選右下角的 「loop playlist」 讓它循環。 此時如果在 pavucontrol 視窗切換到 「錄製」 分頁, 會看到目前僅有 audacity 一個應用軟體在傾聽麥克風。 再點一次 audacity 的橫條以便停止測試, 此時 pavucontrol 的錄製分頁就變成空白一片。

[除錯步驟] 所以呢, 以後錄音/網路電話/視訊會議被對方說沒聲音時, 可以依序查看:

  1. pavucontrol 有沒有看到你插入的麥? 沒有的話, 請把麥拔掉再插進去並且稍等一下。 還是沒有的話, 請換一個麥克風插孔。
  2. pavucontrol 有沒有選取它作為預設裝置 這是我最常遇到的狀況, 有時候本來明明用得好好的, 預設裝置卻會突然自動變成 (沒有用的) "monitor of ..."。
  3. pavucontrol 沒有把它靜音吧?
  4. 你的應用軟體 (例如瀏覽器) 有沒有選擇從 PulseAudio 的預設錄音裝置傾聽?

也可以拿 audacity 測一下, 分辨出問題發生的點到底在上中下游哪個地方。 像是 jitsi 之類採用 webrtc 的 webapp, 還可以 到 echo test 網頁測試

[6/2] 現在我用 jitsi meet 時, 隨時都盯著 pavucontrol。 不知為什麼偶爾會看到麥的敏感度突然飆高, 手動拉低之後隔沒幾秒又自動跳上去。 這會造成對方不僅聽到聲音突然變大, 還會有很大的噪音。 我是採用 chromium 進入 jitsi, 然後分享 firefox 視窗。 如果改用 firefox 進入 jitsi 就不會有這個問題; 但是 firefox 在 jitsi 裡面把自己作為分享視窗時, 則會出現各種奇怪的失敗。 最後找到 這個問答

  1. 原來 chrome 系列有一個「自動調整敏感度 (gain)」的 "功能", 而 chrome 團隊不想讓用戶自行取消 這個擾人的 "功能"。 於是有人寫了 Disable Automatic Gain Control 這個擴充套件, 裝好之後瀏覽到 jiti 頁面、 點一下那個套件的按鈕就可以阻止 chrome 在這個頁面自動調整敏感度。
  2. 如果在其他的應用軟體也遇到相同的問題, 那可以試著 取消 PulseAudio 的自動調整設定cd /usr/share/pulseaudio/alsa-mixer/paths 編輯 analog-input-front-mic.conf 把 [Element Front Mic Boost] 底下的 volume = merge 改成 volume = 30 或其他適當的數字。 對於後麥的設定檔 analog-input-rear-mic.conf 也做相同的事。

[6/5] 有一天耳麥插整天,到了下午要上課時,雜音變得好大聲。 我猜是靜電累積? 拔出來在手上捏一捏 (我身體當接地線的意思), 再插回去, 雜音就變小、恢復正常了。 或是關掉電腦、 拔掉電源、 等一兩分鐘 (想像它放電?) 再重開機 -- 這一招還蠻有效的。

[2022/11/1] 後來改用 usb 麥克風, 就沒有雜音問題了。 不要再用 3.5mm 了, usb 麥克風好用!

我覺得這篇文章超級重要的, 值得讓更多 linux 用戶知道。 算是宅在家裡防疫的重要收穫之一 :-)。

2 則留言:

  1. 一兩週下來,有一些新的心得,已補入正文。

    回覆刪除
  2. wow,最近正要使用Pulse Audio 這文章真的很棒,可以拿來做參考,感謝

    回覆刪除

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。