Skip to main content

FSK text/file transfer utility

Project description

gg-transfer

License: GPLv3

Tool to send/receive text/binary file over audio via FSK modulation

This small tool is intended to send/receive short text messages or whole binary files over audio.
It uses ggwave library (https://github.com/ggerganov/ggwave) to encode text messages or binary files, send them over the audio interface, or decode them from the microphone.

This is a shell front-end which implements the sending/receiving of bare text or whole binary files, which are encoded in Base64.

When in file transfer mode, it reads the file, encode it in Base64, and sends a header in JSON with some info about the file itself. Then splits the Base64-encoded string in 140 chars-long blocks, and send them: ggwave encodes each block into audio and gg-transfer plays them to the default audio interface.

The receieving part, while in file transfer mode, waits to receive the header, then reads the right number of blocks, assembles them in a single Base64 string and decodes it into binary.

There are nine different protocols to send data:

    0 = Normal (11,17 Bytes/s - 1875 Hz to 6375 Hz)
    1 = Fast (16,76 Bytes/s - 1875 Hz to 6375 Hz)
    2 = Fastest (33,52 Bytes/s 1875 Hz to 6375 Hz)
    3 = [U] Normal (11,17 Bytes/s - 15000 Hz to 19500 Hz)
    4 = [U] Fast (16,76 Bytes/s - 15000 Hz to 19500 Hz)
    5 = [U] Fastest (33,52 Bytes/s - 15000 Hz to 19500 Hz)
    6 = [DT] Normal (3,72 Bytes/s - 1125 Hz to 2625 Hz)
    7 = [DT] Fast (5,59 Bytes/s - 1125 Hz to 2625 Hz)
    8 = [DT] Fastest (11,17 Bytes/s - 1125 Hz to 2625 Hz)

Test installation

$> git clone https://github.com/matteotenca/gg-transfer.git
$> cd gg-transfer
$> pip install --user -e .

Examples:

usage: gg-transfer send [-h] [-i <inputfile>] [-p {0,1,2,3,4,5,6,7,8}] [-f]


options:
  -h, --help            show this help message and exit
  -i <inputfile>, --input <inputfile>
                        input file (use '-' for stdin).
  -p {0,1,2,3,4,5,6,7,8}, --protocol {0,1,2,3,4,5,6,7,8}
                        protocol, 0 to 8 (defaults to 0)
                        0 = Normal (11,17 Bytes/s - 1875 Hz to 6375 Hz)
                        1 = Fast (16,76 Bytes/s - 1875 Hz to 6375 Hz)
                        2 = Fastest (33,52 Bytes/s 1875 Hz to 6375 Hz)
                        3 = [U] Normal (11,17 Bytes/s - 15000 Hz to 19500 Hz)
                        4 = [U] Fast (16,76 Bytes/s - 15000 Hz to 19500 Hz)
                        5 = [U] Fastest (33,52 Bytes/s - 15000 Hz to 19500 Hz)
                        6 = [DT] Normal (3,72 Bytes/s - 1125 Hz to 2625 Hz)
                        7 = [DT] Fast (5,59 Bytes/s - 1125 Hz to 2625 Hz)
                        8 = [DT] Fastest (11,17 Bytes/s - 1125 Hz to 2625 Hz)
  -f, --file-transfer   encode data in Base64 and use file transfer mode.
usage: gg-transfer receive [-h] [-o <outputfile>] [-f] [-w]


options:
  -h, --help            show this help message and exit
  -o <outputfile>, --output <outputfile>
                        output file (use '-' for stdout).
  -f, --file-transfer   decode data from Base64 and use file transfer mode.
  -w, --overwrite       overwrite output file if it exists.

A simple string:

Sender side
$> echo "Hello world" | gg-transfer send --protocol 2
Only the first 140 bytes will be sent.
Sending data, length: 16
Piece 1/1 16 B
Time taken to encode waveform: 1.3006865978240967
Speed: 12.301195404616463 B/s
$>
Receiver side
$> gg-transfer receive
Listening ... Press Ctrl+C to stop
Got message
"Hello world"
[...]

A binary file:

Sender side
$> gg-transfer send --protocol 2 --input somefile.bin --file-transfer
Sending header, length: 57
Sending data, length: 644
Piece 5/5 644 B
Time taken to encode waveform: 23.129117012023926
Speed: 27.84369155403596 B/s
$>
Receiver side
$> gg-transfer.exe receive --output /tmp/out.bin --file-transfer
Listening ... Press Ctrl+C to stop
Got Header
Filename: somefile.bin, Size: 482
Piece 5/5 644 B

Contacts

You can contact me from my GitHub page at https://github.com/matteotenca/gg-transfer

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gg_transfer-0.1.4.tar.gz (18.9 kB view hashes)

Uploaded Source

Built Distribution

gg_transfer-0.1.4-py3-none-any.whl (19.9 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page