Pacat

出自 ArchWiki

pacat(1) 是一个简单的工具,用于在 PulseAudio 声音服务器上播放或捕获原始或编码的音频文件。它理解 libsndfile 支持的所有音频文件格式。

它也以别名 paplayparecordparecpamon 存在。

安装

pacat 默认随 PulseAudio 一起安装,作为 libpulse 软件包的一部分。

用法

请参阅 pacat(1) man 手册页,以获取有关 pacat 标志的信息。

  • paplay 等同于 pacat --file-format
  • parecord 等同于 pacat -r --file-format
  • parec 等同于 pacat -r --raw
  • pamon 等同于 pacat --raw
  • 当直接调用 pacat 时,默认值等同于 pacat -p --raw

总结一下,parecordparec 默认都录制,而 pacatpaplay 默认都播放。parecordpaplay 都处理编码音频,而 parecpacat 处理原始 PCM(因此可以用于管道)。

请注意,pacat 的单个实例不能同时录制和播放;为此,请参阅 #播放音频输入

选择一个接收器或源

配置要播放到哪个接收器或要录制哪个源,可以使用 PulseAudio 前端 完成,或者使用 -d 选项以编程方式完成。

列出可用的接收器

$ pactl list sinks short

列出可用的源

$ pactl list sources short

删除 short 关键字会产生关于每个接收器/源的详细输出。

有两种方法可以引用给定的接收器/源:按名称或按 ID。以以下源列表为例

$ pactl list sources short
0	alsa_output.pci-0000_00_1f.3.analog-stereo.monitor	module-alsa-card.c	s16le 2ch 44100Hz	RUNNING
1	alsa_input.pci-0000_00_1f.3.analog-stereo	module-alsa-card.c	s16le 2ch 44100Hz	RUNNING
2	alsa_output.hw_0_7.monitor	module-alsa-sink.c	s16le 2ch 48000Hz	RUNNING
3	rtp.monitor	module-null-sink.c	s16le 2ch 44100Hz	RUNNING

那么以下两行产生相同的结果。

$ parecord -d alsa_input.pci-0000_00_1f.3.analog-stereo speech.flac
$ parecord -d 1 speech.flac

技巧和窍门

低延迟播放

默认情况下,pacat 让 PulseAudio 服务器选择延迟,“通常相对较高,以节省电力”。如果这是不可取的,例如对于 #播放音频输入,可以向 pacat 传递 latency(以字节为单位)或 latency-msec 选项。例如

$ pacat -d 0 --latency-msec 1

请注意,这通常只需要在播放时完成,而不是在录制时完成。

播放音频输入

如果您正在录制外部音频源(例如通过 jack 公对公 电缆),您可能希望对您正在录制的内容进行反馈。这可以通过使用 parec 捕获输入,并将其通过管道传输到 pacat 以播放它来实现。

$ parec | pacat

直接 #选择一个接收器或源 可能很实用,例如

$ parec -d 0 | pacat -d 1
提示: 您可能还想了解 #低延迟播放。但是,即使使用低延迟播放,以这种方式将源通过管道传输到接收器也相当耗费资源,并且会引入明显的延迟。有关更好的解决方案,请参阅 PulseAudio/Examples#将源直接管道传输到接收器

可以通过在管道中添加 tee 来同时录制声音

$ parec | tee speech.raw | pacat

尽管您可能希望改为启动 parecparecord 的单独实例。

从多个源录制

可以通过多次使用 -d 参数,在单个命令中从接收器和源录制。例如,录制包括您的客人的讲话(接收器)和你自己的声音(源)的视频会议可能看起来像

$ parec -d alsa_input.pci-0000_00_1f.3.analog-stereo -d alsa_output.pci-0000_00_1f.3.analog-stereo --file-format=wav (date +%F).wav

参见