Overview of the Indy Phone


The Indy Phone provides a two-way real-time voice communication link between two or more Silcon Graphics Indy workstations.



Using the Indy's audio libraries, two programs were created to provide the separate tasks of recording and playback of data streams.

audior (Audio Recording)

audior performs the tasks of recording 254 16-bit 8kHz samples from the Indy's microphone, compressing the 16-bit to 8-bit mu-law, compressing the samples further by silence compression, and then directing this output to stdout. This process is repeated indefinitly. In addition, audior sets the microphone level to a reasonable setting during the first execution of the program.

A more detailed breakdown of audior (in order of execution):

The silence compression looks for successive samples in which the amplitude of the recording falls below a set level. If there are a set minimum number of these valus in a row, audior will compress them to a single silence designated byte (currently FFh) and a byte whose value indicates the number of samples in the silence.

The mu-law conversion compresses the 16-bit linear scale to an 8-bit logarithmic scale. Fidelity to 13-bits is kept near the minimum audio levels and decreases as the amplitude increases; therefore, you can support a large range of audio dynamics while maintaining small sample size without losing fidelity.

audiop (Audio Playback)

audiop reverses the steps of audior. It reads 254 or less bytes from stdin, removes the silence compression, converts the 8-bit mu-law back to 16-bit linear, and then plays back the result through the speaker. This process is also repeated indefinitely. Likewise, audiop sets the speaker level to a reasonable setting during the first execution of the program.

A more detailed breakdown of audiop (in order of execution):

The playback buffer allows data to be sent for playback while continued execution of the program occurs.

It was discovered that many instances of audiop may run simultaneously--allowing more than one conversation.



The data normally sent to stdin and stdout is redirected through sockets using Richard Forsman's netpipes utility.

faucet (Socket generator)

faucet sets up a socket and port and begins to redirect a program's output through this socket. It was also discovered that faucet supports multicasting (the transmission of data to two or more pipes) allowing conference calls.

hose (Socket connection client)

hose attempts a connection to a previously created socket and port. If a connection is established, hose redirects the data it receives into the stdin of a program.



Because the command line arguments to faucet and hose are fairly long, two shell scripts were created to facilitate execution of the Indy phone.

talkto (transmission launcher)

talkto executes faucet to opens up a socket on the user's terminal on port 2010. It then begins to redirect audior's output to the socket.

listento (reception launcher)

listento executes hose to open up a socket at a given address on port 2010 and then directs the input to audiop.

Both programs begin to run in the background and can be terminated using the kill command.


Send mail to Jason Gayman

Last updated: December 16th, 1995
Jason Gayman (jase@owlnet.rice.edu, jase@gayman.hanszen.rice.edu)