Audio Capture (ALSA / PulseAudio / PipeWire)¶
The Pengo exposes a single USB Audio Class device with two logical inputs that show up mixed:
- The HDMI-embedded audio (whatever the HDMI source is sending)
- The 3.5 mm microphone input (mono, mic-level)
And one logical output:
- The 3.5 mm headphone jack (stereo, 48 kHz / 16-bit)
This page covers how to address each one from ALSA, PulseAudio, and PipeWire on Linux.
Identifying the device¶
arecord -l
Sample output:
card 1: Grabber [Pengo HDMI Grabber], device 0: USB Audio [USB Audio]
Subdevices: 1/1
subdevice #0: subdevice #0
In the rest of this page we'll refer to the card by its index (1 in this
example) — substitute your own number when running commands.
Quick sanity test:
arecord -D hw:1,0 -f S16_LE -r 48000 -c 2 -d 5 /tmp/test.wav
aplay /tmp/test.wav
If you hear the source's audio, ALSA is happy. If the volume is too low or too hot, see the levels section below.
ALSA¶
Record with arecord¶
arecord -D hw:1,0 -f S16_LE -r 48000 -c 2 -d 60 /tmp/capture.wav
-f S16_LE— 16-bit signed little-endian (matches the Pengo's 16-bit output)-r 48000— 48 kHz (the Pengo's spec)-c 2— stereo (the Pengo mixes HDMI and mic into a stereo stream)-d 60— duration in seconds
Pipe to FFmpeg for instant re-encode to MP3/Opus/AAC:
arecord -D hw:1,0 -f S16_LE -r 48000 -c 2 - | \
ffmpeg -f s16le -ar 48000 -ac 2 -i - -c:a libmp3lame -b:a 192k \
/tmp/capture.mp3
Mix with FFmpeg¶
ffmpeg -f v4l2 -input_format mjpeg -framerate 60 -video_size 1920x1080 \
-i /dev/video0 \
-f alsa -ac 2 -i hw:1,0 \
-c:v copy -c:a aac -b:a 192k \
/tmp/capture.mp4
ALSA controls¶
The Pengo doesn't expose many controls, but alsamixer will show what's
available. Run:
alsamixer -c 1
You'll see controls like Mic (the 3.5 mm input gain) and possibly
Auto Gain Control. Use F4 to switch to capture view, arrow keys to
adjust.
Mic level vs line level
The 3.5 mm mic input is mic level only. Plugging in a line-level source (mixer output, audio interface output) will distort heavily. To attenuate, use a pad like the Sescom MX-LAU-25 or a Whirlwind PCDI, then a TRS-to-TRS cable.
PulseAudio / PipeWire¶
Most modern desktop distros run PipeWire as a PulseAudio-compatible replacement. The Pengo shows up in the system audio settings automatically.
pavucontrol / pw-cli¶
# Find the sink / source name
pactl list short sources | grep -i pengo
You should see something like:
2 alsa_input.usb-Pengo_Pengo_HDMI_Grabber-02.analog-stereo ...
Use that name in any PulseAudio app:
# Record 5 seconds to a WAV file
parec --device=alsa_input.usb-Pengo_Pengo_HDMI_Grabber-02.analog-stereo \
--file-format=wav /tmp/capture.wav &
sleep 5
kill %1
In GNOME Settings → Sound, the Pengo appears as an input device under the Choose a sound input dropdown. Same in KDE Plasma's audio settings.
PipeWire wpctl¶
# List audio devices
wpctl status
# Set the Pengo as the default source for the session
wpctl set-default <id>
wpctl inspect <id> shows the full path; look for the node.name that
contains "Pengo".
Routing the headphone output¶
The 3.5 mm headphone jack is an output — the kernel surfaces it as a sink. With something plugged in:
pactl list short sinks | grep -i pengo
To make a desktop application play audio through the Pengo's headphone jack, set the Pengo sink as the default in your sound settings, or:
pactl set-default-sink alsa_output.usb-Pengo_Pengo_HDMI_Grabber-02.analog-stereo
Why use the headphone output at all?
It's a hardware-monitored mirror of the active stream. Useful for plugging in zero-latency headphones during a live shoot where you want to hear the captured audio directly without going through the host's audio stack.
Latency and clock drift¶
USB audio devices are notorious for small clock drifts. If your recordings show A/V sync drift over long captures:
- Use
-use_wallclock_as_timestamps 1in FFmpeg to anchor audio frames to the wall clock - Or use a constant bitrate capture profile
- PipeWire handles drift better than raw ALSA for most workloads
Next: AI Agent Integration →