要求

要求

是否有一个程序可以像wireshark一样工作,但不是网络流量,而是捕获原始声音并将其保存到文件中?

我知道网络流量是一个协议三明治,声音与它并不真正相似,但我将其与wireshark进行比较以突出其操作。

要求

  • 临时启动用户空间程序。
  • 从特定声卡或系统范围捕获声音
  • 将其保存到文件中以供检查,最好是原始脉冲编码调制 (PCM)

我在这里并不追求任何保真度,即使是一个以 44Khz 采样的通道就足够了,甚至低于这个频率也可以。

最终,我希望能够查看捕获的数据并对其进行自己的分析。

类似但不完全一样

randomsound [1] 看起来与我想要的类似,但它会进行自己的分析,并且仅将熵注入内核随机性池中。它不保存原始数据。

接下来,我看了Audacity。该程序允许我捕获麦克风流,但不能捕获机器上播放的任何内容的流。因此,即使我能够使用命令行启动 Audacity 并捕获流。这还不够,因为它只能捕获“输入”设备。

[1]https://github.com/jimcrayne/randomsound

答案1

这似乎是一个非常标准的设置 - 您正在寻找的称为监视器设备,它内置于您的音响系统 PipeWire(或者可能仍然是 Pulseaudio,但它们具有相同的接口,所以这并不重要)。

您可能已经可以使用它:运行

pactl list short sources

并查找其Name: field ends in.monitor` 的内容。

您可以开箱即用地记录该内容parecord。或者,如果您想立即压缩它,请使用ffmpeg

ffmpeg \
     -f pulse \
     -i alsa_output.pci-0000_00_1b.0.analog-stereo.monitor \
     -c:a libopus -b:a 128k \
     recording.opus

其中-f pulse告诉ffmpeg从 PulseAudio/PipeWire 获取输入,-i {Device name}说明从哪个设备(如 所列pactl list short sources),-c:a libopus使用广泛可用且非常好的 OPUS 编解码器,并将-b:a 128k比特率设置为 128 kb/s(通常与未压缩的音频无法区分)。


大胆:问题儿童

然而,至少据我所知,Audacity 并不完全支持您的现代音响系统(考虑到它的用途,这有点不幸)。

我们必须告诉您的系统模拟实际的音频硬件设备。幸运的是,这并不太难。

.asoundrc打开主目录中的文件。它可能还不存在;只需创建它(例如,使用touch ~/.asoundrc)。

接下来,我们找出要使用的设备:我们过滤 的输出pactl list short sources,查找带有 的行.monitor

pactl list short sources | grep  '\.monitor'

我想要从这里为我列出的这些设备中alsa_output.pci-0000_00_1b.0.analog-stereo.monitor;你的可能有不同的称呼。复制那个名字。

然后,编辑~/.asoundrc(在文本编辑器中)并添加:

pcm.analog_out_monitor {
  type pulse
  device alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
}

ctl.analog_out_monitor {
  type pulse
  device alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
}

(当然,请使用我使用过的设备的名称。)

重新启动大胆。您analog_out_monitor现在应该看到一个输入设备。

相关内容