Skip to main content

Morse Transceiver - Ultrasonic Audio Steganography

Version: 2.0.0

Overview

Morse Transceiver is a cross-modal information embedding framework that leverages ultrasonic frequency carriers (17.5–19.5 kHz) to embed hidden data into audio/video files. The embedded signals are:

  • Inaudible to humans: Above the adult hearing threshold (~16 kHz for ages 30+)
  • Recordable by computers: Below the Nyquist frequency (22.05 kHz at 44.1 kHz sampling)
  • Compression-resilient: Survives AAC/MP3 encoding at ≥64 kbps bitrates

This enables persistent metadata embedding, copyright watermarking, and secure cross-modal communication.

Key Features

Ultrasonic Steganography

  • Dual-Tone FSK Modulation: Encodes Morse dots and dashes at distinct ultrasonic frequencies
  • Adaptive Frequency Selection: Optimizes carriers based on sample rate, target bitrate, and age demographic
  • Protocol Framing: KA/AR preamble/postamble with MD5 checksum verification
  • Redundancy: Configurable repetition (3–5×) for compression resilience

Cross-Modal Embedding

  • Audio Files: WAV, FLAC, OGG, MP3
  • Video Files: MP4, MOV, AVI, MKV (with audio track)
  • High-Bitrate Preservation: Uses 320 kbps AAC to maintain ultrasonic fidelity

CLI Interface

# Embed message into video
morse-embed sample.mp4 -m "SECRET MESSAGE" -o output.mp4

# Extract message from video
morse-extract output.mp4 -f 17500

# Verify frequency inaudibility
morse-verify --age 40

The Science

The Perceptual-Technical Boundary

Human hearing follows an age-dependent decline (presbycusis):

  • Young (<25): ~19–20 kHz upper limit
  • Adult (30–40): ~16–18 kHz upper limit
  • Adult (40–50): ~14–16 kHz upper limit
  • Senior (50+): ~12–14 kHz upper limit

Standard audio sampling (44.1 kHz) supports frequencies up to 22.05 kHz (Nyquist limit).

This creates an optimal embedding window of 17.5–19.5 kHz—inaudible to most adults yet fully representable digitally.

Frequency Modes

Mode Dot (Hz) Dash (Hz) Use Case
Conservative 17,000 18,000 Maximum compatibility
Standard 17,500 18,500 Default (recommended)
Aggressive 18,000 19,000 Enhanced stealth
Maximum 18,500 19,500 Maximum inaudibility

Installation

pip install morse-transceiver

From Source

git clone https://github.com/cycleuser/Morse-Transceiver.git
cd Morse-Transceiver
pip install -r requirements.txt

Optional GUI Dependencies

pip install morse-transceiver[gui]

Quick Start

Embed Message

from stego_engine import UltrasonicStegoEngine

# Embed into video
UltrasonicStegoEngine.embed_signal(
    "sample.mp4", "output.mp4",
    text="SECRET MESSAGE",
    wpm=15, freq=17500, volume=0.1,
    redundancy=5, use_dual_tone=True
)

Extract Message

morse, status = UltrasonicStegoEngine.extract_signal(
    "output.mp4", freq=17500, wpm=15, use_dual_tone=True
)

from morse_transceiver.morse_logic import MorseLogic
decoded = MorseLogic.morse_to_text(morse)
payload, proto_status = MorseLogic.parse_packet(decoded)
print(f"Extracted: {payload}")

CLI Usage

# Embed
morse-embed sample.mp4 -m "HELLO WORLD" -o output.mp4 --wpm 15 --redundancy 5

# Extract
morse-extract output.mp4 --freq 17500 --wpm 15

# Verify inaudibility for age group
morse-verify --age 40 --mode standard

Testing

Run the full test suite:

python test_ultrasonic.py

Or with pytest:

pip install pytest
pytest tests/ -v

Transcoding Resilience

Profile Bitrate Result
High Quality 320 kbps ✓ 100% Recovery
Standard 192 kbps ✓ 100% Recovery
Social Media 128 kbps ⚠ Partial Recovery
Low Bandwidth 64 kbps ✓ With Lower Frequencies
Ultra Low 32 kbps ✗ Failure

Project Structure

Morse-Transceiver/
├── morse_transceiver/          # Python package
│   ├── __init__.py             # Package metadata
│   ├── morse_logic.py          # Morse encoding/decoding
│   └── cli.py                  # Command-line interface
├── stego_engine.py             # Ultrasonic steganography engine
├── test_ultrasonic.py          # Full test suite
├── tests/                      # pytest tests
│   ├── __init__.py
│   └── test_stego.py
├── Article.md                  # English paper
├── Article_CN.md               # Chinese paper
├── pyproject.toml              # Package configuration
├── requirements.txt            # Dependencies
├── publish.py                  # PyPI publishing script
├── upload_pypi.sh              # Bash upload script
├── upload_pypi.bat             # Windows upload script
├── build.sh                    # Bash build script
└── build.bat                   # Windows build script

Development

Build Package

# Linux/macOS
chmod +x build.sh
./build.sh

# Windows
build.bat

# Or using publish.py
python publish.py build

Publish to PyPI

# Linux/macOS
chmod +x upload_pypi.sh
./upload_pypi.sh

# Windows
upload_pypi.bat

# Or using publish.py
python publish.py test     # TestPyPI
python publish.py release  # PyPI

License

GNU General Public License v3.0 (GPLv3)

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Citation

If you use this work in your research, please cite:

@misc{morse-transceiver-2026,
  title={Cross-Modal Information Embedding via Ultrasonic Audio Steganography},
  author={Morse Transceiver Contributors},
  year={2026},
  url={https://github.com/cycleuser/Morse-Transceiver}
}

References

See Article.md and Article_CN.md for full academic paper with 20 references.

Metadata

Release files for morse-transceiver 2.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for morse-transceiver 2.0.2
File Size Uploaded Provenance
morse_transceiver-2.0.2.tar.gz 26.0 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for morse-transceiver 2.0.2
File Interpreter ABI Platform
morse_transceiver-2.0.2-py3-none-any.whl Python 3 none any Details

Total release size: 50.1 kB

Release files / morse_transceiver-2.0.2.tar.gz

Download URL morse_transceiver-2.0.2.tar.gz
Size 26.0 kB
Tags Source
SHA-256 checksum
How to use checksums
17195414107486cdf0dffd072906bf6b737ca1efb8dfa3ef6745fde48755b1e1
BLAKE2b-256 checksum
How to use checksums
8f82f8f350fed6832a24444eb9bce7dad476e90049d7ad1c8a8eda5f11e98f9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Release files / morse_transceiver-2.0.2-py3-none-any.whl

Download URL morse_transceiver-2.0.2-py3-none-any.whl
Size 24.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
90b711d0859d1d76bf9590a2f4a66f115dccd544fdc49a6e42141facc3b8055c
BLAKE2b-256 checksum
How to use checksums
5bef757f2267ef291fc078f265296a16f0cb4b354eea8cfbdae974ff087249d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.12

Security for morse-transceiver 2.0.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.0.2 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page