physical layer4-FSKHamming 7,4 interleavedCRC-1648.0 kHz

Messages that travel as sound.

Four tones carry two bits each. Error-correcting codes repair what the room damages. No radio, no network, no pairing — one device plays, the other listens.

Start listening to see what the microphone hears
06k12k18k24k
How to use it
1Check the channel first (optional but recommended). On each device, open Channel check below and press "Check this device." It tells you which band this speaker/microphone pair handles best, so you're not guessing.
2Start listening on the receiving device. Press "Start listening" in the Receive panel. It watches all nine sync tones at once, so it doesn't need to be told which band or symbol length the sender will use.
3Send from the other device. Type a message, pick a band and symbol length (or leave the defaults), and press Send.
4Read the result. A decoded message appears in the receiver's log with the band, symbol length and signal margin it arrived with. A failed frame says why — usually "too weak" or "could not lock," both fixed by trying a longer symbol length or a stronger band.
·Longer messages arrive in chunks. Anything over 32 bytes is split into several small frames and sent back to back. The log entry fills in as each chunk lands — you'll see a row of small bars under the message, one per chunk, turning green as they arrive — so you can read the start of a long message before the end has even been sent. If a chunk never arrives, its bar stays grey/red and the message reports which chunk numbers are missing after a short wait, rather than silently guessing at the gap.

Does it support sending and receiving at the same time? No — Airwave is half-duplex, one direction at a time, on purpose. A device's own speaker output would otherwise leak straight into its own microphone input and drown out anything real. The page enforces this automatically: pressing Send mutes this device's receiver for the duration of the transmission, then un-mutes it. You don't need to stop listening manually before sending — just don't expect a device to receive while it's actively playing a message. To hold a back-and-forth conversation, take turns, the same as a two-way radio.

Band and symbol length are detected automatically on receive, so the two devices never need matching settings — only the "Check this device" step is per-device, everything else adapts on the fly.

Send idle

Tone band picks the frequency range · Symbol length trades speed for reliability · Repeats re-plays the same message for extra chances · Level is playback volume.

Self-test runs the first chunk's encoder into the decoder with no sound at all, so you can confirm the codec works before blaming the room.

Receive microphone off

sync
00
01
11
10
idle — watching all nine sync tones at once
Nothing received yet.

Channel check not measured

Find out how much of each band survives
the trip from a speaker to this microphone

“Check this device” sweeps this speaker and measures it on this microphone. For a real two-device link, press “Listen only” on the receiver and “Play sweep only” on the sender — the weaker of the two measurements is what limits you.

Plain tone generator
1.00k Hz

Slide it upward while watching the ribbon at the top to find exactly where your speaker or microphone gives up.

How a frame is built
ChunkingA message longer than 32 bytes is split into up to 16 chunks, each sent as its own independent frame with its own carrier, sync, header and CRC. A chunk that fails to decode doesn't take the rest of the message down with it, and the receiver shows text as each chunk lands rather than waiting for the whole message.
CarrierEight symbols alternating between the outer two tones, so the receiver's automatic gain control settles before anything meaningful arrives.
SyncFour symbols of a tone unique to each band-and-rate combination. Nine such tones exist, so hearing one identifies both the band and the symbol length — the receiver is never told either.
HeaderMessage ID, chunk index, chunk count, payload length and an 8-bit check, as eight Hamming(7,4) codewords, sent three times over. Majority vote across the copies, then error correction on the result. The message ID and chunk index let the receiver reassemble chunks that arrive in any order and tell one message's chunks apart from another's.
BodyPayload and CRC-16 split into nibbles, one Hamming(7,4) codeword per nibble, then block-interleaved so a burst of noise damages many codewords slightly rather than one codeword fatally.
SymbolsTwo bits per symbol, Gray-coded across the four tones, so mistaking a tone for its neighbour costs one bit instead of two — exactly the error Hamming repairs.
ClockRather than trusting a measured edge, the receiver tries a spread of clock offsets across the whole sync burst, ranks them by how confidently the tones separate, and keeps the first whose header check passes. Multipath can shift an apparent edge by whole symbols; it cannot forge a valid header.