We help IT Professionals succeed at work.

Check out our new AWS podcast with Certified Expert, Phil Phillips! Listen to "How to Execute a Seamless AWS Migration" on EE or on your favorite podcast platform. Listen Now


Sick of being asked about .wav files and modems?

wheezle asked
Medium Priority
Last Modified: 2013-12-27
(There is a question here, please bear with me.)

After hours of searching online, there seems to be a consensus that you CAN dial a telephone number from your computer, play a .wav file, and have the person on the receiving end hear it -- and there appears to be two methods to do this:

a)  Software Solution.
Programs like Extra Dialer Pro, CallPad, pc-to-phone, and NetMeeting do it.  The modem needs to be a voice modem.  The programs get the modem to recognize the .wav format, then convert it into the modem's own file type in order to play it over the (analog) telephone lines.

b)  Hardware Solution.
Involves hooking the output of the computer speaker to the microphone of the phone, through an isolated circuit (since telephone regulations forbid loafing the power from the lines, and also if the telephone rings, that voltage will fry the sound card).  I found an "isolated telephone interface" on Google that will probably do it.

So, what do I need to know?

I want the software solution, but dumbed down -- the basic AT commands and the order in which they should be written.

Just so you know where I'm coming from, I've included the following:

I'm using Tcl (Tool Control Language) as a GUI to connect to the modem and convert this file and play it.  I don't want to have to call a program to do it for me, although it would be nice to interface with something like Extra Dialer Pro, considering it does exactly what I want (and also it's free!).

This is what I have so far, based on another guy in here who said you can set the FCLASS=8 for voice, then call the number, then have VLS=3 for setting the "output to your speaker and your input to your mic."

set serial [open com4: r+]
fconfigure $serial -mode "9600,n,8,1"
fconfigure $serial -blocking 0 -buffering none
puts -nonewline $serial "AT+FCLASS=8;\r"
after 100
puts -nonewline $serial "ATDT 9, (555) 555-5555; \r"
after 100
puts -nonewline $serial "AT+VLS=3;\r"
# play message to machine
PlaySound $serial

When I go to dial the number, it says NO CARRIER.  (Tcl people: Should fconfigure have -translation? -encoding?)  Another person on here in another question suggested using vgetty, but that looks like it only works with Linux -- I want a Windows-friendly solution (2k,XP).  I've also looked at TAPI but that confuses me even more.  Surely there is a simple procedure??

I just want a straight answer.  Please.
Watch Question

A few pointers - be carefull how you dish out modem AT commands, they can sometimes vary from the Hayes AT standard and towards a manufacturers hybrid AT.

set serial [open com4: r+]
fconfigure $serial -mode "9600,n,8,1"
fconfigure $serial -blocking 0 -buffering none

I assume you checked it is actually on enumerated port 4? Are you sure you don't wanna up yer baud rate here?

puts -nonewline $serial "AT+FCLASS=8;\r"
after 100
puts -nonewline $serial "ATDT 9, (555) 555-5555; \r"
after 100
puts -nonewline $serial "AT+VLS=3;\r"  is this '\r' a result of your language?

Can't verify the AT commands as you havent said what modem you will use (see my comments  above?

Maybe you'd be best gettin a modem and seeing what it does to connect from the  its output to the logfile and the contents of it's registers?

# play message to machine
PlaySound $serial

Sorry for not being constructive  
>A few pointers - be carefull how you dish out modem AT commands, they can >sometimes vary from the Hayes AT standard and towards a manufacturers hybrid AT.

I withdraw that comment.... mostly


Thanks for posting, HippyWarlock,

I know AT commands are specific to different modems, but I'll be using this on a couple computers with different modems.  Right now it's my pc, I think I have a no-name or a USR or something, and the other would be on a Compaq laptop.  I want it to work on one of them, I'll just have to worry about translating it to the other later.  (So for now say the laptop takes precedence.)

Let's put it this way:  If I get rid of the AT+FCLASS=8;\r  and AT+VLS=3;\r  commands (where \r signifies a carriage return), and the call number command is the only one left of the three, it calls the number no problem.  But you won't hear anything on the telephone because it's expecting something in binary or whatever.  Com4 is the right port.  Baud rate I have no idea, I was just using someone's example -- should I bump this up?  To what?

I'm looking for pseudocode, I guess.  But with examples.

Thanks again.
Unlock this solution and get a sample of our free trial.
(No credit card required)


Wow that's a lot of info, thanks!  :)

Okay, from I got from this command set, can someone tell me if I'm missing something from the following order of operations?  Will this work??

- open the port
- call number and wait for a connection (as before)
- enter the online command state (+++)
- change to the voice mode operation (CLS=8)
- route the speaker through the modem (VLS=2)
      (should this be 5 or 6 instead?? where is the speaker phone -- telephone, modem or other?)
- set to voice transmit mode (VTX)
- play the file
- return to whatever state, either online (ATO) or command (ATH)
- close the port etc. etc.

(It would be nice to add the VSS=2 and VSP=20, but I could also just make my program wait...)

Any thoughts??
Sorry, I'm a bit bogged down at the mo, and I remember the nightmare I had doing what your attempting.

Look here for more help - again sorry I can't do more but that's the fun of coding :-/ Sorting it out for yourself



No prob, I understand it's a huge undertaking.  I decided instead to implement this all with a hardware solution (isolated with a transformer, don't worry) where I hooked it up to the headphone jack, but I'm still really interested in a software solution.

I'm sure one of these days someone will post a good solution.  It's a hot topic.
Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.


Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.