Insufficiently Random

The lonely musings of a loosely connected software developer.

Thursday, January 1, 2004

End of xspeakfree at

xspeakfree is a Tcl/Tk (wish) frontend to Speak Freely.

xspeakfree is no longer being maintained by me. I have lost all copies of the source code in a freak accident with rsync while updating this website in the past, and since it has been 6 years since I last used Speak Freely, I have not searched out copies to put back here. Some Linux and BSD distributions have included xspeakfree in their packages before, I'm not sure how many continue to.

Speak Freely is being discontinued on January 15th, 2004 from the fourmilab website. Its author, John Walker is apparently no longer developing the package.

I recommend version 8.0 of both Tcl and Tk, however there is little reason an older version shouldn't work.


  • wish (Tcl/Tk), suggested version 8.0p2
  • sfspeaker and sfmike, suggestion version 6.1c
  • mkfifo (your kernel must support fifos)
  • /tmp must be writable by the user using xspeakfree


Use google to find it. Make sure to skip this website. :-)

xspeakfree is also available as a NetBSD package, thanks to the efforts of Johnny C. Lam . For more information on the package, see:

Using xspeakfree:

There is no online help as its very simple and similiar to the Windows version of Speak Freely. If you have a problem using the program try searching Google.

xspeakfree executes a file on startup, its called .xspeakfree.rc in your HOME directory. This file is NOT a shell script, its a Tcl script source'd in though the Tcl interpreter.

To connect to a remote host and send audio, either go to
connection and select "New" and type in the host name, or
click on their name in the Target Host list with Button-3
(right mouse button) and select "Connect to host".
This will cause any current sfmike to exit and a new one to
start with the current settings sending audio to the newly
selected host. Clicking on an already selected host name is
a nop.

As hosts connect to your sfspeaker, they will be added to the
host list automatically. As hosts disconnect, they will not be
removed from the list. This is a change from its previous
behavior of removing a host from the list after a disconnect.

Check out the Options menu. It should be self explanatory.
If its not, let me know.

OS Features:

If you are on an SGI, you will note there is an "Irix" menu on
the menubar. Any other OS this should be omitted.

The only special support for Irix right now is launching the
Audio Panel directly from xspeakfree. I'd like to add more
support than that, especially for ther OS's.

If people can send me what options they want for what OS, as
well as the output of just "uname" for their OS - or some
other method of dertermining from a shell the OS type, as well
as how to do the options (ie I have NO CLUE how to control
volume on a Sparc Station so you have to tell me) I'll
try to add in the support for that OS.

.xspeakfree.rc file:

This file is executed right before the window appears, after all defaults have been programmed. This way you can override any default settings, configure your audio hardware, etc.

In order to execute a shell command, simply prefix the line
with a "exec", ie on my SGI my .xspeakfree.rc file has this line
in it to configure my input port for the microphone:

exec apanel -nodisplay -nofork -defaultout AnalogOut2 -device
AnalogOut2 -gain 7.5 -rate 8000 -unmute

This has the effect of running the program apanel with that
mess of arguments. =)

I'm not going to help you with Tcl, go look on the web, there
are plenty of online manpages there. But here's a list of the
variables you can modify and what effect they will have:

All defaults for these variables are the normal Speak Freely
software defaults. =)

Speaker(port)default port for sfspeaker to listen on
Speaker(args:jitter)jitter setting, must be the full
commandline value, ie "-J2000" for 2 seconds.
Speaker(args:disable_remote_ring)set to "-n" to disable
remote ring, " " to turn this feature off.
Speaker(:record:onoff)set to 1 to record audio,
0 to not. default is 0.
Speaker(:record:file)set to the file path to store
recorded audio in. ignored unless Speaker(:record:onoff)
is set to 1.
Speaker(:record:append)set to "+" to append to record f
instead of overwriting. set to "" to overwrite.
Speaker(args:user)additonal arguments for sfspeaker
Speaker(:crypt:method)set to " " to use none,
"-O" for file, "-I" for IDEA, "-K" for DES
and "-Z" for PGP pass phrase.
Speaker(:crypt:-I)IDEA string
Speaker(:crypt:-K)DES string
Speaker(:crypt:-Z)PGP pass phrase
Speaker(:crypt:-O)File path
Mike(args:simplecompression)set to "-C" to turn on simp
compression, set to " " to turn it off. Yes, its off
value is a space.
Mike(args:compression)set to "-N" to turn off all
compression, set to the appropiate sfmike argument for
that compression setting. ie "-T" will turn on GSM,
-LPC10R1 will set up LPC10, one copy. Default is GSM
Mike(args:protocol)set to " " for Speak Freely protocol
otherwise set to the sfmike argument for the protocl
you want.
Mike(args:user)additional arguments for sfmike, provide
just in case.

To set one of these variables, you can use the following syntax:

                set  "new value"        


                set Mike(args:compression) "-LPC"
to set the default compression as LPC.

LWL information is taken from the environment variables:

SPEAKFREE_LWL_TELLcomma seperated list of
SPEAKFREE_IDinformation of the format of:


This file is parsed at startup, it is NOT a Tcl file, rather a
plain text file containg two types of lines: comments and
hostnames. comment lines begin with a '#'. host names look

        hostname        comment
these hostnames are loaded into the target host list at startup and the comment field is placed in parens next to the name.  ie a line like this in .xspeakfree.hostlist:        Shawn Pearce

becomes: (Shawn Pearce)
in the host list.

This file is NOT modified by the program, it is to be modified
by the user. Perhaps in the future I will make it modifiable
through the program.


Shawn Pearce


Johnny C. Lam: NetBSD package.
Ivan Popov: Blowfish support.