Audio

如何使用 ALSA 或 PulseAudio 將立體聲源重新映射到 8 通道 PCM 並降低音量?

  • September 12, 2016

我的設置的詳細資訊如下:

內置 Intel HD 卡 (card0),我現有的所有應用程序都預設使用該卡。通常立體聲輸出從立體聲文件和流媒體應用程序輸出到卡。

我現在添加了一個 USB 音效卡(card1:xCORE-200,來自 XMOS),並且有一個非標準的 8 個輸出陣列:4 個高音揚聲器,4 個揚聲器。它們是對稱的,因此左側有 2 個高音揚聲器/2 個揚聲器,右側有 2 個高音揚聲器/2 個揚聲器。通道數組如下所示:

$$ 0, 1, FrontRightTweeter, RearRightTweeter, LeftRearTweeter, LeftFrontTweeter, 6, 7, 8, 9, RightFrontSpeaker, RightRearSpeaker, LeftRearSpeaker, LeftFrontSpeaker, 14, 15 $$ 分頻器已經處理好了,所以我想簡單地重新映射所有立體聲源,以便左聲道進入全新的左側,而右聲道進入全新的右側。

此外,通過手動測試,我總是不得不顯著降低音源的音量(約 90%),以便從我的新揚聲器設置中獲得合理的電平。所以我也需要能夠即時執行此操作。

我通過 .asoundrc 和 PulseAudio 模組查看了幾個使用 ALSA 的範例,但我似乎無法成功地將所有部分連接在一起——尤其是從更少的通道源到更多的通道(通常是相反的方式)。我正在尋找可以實現我正在拍攝的頻道重新映射和音量降低的範例 .asoundrc 或 PulseAudio 模組配置(以更有意義的為準)。謝謝!

這可以通過外掛ttable選項實現,該route外掛也集成在plug外掛中:

pcm.MyLittleDevice {
   type plug
   slave {
       pcm "hw:1"
       channels 16
   }
   ttable [
       [ 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 ]
       [ 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 ]
   ]
}

要減小音量,請將1s 替換為較小的值。

感謝@CL。,這是我想出的解決方案:

pcm.xcoreremapped {
   type plug
   hint {
       show on
       description "Remapping stereo to 8-ch speaker array."
   }
   slave {
       pcm "hw:1,0"
       channels 16
   }
   ttable [
       [ 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 ]
       [ 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 ]
   ]
}

0.05 將每個通道的音量降低到我想要的水平。最後我重新映射到所有通道以使配置更容易 - 我不必擔心正確映射,重新映射到未使用的通道似乎沒有害處,儘管我會監控潛在的性能影響。

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