A simple Linux/ALSA (libasound) command line audio capture utility.
  • C 97.7%
  • Makefile 2.3%
Find a file
2026-10-08 01:47:52 +02:00
.gitignore .gitignore update. 2026-10-08 01:47:52 +02:00
LICENSE Initial commit. 2026-10-07 03:13:41 +02:00
Makefile Initial commit. 2026-10-07 03:13:41 +02:00
README.md Initial commit. 2026-10-07 03:13:41 +02:00
tuxrecord.c Initial commit. 2026-10-07 03:13:41 +02:00

tuxrecord

Record audio to a WAV file on Linux using ALSA as the recording source.

tuxrecord is the Linux port of the former macOS-only macrecord tool. The Swift/AVFoundation code was rewritten in C99 and now uses the native ALSA capture API (libasound); it builds with GCC.

The port is derived from macrecord which was created by my good friend armin.

Requirements

  • GCC and GNU make
  • ALSA development headers (libasound2-dev on Debian/Ubuntu, alsa-lib-devel on Fedora, alsa-lib on Arch)

Usage

# Record until q or Ctrl+C
tuxrecord

# Record for N seconds
tuxrecord -d 30

# Specify output directory
tuxrecord -o /path/to/dir

# Use a custom filename prefix
tuxrecord -p myrec

# Use a specific ALSA capture device
tuxrecord -D hw:1,0

Options

Option Description
-o <dir> Output directory (default: current directory)
-d <secs> Stop automatically after <secs> seconds
-p <prefix> Filename prefix instead of tuxrecord
-D <device> ALSA capture device (default: default)
-h, --help Show help

Run arecord -l to list available ALSA capture devices.

Controls

  • q - Stop recording and save the file
  • Ctrl+C - Stop recording and save the file

The file is written as <prefix>__<timestamp>.wav (default prefix tuxrecord). The VU meter shows the input level of the left and right channels in real time when stderr is a terminal.

Recording system audio

The default ALSA capture device (default) is usually the microphone. To record system audio (everything playing on the machine), route playback through the ALSA loopback driver snd-aloop and capture from the other side of the loop.

# 1. Load the loopback module (once per boot)
sudo modprobe snd-aloop

# 2. Play audio on the "playback" side of the loop
aplay -D hw:Loopback,0 song.wav

# 3. In another terminal, record from the paired "capture" side
tuxrecord -D hw:Loopback,1

Audio written to hw:Loopback,0 (playback) is heard on hw:Loopback,1 (capture): the two subdevices form a loop and the samples pass straight through. Point your players at hw:Loopback,0 (default sink) and record from hw:Loopback,1 to capture the system mix. Subdevice pairing depends on the kernel version; if one direction is silent, try recording from hw:Loopback,0 while playing to hw:Loopback,1.

Build

make
# or directly:
# gcc -std=c99 -O2 -Wall -Wextra tuxrecord.c -o tuxrecord $(pkg-config --libs alsa) -lm

Install (installs to $(PREFIX)/bin, default /usr/local/bin):

sudo make install
# or: sudo cp tuxrecord /usr/local/bin/tuxrecord

Install to a custom prefix:

make install PREFIX=~/.local

Uninstall:

sudo make uninstall

License

Apache License 2.0 — see the LICENSE file for details.

Copyright 2026 Johannes Findeisen