This might not help you out, but fiddle~, pitch~ and analyse~ track high frequencies much better than low. You could try multiplying your ascii input by 10 or so before you send it as audio, and then multiply the results of your frequency tracking by 0.1 to get back to ascii values.
Wonder if you could use good old AM for this, maybe like so:
1) each character lasts for 1 second
2) there are 32 distinct pitches,just plain cycle~ objects, in a good range for fiddle~
3) if there's no change in amplitude through the pitch, it's bank 1; if there's one "dip", it's bank 2; etc. up to 4 banks. Or 16 pitches with 8 banks. Should be able to decipher the dips at the other end with some patching, counting the changes in amplitude over the second timespan. Maybe you can get a lot faster too.
So, just using a simple cycle~ and *~ to modulate the outgoing pitches the right number of times per second should (in theory) work... might sound cool too.
If you get a more robust fft~ kind of analysis going, you can add different cycle~ objects together to make different ascii values: if there's only a fundamental pitch, it's bank 1; if there's a first harmonic, it's bank 2; etc.
edit: you could make the different banks based upon overall pitch loudness, would be a lot easier, doh :