Skip to main content
minimodem is a command-line software FSK modem that can transmit and receive data using audio tones. This guide will walk you through your first data transfer.

Understanding minimodem

minimodem works by encoding digital data as audio frequency-shift keying (FSK) signals. It can:
  • Transmit (--tx) - Convert text/data to audio tones
  • Receive (--rx) - Decode audio tones back to text/data
  • Work in real-time via sound card or batch mode via audio files
  • Support various protocols: Bell 103, Bell 202, RTTY, TTY/TDD, NOAA SAME, Caller-ID
The baud rate must match between transmitter and receiver. Common rates are 300 (Bell 103), 1200 (Bell 202), and 45.45 (RTTY).

Basic Transmit and Receive

File-based Transfer

The simplest way to test minimodem is using audio files:
1

Transmit data to a file

Create an audio file containing encoded data:
echo "Hello minimodem!" | minimodem --tx --file output.wav 1200
This encodes “Hello minimodem!” at 1200 baud and saves it to output.wav.
You can transmit any text or binary data through standard input. Try:
cat document.txt | minimodem --tx --file message.wav 1200
2

Receive data from the file

Decode the audio file back to text:
minimodem --rx --file output.wav 1200
You should see:
### CARRIER 1200 @ 1200.0 Hz ###
Hello minimodem!
### NOCARRIER ndata=16 confidence=inf ampl=1.000 bps=1200.00 (rate perfect) ###

Real-time Audio Transfer

For real-time transmission between two computers (or two terminals):
1

Start the receiver

On the receiving computer/terminal:
minimodem --rx 1200
Minimodem will listen for incoming audio signals through the microphone.
2

Start the transmitter

On the transmitting computer/terminal:
echo "Hello over the air!" | minimodem --tx 1200
Audio tones will play through the speakers, and the receiver should decode them.
Make sure your audio devices are working and the volume is appropriate. Start with moderate volume to avoid feedback.

Common Usage Patterns

Choosing a Baud Rate

# Fast, good for file transfers
# Mark: 1200 Hz, Space: 2200 Hz
minimodem --tx 1200

Saving Received Data

minimodem --rx 1200 > received.txt

Working with Audio Files

minimodem --tx --file message.wav 1200 < input.txt
minimodem supports various audio formats through libsndfile: WAV, FLAC, AIFF, AU, and more.

Protocol Examples

RTTY (Radioteletype)

RTTY uses 5-bit Baudot encoding, common in amateur radio:
echo "CQ CQ CQ DE N0CALL K" | minimodem --tx rtty
RTTY mode automatically sets:
  • Baud rate: 45.45
  • Data bits: 5 (Baudot)
  • Stop bits: 1.5

TTY/TDD (Telecommunications Device for the Deaf)

TDD uses specific frequencies and Baudot encoding:
echo "HELLO GA" | minimodem --tx tdd

NOAA SAME (Specific Area Message Encoding)

Decode NOAA weather radio alerts:
minimodem --rx same
Point your microphone at a NOAA weather radio during an alert transmission, or use:
minimodem --rx --file weather_alert.wav same

Caller ID

Decode telephone Caller ID signals:
minimodem --rx callerid
Caller ID mode is receive-only. Connect your computer’s line-in to the telephone line (you may need special hardware).

Advanced Options

Custom Frequencies

Specify custom mark and space frequencies:
# Custom frequencies for 1200 baud
echo "test" | minimodem --tx 1200 --mark 1200 --space 2200

# Short form
echo "test" | minimodem --tx 1200 -M 1200 -S 2200

Volume Control

Adjust transmission volume:
# Set volume to 50% (0.5)
echo "test" | minimodem --tx --volume 0.5 1200

# Maximum volume
echo "test" | minimodem --tx -v 1.0 1200

Quiet Mode

Suppress carrier and status messages:
# Show only decoded data
minimodem --rx --quiet 1200

# Short form
minimodem --rx -q 1200

Auto-carrier Detection

Automatically detect carrier frequency:
minimodem --rx --auto-carrier 1200

# Short form
minimodem --rx -a 1200

Complete Examples

Example 1: Local File Transfer Test

Verify your minimodem installation:
# Create test data
echo "The quick brown fox jumps over the lazy dog." > test.txt

# Encode to audio
minimodem --tx --file test.wav 1200 < test.txt

# Decode audio
minimodem --rx --file test.wav 1200 > decoded.txt

# Verify match
diff test.txt decoded.txt && echo "Success!"

Example 2: Two-Computer Transfer

1

Computer A (Receiver)

Start listening:
minimodem --rx 1200 > received_file.txt
2

Computer B (Transmitter)

Position the speaker near Computer A’s microphone and transmit:
cat document.txt | minimodem --tx 1200
3

Stop and verify

On Computer A, press Ctrl+C after transmission completes, then check:
cat received_file.txt

Example 3: Audio Cable Transfer

Connect two computers with an audio cable (speaker output → line-in/mic):
# Use line-in or microphone input
minimodem --rx 300 > received.txt
Use 300 baud for more reliable transfers over audio cables. For better quality cables or short distances, try 1200 baud.

Example 4: Ham Radio Data Transfer

Transmit data over amateur radio:
# Transmit side (connected to radio transmitter)
echo "CQ CQ CQ DE KC1XXX TEST K" | minimodem --tx --volume 0.3 rtty

# Receive side (connected to radio receiver)
minimodem --rx rtty
Ensure you have proper amateur radio licensing and follow all regulations when transmitting over radio frequencies.

Understanding Output Messages

Carrier Detection

### CARRIER 1200 @ 1200.0 Hz ###
This indicates minimodem has detected a carrier signal at 1200 baud.

No Carrier Message

### NOCARRIER ndata=42 confidence=2.345 ampl=0.850 bps=1199.85 (rate perfect) ###
  • ndata: Number of data frames decoded
  • confidence: Signal quality (higher is better, inf is perfect)
  • ampl: Signal amplitude (0.0 to 1.0+)
  • bps: Actual bit rate detected
  • rate perfect: Indicates the timing matched exactly
  • X% fast/slow: Indicates timing difference from expected rate

Troubleshooting

  • Check volume levels (both speaker and microphone)
  • Ensure baud rate matches between TX and RX
  • Try --auto-carrier mode: minimodem --rx -a 1200
  • Verify audio devices are working: arecord -l (Linux)
  • Use a file-based test first to rule out hardware issues
  • Signal quality may be poor (check confidence values)
  • Try a lower baud rate (300 instead of 1200)
  • Reduce background noise
  • Adjust volume (not too loud, not too quiet)
  • Check for audio clipping or distortion
  • Specify device explicitly:
    minimodem --alsa=plughw:0,0 --rx 1200
    
  • List available devices:
    arecord -L  # Linux ALSA devices
    pactl list sources  # PulseAudio sources
    
Some audio devices require permissions:
# Add user to audio group (Linux)
sudo usermod -aG audio $USER
# Log out and back in

Next Steps

Command Reference

Complete guide to all minimodem options and flags

Protocols

Detailed documentation of supported protocols

Examples

Advanced usage examples and recipes

Troubleshooting

Common issues and solutions

Build docs developers (and LLMs) love