我有两个不同的 PCM 样本流。是否有可能以某种方式混合它们并在同一输出设备上与 ALSA 一起玩?
我读到它可能可以使用混音器,但由于缺乏文档,我发现很难理解。任何人都可以提供一些关于如何实施的更多信息(如果确实如此)?
谢谢!
为此,请检查您是否有 .asoundrc 文件我们的系统。如果它不存在,则创建一个,您可以将其放在 /home 文件夹中。使用以下设置更新它:
pcm.!default {
type plug
slave.pcm "dmixer"
}
pcm.dmixer {
type dmix
ipc_key 1024
slave {
pcm "hw:1,0"
period_time 0
period_size 1024
buffer_size 4096
rate 44100
}
bindings {
0 0
1 1
}
}
ctl.dmixer {
type hw
card 0
}
用于$aplay -l
获取系统上的设备列表。hw:X,Y 来自您的硬件映射,其中 X 是卡号,而 Y 是设备号。
现在,打开终端,播放您的第一个 PCM 流:
$aplay -f cd pcm_sound1.wav
在其他选项卡中,播放您的第二个 PCM 流:
$aplay -f cd -D default pcm_sound2.wav
它将混合您的两个 PCM 数据流。
干杯,
我不确定这是否值得单独回答。我使用了 HSC 的答案和“ALSA Wiki - The Dmix Howto”中的示例。Dmix 文档确实有点令人沮丧。
这是一个~/.asoundrc
对我有用的例子。“绑定”部分是不必要的,但 HOWTO 说它有助于“多通道芯片工作得更快”(不确定我是否关心?)。如果我绑定“0 1 1 0”,那么它会切换右/左声道。如果我绑定“0 1 1 1”,那么我的右耳会出现垃圾......显然ipc_key
是必需的参数;我只是选择了一个随机整数。
# example 1
pcm.hw3mix {
type dmix
ipc_key 1939 # must be unique
slave {
pcm "hw:3"
period_time 0
period_size 1024 # must be power of 2
buffer_size 4096
rate 44100
}
bindings {
0 0
1 1
}
}
pcm.!default hw3mix
最后一行使我的新hw3mix
设备成为默认设备。
我将上述简化为:
# example 2
pcm.hw3mix {
type dmix
ipc_key 1939 # must be unique
slave { pcm "hw:3" }
}
pcm.!default hw3mix
它似乎工作得很好。
正如上面 ALSA Wiki 链接所建议的那样,我可以进一步将其简化为:
# example 3
pcm.dsp0 {
type plug
slave.pcm "dmix"
}
pcm.!default dsp0
这可以进一步简化为:
# example 4
pcm.!default {
type plug
slave.pcm "dmix"
}
甚至:
# example 5
pcm.!default plug:dmix
但是,最后三个示例不允许我为 Dmix 插件指定参数。我想创建一个将多个流混合到“hw:3”的设备。我认为这必须指定为 Dmix 的参数,因为它不是默认设备,所以我使用上面的第二个示例。在我的实际~/.asoundrc
中,还有一个名为“hw0mix”的“hw:0,0”块,因此通过更改以下行的注释,我可以在耳机和扬声器之间切换(新创建的)流的输出:
#pcm.!default hw0mix
pcm.!default hw3mix
注意:以上是指“hw:0,0”和“hw:3”之类的设备……很难找到如何确保我的各种USB声音设备的设备号稳定,我在这里找到了说明在“订购多张相同类型的卡”下。配置由/etc/modprobe.d/
. 这就是我如何获得像 0 和 3 这样的数字来在重新启动时引用相同的设备。