I’m currently trying to set up a homebrew cassette tape storage format, but trying to use existing tech where possible. I was excited to see that minimodem
already exists for converting an audio stream to a byte stream, and is even available in termux
for android, so I could decode cassettes with my phone! However, I’d like some sort of higher-level tool to encode and decode “packets” or “slices” so that I can add error correction. I’m sure this sort of thing must exist for amature radio purposes.
I could write a script that cuts a file into slices, with checksums and redundancy for each slice, and then pads them with null bytes so I can isolate each frame when decoding. What I want is to find out if that’s already been done. I’ve heard of AX.25 packets but I can’t find a tool that does that with stdio.
I did use
par2
andtar
to generate redundancy, but I still need a way to locate it in the bytestream. Tar doesn’t seem to reliably mark the start or end of files :/What are you using to control/access the tape? tar should handle that just fine, considering that’s what it was originally made for.
I’m using a regular off-the-shelf tape recorder, it doesnt have an electronic interface, I just press play and record manually.
So how are you retrieving files? Writing down timestamps? Tar should be able to find the start of an archive if you give it a little lead-in.
That’s exactly what I thought would work, but it doesn’t.
Tar doesn’t natively have an index to immediately seek to files in the tar archive, though I know that it’s possible to extend it with an index somehow, because pixz will do a parallel LZMA compression that involves generating and using an index for tar archives.
EDIT: Oh, I think I see what you mean. You’re saying that you want to use tar to store the redundancy files, not generate redundancy data for the file as a whole? Like, a tar of PAR2 files? I don’t think that that’ll work, because you’ll want redundancy for tar’s metadata too.
EDIT2: So what you want is a single bytestream with forward error correction, not a set of files that provide it.
kagis
It looks like this guy has an implementation, and says that he’s using Reed-Solomon, but that it’s also just his weekend project, so…shrugs
https://hack.systems/2018/05/16/redupe/