title: How to implement a "fax protocol"?
body: <p>I want to write a program that programmatically sends faxes. Or receives faxes. <strong>But not with a modem.</strong> I guess I'm trying to write a fax simulator. Everything that the hardware does, I want to do using software.</p>
  
  <p>There are a billion SO questions on the topic, but they either suggest an online service to use or they point me to a library, which talks to my computer's modem. So here are my specific questions:</p>
  
  <ol>
  <li><p>When I send a fax, I can hear the warbling on the telephone line. This tells me that my fax machine is generating tones that are consumable by the recipient's. <strong>What is that protocol?</strong> Is there an RFC which specifies how a "pixel" is converted to a "frequency"? <strong>Do the machines communicate back and forth, or is it one-way?</strong></p></li>
  <li><p>If we can agree that a fax machine translates sound frequencies to images, then one ought to be able to write a program which takes an MP3 of a fax transmission and outputs a graphic. <strong>What do I need to know in order to do this?</strong></p></li>
  </ol>
  
  <p>Are these questions based on any flawed assumptions? Where should I start so that I can accomplish goal #2 from above?</p>