是否有一个程序可以像wireshark一样工作,但不是网络流量,而是捕获原始声音并将其保存到文件中?
我知道网络流量是一个协议三明治,声音与它并不真正相似,但我将其与wireshark进行比较以突出其操作。
要求
- 临时启动用户空间程序。
- 从特定声卡或系统范围捕获声音
- 将其保存到文件中以供检查,最好是原始脉冲编码调制 (PCM)
我在这里并不追求任何保真度,即使是一个以 44Khz 采样的通道就足够了,甚至低于这个频率也可以。
最终,我希望能够查看捕获的数据并对其进行自己的分析。
类似但不完全一样
randomsound [1] 看起来与我想要的类似,但它会进行自己的分析,并且仅将熵注入内核随机性池中。它不保存原始数据。
接下来,我看了Audacity。该程序允许我捕获麦克风流,但不能捕获机器上播放的任何内容的流。因此,即使我能够使用命令行启动 Audacity 并捕获流。这还不够,因为它只能捕获“输入”设备。
答案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
现在应该看到一个输入设备。