Recording and playing back the recorded data immediately

Purpose.  This program opens two lines: one for recording and one for playback. In an infinite loop, it reads data from the recording line and writes them to the playback line. You can use this to measure the delays inside Java Sound: Speak into the microphone and wait untill you hear yourself in the speakers. This can be used to experience the effect of changing the buffer sizes: use the -e and -i options. You will notice that the delays change, too.

Usage. 

java AudioLoop -l

java AudioLoop [ -M mixername ] [ -e buffersize ] [ -i buffersize ]

Parameters. 

-l

lists the available mixers

-M mixername

selects a mixer to play on

-e buffersize

the buffer size to use in the application ("extern")

-i buffersize

the buffer size to use in Java Sound ("intern")

Bugs, limitations.  There is no way to stop the program besides brute force (ctrl-C). There is no way to set the audio quality. The example requires that the soundcard and its driver as well as the Java Sound implementation support full-duplex operation. In Linux either use Tritonus or enable full-duplex in Sun's Java Sound implementation (search the archive of java-linux).

Source code.  AudioLoop.java, AudioCommon.java, gnu.getopt.Getopt