Ultrasonic Audio Steganography for Cross-Modal Information Embedding
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file morse_transceiver-2.0.2.tar.gz.
File metadata
- Download URL: morse_transceiver-2.0.2.tar.gz
- Upload date:
- Size: 26.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17195414107486cdf0dffd072906bf6b737ca1efb8dfa3ef6745fde48755b1e1
|
|
| MD5 |
4fa074f3efc82a145ea6078100994fb5
|
|
| BLAKE2b-256 |
8f82f8f350fed6832a24444eb9bce7dad476e90049d7ad1c8a8eda5f11e98f9e
|
File details
Details for the file morse_transceiver-2.0.2-py3-none-any.whl.
File metadata
- Download URL: morse_transceiver-2.0.2-py3-none-any.whl
- Upload date:
- Size: 24.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90b711d0859d1d76bf9590a2f4a66f115dccd544fdc49a6e42141facc3b8055c
|
|
| MD5 |
b86b2f09bb4ddb945d484d5ab8192edf
|
|
| BLAKE2b-256 |
5bef757f2267ef291fc078f265296a16f0cb4b354eea8cfbdae974ff087249d9
|