如何在 pavucontrol 下创建播放设备?

如何在 pavucontrol 下创建播放设备?

首先,我承认我对Linux音频缺乏了解。它看起来很大,令人困惑,而且有点可怕。

我想做的是将音频从业余无线电节目传输gqrx到数字语音解码器dsd,如网络上流传的其他示例所示。

但是创建虚拟声音设备后/dev/dsp/使用:

padsp -- dsd -i /dev/dsp -o /dev/dsp -fa -ma

当我打开时,我没有看到播放设备下列出了 dsd pavucontrol(但我确实看到gqrx列出了)?我尝试了很多不同的方法,但无法dsd在播放设备下列出。需要执行此步骤才能进一步使用其他音频接收器来收听输出。

先感谢您...

答案1

为了让 Linux 音频不那么可怕,快速概述一下 Linux 音频历史(谷歌了解更多细节):

Linux 上第一个广泛使用的声音系统是开放式音响系统 (OSS),其中使用了类似的设备/dev/dsp。现在 OSS 已经过时了,但仍然有专门使用它的旧程序,因此几乎所有其他音频系统都提供模拟层,例如padspPulseaudio。

今天,Linux 中使用的基本音频系统是阿尔萨斯。它已成为内核的一部分,并为硬件提供驱动程序。设备看起来像/dev/snd/pcmC0D0p(卡 0、设备 0、播放)或/dev/snd/pcmC1D2c(卡 1、设备 2、捕获),但每个人都使用库 ( libalsa) 直接代替设备,因为您无法像 那样将内容通过管道传输到其中/dev/dsp。 ALSA可以通过配置/.asoundrc,但是这个配置文件不太人性化。

如今大多数桌面系统还配备了 Pulseaudio。它运行在ALSA之上,不仅为OSS提供了一个兼容层,也为试图访问ALSA的程序提供了一个兼容层(使用一个名为 的伪ALSA设备pulse)。您已经看到了pavucontrol,还有 和pacmd可以pactl从命令行控制 Pulseaudio(不要问我为什么有两个......)。

回到你的问题。pavucontrol运行后您应该在播放选项卡和录制选项卡中看到什么

padsp -- dsd -i /dev/dsp -o /dev/dsp -fa -ma

是类似的东西OSS emulation[dsd]。可能您对“OSS 仿真”部分感到困惑(之所以存在,是因为padspOSS 仿真)。如果您确实没有看到这一点,请编辑您的问题,其中包含运行上述命令后可能出现的任何错误,以及pactl list short clients命令运行时的输出。然后我们可以尝试调试出了什么问题。

在 Pulseaudio 中,每个音频接收器(例如,声卡的播放硬件)也有一个关联的.monitor 音频源。通过将第二个应用程序连接到.monitor第一个应用程序正在播放的接收器的源,您可以将音频从一个应用程序传输到另一个应用程序。您可以在 中执行此操作puvacontrol,如您已阅读的教程中所述。

在您的情况下,您想要监视 的声音输出gqrx,因此您可以仅使用硬件音频接收器。你可以还创建一个具有关联源的“虚拟”音频接收器.monitor,但您将听不到音频。

snd_aloop是一种仅在 ALSA 中进行环回的不同(并且有些复杂)的方法。无论如何,当你运行 Pulseaudio 时,用它。

编辑

我重现了你的问题如下这个博客条目关于如何设置dsdgqrx,除了我得到五个流(您在“播放”和“录制”下看到的pavucontrol是音频流,而不是设备),除了您的三个。我隐约记得我padsp过去遇到过一些类似的问题(它创建了多个流,而它只应该创建一个流),但它只是通过忽略额外的流来工作。我还快速浏览了一下padsp.c,流似乎仅在 I/O 发生时才创建。这可能就是为什么还没有播放流的原因。padsp自博客文章撰写以来,情况可能发生了变化,并且在此过程中出现了一些问题。

因此,在“记录”下选择一个OSS emulation[dsd]流(这些是输入dsd,它与您想要记录的内容无关),将其连接到正在播放的.monitor任何接收器的输入gqrx,向其提供有效数据(我在这里不能这样做,因为我不知道什么数据它期望,所以我无法测试),并查看是否获得播放流。

如果您只想在硬件中播放 dsd 的输出,请创建一个虚拟接收器

pacmd load-module module-null-sink sink_name=gqrx_to_dsd  sink_properties=device.description=GQRX-to-DSD

选择该接收器作为 的输出gqrx,并选择.monitor该接收器的源作为 的输入dsd。然后选择您的硬件音频接收器作为输出dsd(如果您获得播放流)。

相关内容