![使用 ALSA 与 dmix 和 multi 插件一起进行录制](https://linux22.com/image/222899/%E4%BD%BF%E7%94%A8%20ALSA%20%E4%B8%8E%20dmix%20%E5%92%8C%20multi%20%E6%8F%92%E4%BB%B6%E4%B8%80%E8%B5%B7%E8%BF%9B%E8%A1%8C%E5%BD%95%E5%88%B6.png)
我正在尝试设置 ALSA 以使用 ffmpeg 录制一些视频,因此我需要听到应用程序的声音并能够录制它(实际上我可能需要录制 1 个特定的应用程序)。录音麦克风并不是那么重要,但它甚至没有任何问题,工作正常。我只有内置声卡,没有外部声卡(尽管我的 Nvidia 显卡添加了一些音频设备)。我正在编辑~/.asoundrc
。我尝试使用 ffmpeg wiki 中的指南,但这对我来说并没有真正起作用,它没有使用 dmix,因此一次只允许 1 个应用程序播放声音。此外,由于某种原因,它甚至没有记录该应用程序的声音。我不记得为什么我放弃了这个解决方案,因为只能听到 1 个应用程序。然后我偶然发现这问题在这里。我复制了这个问题的解决方案(当然我相应地更改了默认卡),现在我的~/.asoundrc
看起来像这样:
pcm.snd_card { # my usual sound card
type hw
card 1
}
ctl.!default { # default control; alsamixer and such will use this
type hw
card 1
}
# software mixer for sound card
pcm.dmixer {
type dmix
ipc_key 1
slave.pcm "snd_card"
slave {
period_time 0
period_size 1024
buffer_size 4096
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# software mixer for loopback device
pcm.dmixerloop {
type dmix
ipc_key 2
slave.pcm "hw:Loopback,0,0"
slave {
period_time 0
period_size 1024
buffer_size 4096
channels 2 # must match bindings
}
bindings {
0 0
1 1
}
}
# allows multiple programs to capture simultaneously
pcm.dsnooper {
type dsnoop
ipc_key 2
slave.pcm "snd_card"
slave
{
period_time 0
period_size 1024
buffer_size 4096
channels 2
}
bindings {
0 0
1 1
}
}
pcm.!default {
type asym
playback.pcm "out"
capture.pcm "dsnooper"
}
# Multi, splitting onto usual card and loopback
pcm.out {
type plug
slave.pcm {
type multi
slaves {
a { channels 2 pcm "dmixer" }
b { channels 2 pcm "dmixerloop" }
}
bindings {
0 { slave a channel 0 }
1 { slave a channel 1 }
2 { slave b channel 0 }
3 { slave b channel 1 }
}
}
ttable [
[ 1 0 1 0 ] # left -> a.left, b.left
[ 0 1 0 1 ] # right -> a.right, b.right
]
}
这有效,但并不完美。问题是,我能够从应用程序和麦克风录制声音,但应用程序太安静了,在正常情况下我几乎听不到应用程序的声音(在 alsamixer 中主设置为 -5dB,应用程序本身的音量设置为 75%)并且即使我将 alsamixer 和应用程序中的音量调至 100%,这也并没有真正变得更好。另一方面,麦克风的音量正常。在alsactl restore
终端输入时我也收到一个奇怪的错误:
alsa-lib main.c:1560:(snd_use_case_mgr_open) error: failed to import hw:2 use case configuration -2
我认为这与环回设备有关,但我不确定这意味着什么。我也不确定这是否与申请量有关。这个错误重要吗?对音量有影响吗?如何固定应用程序的音量?
编辑:我从 ffmpeg wiki 切换到配置,这几次。重新启动后,alsamixer 的 Master 设置为 46%,但由于某种原因我无法更改它。另一方面,我的 slstatus(从 amixer 获取信息)显示 92%,这是我之前设置的值(-5dB)。还值得注意的是,在这种配置下,麦克风无法与 Discord 和 Steam 语音聊天一起使用,尽管它们的配置没有发生任何变化。我也听不到来自 Discord 的任何声音,我猜 Steam 语音聊天也是如此。不过,我仍然可以使用 ffmpeg 录制麦克风声音。我还可以听到其他应用程序的声音,例如 Firefox 或游戏。
编辑:看来我错了,我可以听到来自 Discord 和 Steam 语音聊天的声音。虽然 Steam 能够正确捕获我的麦克风,但 Discord 却不能。
编辑:我不确定这是否是它应该如何工作(可能是),但是当我关闭 alsamixer 中捕获麦克风时,根本没有记录任何内容。