If I remember correctly, it is possible (but it is not used much today) to transmit data files using citizen radio stations in amateur bands (in our country they are CB on the frequency 27 MHz). Professional radio bands probably allow it too, but I don't have this concession, so I can't confirm that. I do not have detailed knowledge of how to solve data transfer. Either the harmonic frequency that is below the main carrier signal of the sound is used, or the sound itself is used. Of course, the transmission quality decreases with the distance at which the signal is distorted.
Basically, you just need to create two different signals, for 0 and 1, or 256 different signals, each for one byte, or as you say, make two signals (actually three, the third will be a break in transmission) and send each byte as a Morse code. The question is what is technically most appropriate.
Maybe use a signal with a different transmission length for the first tests? Short beep and long beep for each bit? This will eliminate any problems with frequency sensing. Of course, transmission in this way will be slow (if we construct it in the audible range). Just count it:
If I want to transfer 1024 bytes with a different beep length method:
1024 byte * 8 bites = 8192 bites. Each bit will contain some value. For zero let's say a 0.1 second long tone, for 1 a 0.4 second long tone. To separate the bits (tones), let's say a silence of 0.1 seconds. If the ratio of zeros to ones is half to half, it will take at least 4096 * 0.1 + 4096 * 0.4 + 8192 * 0.1 = 409.6 seconds + 1638.4 + 819.2 = 2867.2 seconds = rounded 48 minutes to transmit 1 kilobyte of information.
So we shorten the pulses 1000 times. As a result, the human ear will no longer evaluate every single pulse, it will sound like 8-bit computers recording a program from a tape, but the transmission will be significantly faster. No audio signal is required for this, but a data stream. It's basically the same thing, just at a much higher frequency. So the TCP / IP protocol could be used, just the output from the network card is redirected to the transmitter and receiver.
Because we use the powerful QB64 language, it already has networking commands implemented. I would recommend using it for the intended data transfer, these are _CONNECTED, _OPENHOST, _OPENCLIENT, _CONNECTIONADDRESS $ and similar functions. Of course, these commands are not used at all in the referenced program.
There are other options, such as adding an image to the audio track (this can be done without an audible difference) if you place the added bytes far enough apart in the audio. You can also play the image as a music track (normal images generate cracking and whistling, but some sound interesting, depending on how you get each music data, what bandwidth you choose, which channel to use as the main channel from the image, whether you combine different pixels, if you use the alpha channel of the image for different interpretations of the R, G, B channel, etc. It just allows you to be completely crazy things). You can also save your work with my program SaveSound16, which is also published somewhere on the forum, I think in the thread Drum machine, written by Dav.
Everything you describe can be done. You just always need the right converter.
I'm really glad you like my program (video) :)