Browse the Internet over two 3.5mm audio jack cables

Related tags

Audio audio-jack-web
Overview

audio-jack-web

Or a way to browse the Internet between two computers with only two 3.5mm audio cables and some Morse/POCSAG fanciness.

How does it work?

Remember the days when you had to hook up a telephone line to a modem to be able to access the Internet (I did not have the chance to live in those days, but well...)? Welcome back. This makes use of two simple reversible data channels that connect computers together: 3.5mm audio cables. The client sends a webpage request, and the server answers this request by sending the compressed HTML code of this webpage over... sound.

Request

You type in your URL in the basic browser's address bar, and then you click Go. Some handy script handles conversion shenanigans for you, then plays out loud base32-encoded Morse over your Line Out port for the server to understand that you want to access a webpage with a special ++END++ string at the end to tell the server your computer has finished sending its request.

Receive

The server decodes the base32 string into wget-understandable format and calls his send script with that URL as its first argument. wget first fetches the webpage's HTML code, then the script compresses it into XZ data and encodes it to base64, then breaks it down in several chunks to accommodate the needs of the POCSAG encoder, which is limited to around 512 characters/chunk. Each chunk is passed, one by one, to that encoder and is thrown out of the server's Line Out port, to the Line In port of the client at a glorious 2400 bits per second data rate.

The client receives this data, accompanied by a transmission header (containing the number of chunks to be transmitted and the total size of the data) and trailer (containing the ==END== signal), assembles all chunks, decodes base64, uncompresses XZ data, and displays the webpage into QWebEngineView.

How do I try this?

Requirements

  • Two Linux PCs (preferably running a Debian-based system), both with a Line In and a Line Out port
  • The "client" PC must be running a GUI for the Qt app to run
  • Good enough audio cables
  • An Internet connection for the server to retrieve webpages; not necessary on the client
  • Time & patience

Setting it up

Apply to both PCs

Clone the Git repository in a terminal:

git clone --recurse-submodules https://github.com/tux-linux/audio-jack-web

cd into the repository and execute the bootstrap.sh script to compile the required binaries:

./bootstrap.sh

If you're not running a Debian-based system, build instructions are pretty much the same, only dependencies to install will change.

Server PC

Play around with audio configuration & volume in pavucontrol, for me it works best like this: Output Input

cd into scripts/server then launch the server daemon:

./daemon.sh

Important: this script must always be run from its initial directory, otherwise it won't work properly.

Client PC

Play around with audio configuration & volume in pavucontrol, for me it works best like this: Output Input

cd into audio-jack-web-qt, then launch the Qt application:

./audio-jack-web-qt

Important: this app must always be run from its build directory, otherwise it won't work properly.

Have fun!

Enter something to search with FrogFind, or type an URL into the address bar, then strike Return. Now, wait. Something should be happening between the two computers and soon enough (yeah... it's slow ;p), you'll see a webpage appearing on your client's browser. FrogFind demo GitHub demo Note: if the first webpage request doesn't transmit well (there might be strange characters in the URL on the server's end due to some corruption), try again and it should work better.

Licensing

All the files in this project are licensed under the GNU General Public License version 3.0, unless otherwise specified (e.g. in submodules).

You might also like...
An audio mixer that supports various file formats for Simple Directmedia Layer.

An audio mixer that supports various file formats for Simple Directmedia Layer.

Explore fractals in an audio-visual sandbox
Explore fractals in an audio-visual sandbox

Fractal Sound Explorer Explore fractals in an audio-visual sandbox Download executable on my itch.io page: https://codeparade.itch.io/fractal-sound-ex

Audio out with an FTDI UART cable

Audio out with an FTDI UART cable This encodes audio as either PDM (using a first order sigma-delta stage), 32-bits PWM or 64-bits PWM and sends it as

Sexy, audio-responsive effects on LED strips.
Sexy, audio-responsive effects on LED strips.

Striptease Sexy, audio-responsive effects on LED strips. For Teensy 4 with Audio Adapter Board, by PJRC. Quick demo Shooting video of LEDs is very tri

audio monitor filter for OBS Studio
audio monitor filter for OBS Studio

Audio Monitor dock and filter for OBS Studio Plugin for OBS Studio to add Audio Monitor dock and filter. It allows you to put the audio of a OBS sourc

Lightweight Embedded Audio Framework

LEAF (Lightweight Embedded Audio Framework) is a C library for audio synthesis and processing created by Jeff Snyder, Mike Mulshine, and Matt Wang at Princeton University's New Instrument Research Lab. It was originally called OOPS when we started writing it in 2017, so you may see references to it under that name as well.

An Audio Steganography Tool, written in C++
An Audio Steganography Tool, written in C++

HiddenWave Hide your personal Data inside The Audio wav file Written in C++ by Gaurav Raj [TheHackersBrain] Hiddenwave is an audio steganography tool

C++ audio time-stretching implementation

Time Stretcher C++ audio time-stretching implementation, based on the algorithms presented in: Audio Time Stretching with an Adaptive Phase Vocoder, N

Block all ads in vídeo, áudio, banner, anti-skip

NoAdSpotify Block spotify ad This is an updated and simplified version of the project: BlockTheSpot Last updated: 6th June 2021 Last tested version: 1

Owner
UNIX/Linux geek, I like hacking embedded devices and making the most out of them. Musician, as well as film photographer and antiques collector. 16 years old.
null
Glitch-free high-quality internet audio streaming on the Apple II

A2Stream A2Stream simultaneously receives an .a2stream file from any HTTP server and plays it through the stock Apple II speaker circuit using pulse-w

Oliver Schmidt 22 Oct 4, 2022
PortAudio is a portable audio I/O library designed for cross-platform support of audio

PortAudio is a cross-platform, open-source C language library for real-time audio input and output.

PortAudio 786 Jan 1, 2023
A simple C++ library for reading and writing audio files.

AudioFile A simple header-only C++ library for reading and writing audio files. Current supported formats: WAV AIFF Author AudioFile is written and ma

Adam Stark 683 Jan 4, 2023
A C library for reading and writing sound files containing sampled audio data.

libsndfile libsndfile is a C library for reading and writing files containing sampled audio data. Authors The libsndfile project was originally develo

null 1.1k Jan 2, 2023
C library for cross-platform real-time audio input and output

libsoundio C library providing cross-platform audio input and output. The API is suitable for real-time software such as digital audio workstations as

Andrew Kelley 1.6k Jan 6, 2023
C++ Audio and Music DSP Library

_____ _____ ___ __ _ _____ __ __ __ ____ ____ / \\_ \\ \/ / |/ \| | | | \_ \/ \ | Y Y \/ /_ \> <| | Y Y \ | |_|

Mick Grierson 1.4k Jan 7, 2023
Single file audio playback and capture library written in C.

A single file library for audio playback and capture. Example - Documentation - Supported Platforms - Backends - Major Features - Building - Unofficia

David Reid 2.6k Jan 8, 2023
SimplE Lossless Audio

SELA SimplE Lossless Audio A lossless audio codec which aims to be as simple as possible while still having good enough compression ratios. Code Quali

Ratul Saha 207 Sep 13, 2022
Easy and efficient audio synthesis in C++

Tonic Fast and easy audio synthesis in C++. Prefer coding to patching? Love clean syntax? Care about performance? That's how we feel too, and why we m

null 482 Dec 26, 2022