pacat

Related articles
PulseAudio
PulseAudio/Examples
PulseAudio/Troubleshooting
FFmpeg
pacat(1)
is a simple tool for playing back or capturing raw or encoded audio files on a
PulseAudio
sound server. It understands all audio file formats supported by
libsndfile
.
It is also present under the aliases
paplay
,
parecord
,
parec
, and
pamon
.
Installation
pacat
is installed by default with
PulseAudio
, as part of the
libpulse
package.
Usage
See the
pacat(1)
man page
for information on
pacat
's flags.
paplay
is equivalent to
pacat --file-format
parecord
is equivalent to
pacat -r --file-format
parec
is equivalent to
pacat -r --raw
pamon
is equivalent to
pacat --raw
When invoking
pacat
directly, the defaults are equivalent to
pacat -p --raw
.
To summarize,
parecord
and
parec
both record by default, whereas
pacat
and
paplay
play back by default.
parecord
and
paplay
both deal with encoded audio, whereas
parec
and
pacat
work on raw PCM (and thus can be used in pipelines).
Note that a single instance of
pacat
cannot record and play back at the same time; for that, see
#Playing back an audio input
.
Select a sink or source
Configuring which sink to play to, or which source to record, can be done using a
PulseAudio front-end
, or programmatically using the
-d
option.
To list the available sinks:
$ pactl list sinks short
To list the available sources:
$ pactl list sources short
Removing the
short
keyword produces detailed output about each sink/source.
There are two ways to refer to a given sink/source: either by name, or by ID. Taking the following source list as an example:
$ 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
Then the following two lines produce the same result.
$ parecord -d alsa_input.pci-0000_00_1f.3.analog-stereo speech.flac
$ parecord -d 1 speech.flac
Tips and tricks
Low-latency playback
By default,
pacat
lets the PulseAudio server pick the latency, "usually relatively high for power saving reasons". If this is not desirable, for example for
#Playing back an audio input
, one can pass the
latency
(in bytes) or
latency-msec
option to
pacat
. For example:
$ pacat -d
0
--latency-msec 1
Note that this usually only needs to be done when playing back, not when recording.
Playing back an audio input
If you are recording an external audio source (for example via a jack male-male cable), you may want to have feedback on what you are recording. This can be done by using
parec
to capture the input, and piping it into
pacat
to play it back.
$ parec | pacat
It may be practical to
#Select a sink or source
directly, for example:
$ parec -d
0
| pacat -d
1
Tip
You may also want to look into
#Low-latency playback
. However, even with low-latency playback, piping a source into a sink in this way is fairly resource-hungry and introduces noticeable latency. See
PulseAudio/Examples#Pipe a source directly into a sink
for a better solution.
It is possible to record the sound at the same time by adding
tee
to the pipeline:
$ parec | tee speech.raw | pacat
Though you may want to launch a separate instance of
parec
or
parecord
instead.
Recording from multiple sources
It is possible to record from both sinks and sources in a single command by using the
-d
argument several times. For instance, recording a video conference including the speech of your guests (sink) and your own voice (source) might look like
$ 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
Playing back audio from a remote server
First of all, set up
module-native-protocol-tcp
to your liking, see
PulseAudio/Examples#PulseAudio over network
.
Then, you can play back the audio from a remote server via:
$ parec -s
192.168.0.1
:4713 | pacat --latency-msec=1
See also
List of applications/Multimedia#Audio editors