gpt4 book ai didi

linux - Alsa:如何在 2 个输出上复制流并保存系统配置?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:52 26 4
gpt4 key购买 nike

我的声卡是 Audigy SE [SB0570]。

我想同时在扬声器和耳机上播放相同的立体声流。

我在空的 ~/.asoundrc 上尝试这个配置

pcm.quad {
type multi

slaves.a.pcm "hw:0,0" #green hole
slaves.a.channels 2
slaves.b.pcm "hw:0,2" #black hole
slaves.b.channels 2

bindings.0.slave a
bindings.0.channel 0
bindings.1.slave a
bindings.1.channel 1
bindings.2.slave b
bindings.2.channel 0
bindings.3.slave b
bindings.3.channel 1
}

pcm.!default quad

它如我所愿地工作。但是现在很多流之间的共享 channel 坏了,我不能同时播放 2 个 mp3 文件。

顺便说一句,/etc/asound.conf 也是空的。我不知道真正的系统 alsa 配置在哪里,可能是这个 /var/lib/alsa/asound.state fat 非常难以理解,有 4705 行和数百个 control.# # block 。

最佳答案

你的想法是正确的。您可以使用“type multi”alsa 模块向两个不同的设备播放声音。你只需要稍微扩展它来构建完整的链。

卡片名称。通常最好使用卡片名称而不是索引:“hw:CardName,2”而不是“hw:0,2”,因为卡片索引可能会在重启时改变,而名称通常不会改变。您可以在 cat/proc/asound/cardsaplay -l 输出中看到卡片名称。对于您的卡,名称可能是“CA0106”。

混合。要允许多个应用程序同时播放,请在播放链中的“type multi”和“hw”之间放置“type dmix”。 “type dmix”模块将多个应用程序混合到同一个硬件缓冲区中。

路线。您的“type multi”模块将输入 channel 0、1、2、3 映射到从设备“a”的输出 channel 0,1 和从设备“b”的 channel 0,1,这意味着您有 4 个输入 channel ,而您有只有 2 个 channel (立体声)。要将 2 声道立体声转换为 4 声道以用于“type multi”,请在其前面加上“type route”pcm 将声道 0,1 复制到 0,1 和 2,3。

插入。不同的应用程序可能会尝试播放您的硬件不直接支持的格式/速率。因此,将“type plug”自动转换模块放在播放链链的首位是一个很好的做法——它会将任何输入格式/速率转换为支持的输出。

整体播放链如下:

default = plug -> route -> multi -> (dmix->hw:CA0106,0 + dmix->hw:CA0106,2)

Asym:但这只是回放链。如果您想将“默认”pcm 指向它是不够的,因为“默认”是一个默认用于播放和捕获的pcm。要允许应用程序从“默认”录制,您需要使用“type asym”模块为其定义不同的播放和捕获链。捕获链看起来像:

default = plug <- dsnoop <- hw

(“type dsnoop”是一个类似 dmix 的捕获模块——它允许多个应用程序从同一设备捕获)

您可以手动定义每个 pcm,但我建议走捷径并重用预定义的“plug”、“dmix”和“dsnoop”pcm(在 /usr/share/alsa/alsa.conf 中定义)。配置文件/usr/share/alsa/pcm/dmix.conf/usr/share/alsa/pcm/dsnoop.conf)。那么整个配置将是:

pcm.quad {
type multi
slaves.a.pcm "dmix:CA0106,0"
slaves.a.channels 2
slaves.b.pcm "dmix:CA0106,2"
slaves.b.channels 2
bindings.0 { slave a; channel 0; }
bindings.1 { slave a; channel 1; }
bindings.2 { slave b; channel 0; }
bindings.3 { slave b; channel 1; }
}
pcm.stereo2quad {
type route
slave.pcm "quad"
ttable.0.0 1
ttable.1.1 1
ttable.0.2 1
ttable.1.3 1
}
pcm.!default {
type asym
playback.pcm "plug:stereo2quad"
capture.pcm "plug:dsnoop:CA0106"
}

将其放入 ~/.asoundrc(仅限您的用户)或 /etc/asound.conf(所有用户)。

PS:人们通常希望在重新启动时保留他们的卷。许多发行版在关机时运行 alsactl store 以保存当前音量控制,并在启动时运行 alsactl restore 以加载这些音量控制。默认情况下,alsactl 将这些音量控制保存在 /var/lib/alsa/asound.state 中。这是该文件的唯一目的。

链接:

关于linux - Alsa:如何在 2 个输出上复制流并保存系统配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43939191/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com