Jump to content

# pacat

From ArchWiki

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

Category:

- Sound