如何使用 ALSA 或 PulseAudio 将立体声源重新映射到 8 通道 PCM 并降低音量?

如何使用 ALSA 或 PulseAudio 将立体声源重新映射到 8 通道 PCM 并降低音量?

我的设置详细信息如下:

内置英特尔高清卡(card0),我现有的所有应用程序默认使用该卡。通常,立体声输出从立体声文件和流应用程序输出到卡。

我现在添加了一个 USB 声卡(卡 1: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 模块配置(以更有意义的为准),它可以实现我想要的通道重新映射和音量降低。谢谢!

答案1

这可以通过插件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 替换为较小的值。

答案2

感谢@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 将每个通道的音量级别降低到我想要的水平。我最终重新映射到所有通道以使配置更容易 - 我不必担心映射是否正确,并且重新映射到未使用的通道似乎没有坏处,尽管我会监视潜在的性能影响。

相关内容