是否有一个程序可以像 wireshark 一样运行,但不是网络流量,而是捕获原始声音并将其保存到文件中?
我知道网络流量是一个协议三明治,听起来和它不太相似,但我画了一个与 wireshark 的比较以突出操作。
要求
- 启动一个用户空间程序,特别的。
- 从特定声卡或系统范围捕获声音
- 将其保存到文件中以供检查,最好是原始脉冲编码调制 (PCM)
我在这里不是在寻找任何保真度,即使以 44Khz 采样的单个通道也足够了,甚至比这还好。
最终,我希望能够查看捕获的数据并对其进行自己的分析。
相似但不完全
randomsound [1] 看起来与我想要的相似,但它进行了自己的分析并且仅将熵注入内核随机池。它不保存原始数据。
接下来,我查看了 Audacity。该程序允许我捕获麦克风流,但不能捕获机器上播放的任何内容的流。所以即使我能够使用命令行启动 Audacity 并捕获流。这还不够,因为它只能捕获“输入”设备。
这似乎是一个非常标准的设置——你要找的东西叫做监听设备,它内置在你的音响系统中,PipeWire(或者可能仍然是 Pulseaudio,但它们有相同的接口,所以那不是无关紧要)。
您可能已经可以使用它了:运行
并寻找他们的
Name: field ends in
.monitor`。您可以开箱即用地使用
parecord
. 或者,如果您想立即压缩它,请使用ffmpeg
:Where
-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
:从为我列出的这些设备中,我想要
alsa_output.pci-0000_00_1b.0.analog-stereo.monitor
;你的可能被称为不同的。复制那个名字。然后,编辑您的
~/.asoundrc
(在文本编辑器中)并添加:(当然,使用我使用我的设备的名称。)
重新启动大胆。您现在应该看到一个输入设备
analog_out_monitor
。