Исходя из ограничений вашего вопроса, я думаю, что традиционный модем будет на самом деле излишним. Вам не нужно TCP-соединение для передачи файлов через аудиосоединение, и вам может быть лучше без всяких сетевых издержек.
Итак, давайте разберем этот вопрос. На одном компьютере у вас есть произвольный файл данных, и вы хотите закодировать его таким образом, чтобы он мог воспроизводиться как аудио, а затем декодироваться на другом компьютере.
Воспроизведение и запись должны быть довольно простыми - после того, как вы получите сгенерированный аудиофайл, можно использовать программу, подобную Audacity, для записи этого с аудиовхода на другом компьютере. Таким образом, сложная часть - это кодирование и декодирование аудиопотока.
Почему бы не использовать азбуку Морзе? Вы сможете использовать шестнадцатеричное представление ваших данных, и существуют инструменты как для программного кодирования, так и для декодирования аудио.
Конечно, упоминание о каком-либо дополнительном инструменте, необходимом для декодирования, поднимает вопрос: как бы вы получили этот инструмент на вашем компьютере в первую очередь? (Это было бы верно и для программного модема.) Если вы собираетесь набирать программу на конечном компьютере, чтобы выполнить декодирование для вас, ну, библиотека JavaScript с открытым исходным кодом - не совсем ужасная идея.
Вы можете использовать простой хэш контрольной суммы для проверки точности после кодирования, передачи и декодирования.