I'll answer my question.
There are some basic things you'd need to know in order to pull bytes in from an original Altair 8K BASIC cassette tape.
In my case I wanted to decode the tape to a file and end up with a binary file... so I used minimodem to decode the tape to a file of binary bytes (minimodem is a nice software FSK modem program, follow the link to github, or it may be available on your systems package manager). If you're using a cassette tape interface, all of the following still applies in order to decode the byte stream.
This tape starts with a leader of 0xae bytes. That happens to be the length in bytes of the checksum loader which is found at the beginning of the tape.
After the last 0xae, there follows 0xae bytes of the checksum loader, and importantly, the loader is stored on the tape in reverse byte order. They were ever concerned with code compactness and so in order to minimize the number of bytes for the first level bootstrap loader that the user had to toggle in, they stored the checksum loader in reverse byte order, so they could use a simple decrement and test for zero to know when to stop.
Following the checksum loader is a number of null bytes (0x00).
After the nulls are the packets that make up BASIC. The first byte of a packet denotes the packet type. There are only 2 types of packets on the remainder of the tape: 0x3c packets, which contain BASIC code to be loaded, and a single 0x78 packet that indicates the end of the basic load and provides a start address.
The 0x3c packets have the following format:
0x3c -- the packet tag
0x?? -- the number of bytes (n) in the payload of the packet
0x?? -- the low byte of the address into which to load the data
0x?? -- the high byte of the address into which to load the data
0x??... n data bytes to be loaded
0x?? -- An 8 bit checksum of the packet, not including the tag and length.
the 0x78 packet has the following format:
0x78 -- the packet tag
0x?? -- the low byte of the start address
0x?? -- the high byte of the start address
You should note that the data packets generally load in increasing memory address order, but the last packet loads back at page zero.