我可以将Linux声卡的输入传输到2个不同的应用程序中吗?


2

我有一个Ubuntu 16.04.3 LTS系统

  • 华硕Xonar DGX声卡,和
  • 通用USB声卡。

在我们的教堂,我们希望能够广播服务以及将其记录为WAV文件。为了实现这一点,我将声板的3.5mm音频输出线连接到分离器上,这样就有两条线可以插入每个声卡的“Line In”接口。

然后,我使用“arecord”在一张卡上录制音频,并使用“darkice”在另一张卡上创建MP3流。

理想情况下,我希望能够同时使用一个声卡处理录音和流媒体。这样的事情可能吗?或者我使用两个声卡和两个应用程序?


要拆分管道输入,请使用tee命令。例如:“ echo hi | tee output.txt >> output2.txt”或“ echo hi | tee output.txt | tee output2.txt”或“ echo hi | tee output.txt output2.txt
TOOGAM 2017年

Answers:


1

是的,这很容易实现。你真的只运行ALSA,或者你也在运行Pulseaudio(基本上所有发行版的默认值多年)?

使用Pulseaudio,它应该开箱即用。

使用ALSA,请确保使用plughw设备名称(内部添加dsnoop插件)而不是hw设备名称。该dsnoop插件将输入流分成用于不同应用的多个流。

编辑

正如我所说,而不是-D hw:0等(修改您的硬件地址),只需使用-D plughw:0for arecord和类似的设备名称darkice

一个条件是没有其他程序hw:0直接使用。所有人都必须使用plughw:0

您不需要了解有关的详细信息dsnoop,ALSA会自动为您执行此操作。(但您可以在我链接的插件页面上阅读详细信息)。

您不必自己设置~/.asoundrc,也不必修改任何配置文件。


不,我只使用普通的旧ALSA,而不是PulseAudio。这是一个服务器,所以不需要音频输出,事实上ALSA几乎没有自定义配置 - 我只是使用带有“arecord”和“darkice”的设备,因为它们是由modprobe自动加载的。你能给我一些关于如何使用plughw / dsnoop的更多细节吗?我看到了一些配置细节/etc/modprobe.d/alsa-base.conf,但我不确定如何应用你在该文件中提到的内容。
大卫怀特

1
也许我还有一些不太对劲的东西?我正在使用arecord -D plughw:0 -f S16_LE -c2 -r 44100 -vv foo.wav并使用指定的暗色配置device = plughw:0,但似乎仍然存在阻塞。一个程序可以启动,但另一个程序将死亡DarkIce: DarkIce.cpp:1273: can't open connector [0]arecord: main:722: audio open error: Device or resource busy(取决于我开始第二个)。我错过了什么?再次感谢。
大卫怀特

你确定plughw添加了dsnoop吗?对我有用的arecord -D dsnoop:0,0是允许我在不修改alsa配置的情况下同时运行多个监听器。
LinusUnnebäck

0

我接受了dirkt的答案,这些答案让我大部分都在那里。结果我需要创建一个dsnoop接口:

/etc/asound.conf

pcm.custom_snoop_card {
    type dsnoop
    ipc_key 420042
    ipc_key_add_uid 1
    slave {
        pcm "hw:0,0"   # the actual device
        format S16_LE
        channels 2
        rate 44100
    }
}

现在我可以device = custom_snoop_card在我的darkice配置中指定,并同时进行WAV录制arecord -D custom_snoop_card -f S16_LE -c2 -r 44100 -vv myfile.wav

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.