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
From PyPI (Recommended)
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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| morse_transceiver-2.0.2.tar.gz | 26.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.