What you are asking for is pretty straight forward whilst being awkward at the same time - when you heard the modem noise, it isn't actually data per se, but data in a specially designed protocol.
A big misconception is that all audio on a modem sounds like the initial sound - in fact, the actual sound of "data" is different, the reason why logging on always sounds the same is because it is nearly always sending pretty much the same signal/information.
So, if you want to convert data to sound, probably the simplest way would be to choose a (lossless) easier format such as MIDI, or search Codeplex/similar sites for midi components that will greatly simplify your job.
Next, I am not sure how many unique notes there are, but I assume there is at least 65025 different possible unique notes(through pitch etc.), - just as a raw example, you could open the source file as a raw data file and basically map each hex double to a note.
So, basically you will be artificially creating a sound file by giving it the right header/footer, then simply padding it out by encoding each byte of the file as a different note. In addition, you can have a checksum/end and start character if you so wish.
You will need to build an encoder and decoder which will not be very easy, but, I do not see this being impossible and you should be able to produce an audio sound! ... I doubt it will sound like a modem - but - who knows!
Please note - I am not a sound engineer... If I am wrong about MIDI, choose another format... Judge this based on the idea!
minimodem
. It can be used as a sender / receiver and also encode / decode by file.cat file | minimodem --write 1200 -f out.flac