Snd

Snd is a sound editor.  It currently runs on the SGI, Sun, UnixWare,
OpenServer, HPUX, DEC Alpha, Linux, LinuxPPC, FreeBSD, Mac OSX,
and BSD (BSDI 4.2).  And Stefan Schwandter says, "Snd now compiles on mips, 
mipsel, hppa, ia64, arm, sparc, s390, and m68k."  It compiles and loads
in Windows/Cygwin.

To build Snd, get the sources from

  ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-7.tar.gz

  gzip -d snd-7.tar.gz
  tar xf snd-7.tar
  cd snd-7
  ./configure
  make
  make install

The configure program has several Snd-related arguments:

   --with-motif          use Motif (the default)
     --with-static-motif same, but load Motif statically (for RPM)
     --with-motif-prefix set Motif location (will append lib and include)
   --with-gtk            use Gtk+ (this port still needs work)
   --with-no-gui         make Snd without any graphics support

   --with-alsa           use ALSA if possible (default is OSS in Linux)
     --with-static-alsa  use ALSA statically loaded (for RPM generation)
   --with-esd            use the enlightened sound daemon, if possible
   --with-jack           use the Jack library (can be used in conjunction
                           with --with-alsa)

   --with-doubles        use doubles throughout (default is floats)
   --with-float-samples  represent samples internally as floats (default: ints)
   --with-sample-width=N use N bits of samples (default: 24). N = 32 or so is 
                           not recommended because it does not leave you any 
                           "head room" during mixes. N < 16 isn't supported.

   --with-gl             include support for OpenGL (default: no)
     --with-just-gl      same but omit Guile bindings in gl.c (default: no)
                           The gl module is only useful if you want to write
                           Scheme code to add your own OpenGL graphics to Snd.
                           --with-just-gl will give you the GL spectrograms
                           without any extras.

   --with-ladspa         include LADSPA plugin support (default: yes in Linux)
   --with-static-xm      include the xm module (rather than loading it dynamically)
			   this option affects xm.c for Motif, xg.c for Gtk.
                           You'll need this (or need to make xm and load xm.so
                           at runtime) if you want to use Dave Phillips'
                           extensions described in the tutorial.
   --with-x11            if --with-gtk, this includes the X funcs from xm.c
			   This is a special case -- not normally useful.
         
   --with-static-gsl     try to load GSL statically (for RPM)
                           GSL is loaded in any case, if it is available, and the
			   ISO C99 complex trig support is not available.
                           This affects only the Dolph-Chebyshev window.  FFT's 
                           are currently handled by FFTW, if it is available, otherwise
                           by built-in code.

   --with-snd-as-widget  make Snd a loadable widget, not a standalone program

   --with-ruby           try to use Ruby as the extension language
     --with-ruby-prefix  set location of Ruby
   --with-guile          use Guile, not Ruby (the default); the path to guile-config
                           can be set via GUILE_CONFIG_path (see examples below).

			 To build Snd without any extension language, use
			 --without-ruby --without-guile

   --with-temp-dir       directory to use for temp files (default: ".")
   --with-save-dir       directory to use for saved-state files (default: ".")
   --with-shared-sndlib  try to use libsndlib.so (default: no).  The path to
                           sndlib-config can be specified via SNDLIB_CONFIG_path.
			   Normally, sndlib is built into Snd at compile time.
   --disable-nls         the gettext (internationalization) support is on
                           by default; this turns it off.

   --without-gsl, --without-fftw 
                         these turn off the default inclusion of FFTW and the
                         possible inclusion of GSL.

If the configure/make process fails, please send me
(bil@ccrma.stanford.edu) the files config.h, config.log, and makefile,
created (or updated) by configure.

If you don't have Guile or Ruby, Snd can still be built, but it's
severely limited in what it can do.  Snd can also be built without
any graphics toolkit.  Without either the GUI or the extension
language, however, there's nothing it can do.

Here at CCRMA, we use this configure invocation:

  ./configure --with-alsa --with-temp-dir=/zap --with-static-xm --with-gl

but I'd recommend --with-just-gl elsewhere (the various GL implementations
are different enough that gl.c can be a pain to build).


----------------------------------------------------------------
The customization/extension languages are either Guile or Ruby.
Guile is available in the Gnu distributions:

  ftp://ftp.gnu.org/gnu/guile/guile-1.6.4.tar.gz

To include guile in Snd, either use the configure script (which should
be able to find the guile library automatically), or go to the
relevant makefile, set the CFLAGS variable to include 'guile-config
compile', and set the LIBS variable to include 'guile-config link'.
Only guile 1.3.4 or later is supported.

Just as a quick example:

  (set! (transform-size) 4096)

sets the transform size to 4096, and

  (scale-by 2.0)

scales the current sound's volume by 2.0 -- the syntax is Scheme,
a variant of Lisp; see the urls below for some Scheme tutorials.
The details of Snd customization are discussed in extsnd.html
and grfsnd.html.

To use Ruby rather than Guile use the --with-ruby configure
switch.


There are RPM packages of Snd available at the ccrma-ftp site
mentioned above: snd-7-2.i386.rpm and snd-7-2.src.rpm.  These RPM
files have been superseded by Fernando Lopez-Lezcano's set available
at http://www-ccrma.stanford.edu/planetccrma/software/


----------------------------------------------------------------
Included with Snd are five command-line programs that might
be of interest: sndplay, sndrecord, sndinfo, sndsine, and audinfo:

  make sndplay



----------------------------------------------------------------
The documentation is in snd.html, extsnd.html, grfsnd.html, sndscm.html,
sndlib.html, clm.html, fm.html, and libxm.html.  There's also a fancier 
wrapper for the documentation: snd1.html.  A brief change log is in HISTORY.Snd.
Dave Phillips has written a tutorial: see the tutorial directory.


The mailing list for Snd is the same as that for Common Music:
cmdist@ccrma.stanford.edu.  To subscribe, visit

http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist

The mailing list has been auto-archived since Apr 2002;
the previous posts (going back to late 1993) are in
ftp://ccrma-ftp.stanford.edu/pub/Lisp/old-cmdist.html.


----------------------------------------------------------------
This software is available to anyone who is interested, free gratis
for nothing, without warranties of any kind (see the file COPYING for
legalese).  Send bug reports or suggestions to bil@ccrma.stanford.edu.
----------------------------------------------------------------


Authors:
Bill Schottstaedt
Michael Scholz: the German translation, the Ruby code, snd-inf.el, and the Forth version of sndlib.
Fernando Lopez-Lezcano: the current ALSA support.
Dave Phillips: the tutorial, new-effects.scm, and many other files.
Kjetil S. Matheussen: snd_conffile.scm, ladspa.scm, gui.scm, and the Jack audio support.
Richard W.E. Furse: the original LADSPA support.
Nick Bailey: the ESD support.
Larry Plona: the OpenServer and UnixWare ports.
Volker Kuhlmann and Seppo Ingalsuo: the Solaris port.
Seppo Ingalsuo: the HPUX port.
Juan Reyes: the DEC Alpha port.
Guenter Geiger and Stefan Schwandter: the Linux Alpha port.
Paul Davis: the original ALSA support.
Gerd Rausch: the Sam 9407 support.
Steven Schultz: the BSD port.
Ludger Brummer and Charles Nichols: the Mac-OSX port.
Plus many other contributions from
  Dave Phillips, 
  Fernando Lopez-Lezcano, 
  Tom Roth,
  Michael Scholz, 
  Fabio Furlanete,
  Kjetil S. Matheussen,
  Rick Taube,
  Anders Vinjar.


In terms of number of lines, the languages used in Snd/Sndlib are:
C, Scheme, Ruby, Forth, m4, Common Lisp, Emacs Lisp, javascript,
and postscript.


----------------------------------------------------------------
TROUBLES:


---- Linux audio: ----
In Linux, Snd sometimes can't seem to play or record when other
applications are happy -- if this happens, please run the function
mus-audio-describe (via M-x) and send me whatever it prints out.

If you're using the Sonorus Studio card and getting interruptions,
try (set-oss-buffers 64 16).  I think the RME Digi96 card's defaults
are 32 and 12 (just a guess). 

If you're running esd, you need to build Snd with the configuration
switch --with-esd.  Otherwise, it's likely you'll get an error
from the 'play' button complaining about data formats, probably
that it can't play big-endian shorts.


---- Recording: ----
The Record dialog only works in Linux (OSS, perhaps ALSA), Sun, some
SGI systems, and perhaps Mac OSX.


---- Colors: ----
If you're running KDE and the menu labels are invisible, check
the 'theme' you're using.  You normally want black label foregrounds;
you can get these by

    ./snd -xrm '*foreground: Black'


---- Fonts: ----
If you're getting empty boxes where characters should be, or Xt
warnings about missing font characters, check your LANG and
SUPPORTED environment variables.  If they're UTF-8, you should
probably add lines such as:

setenv LANG en_US
setenv SUPPORTED en_US:en

to your .cshrc file to override the bogus settings.  (In RedHat
Linux, the bad settings come either from /etc/profile or from 
the lang.csh file in /etc/profile.d).


---- Compiling: ----
If you get the error:

 snd-x0.h:9 Xm/XmAll: No such file or directory

This probably means you don't have the Motif headers installed -- to
build Snd with a GUI from the sources, you need either Motif or Gtk+.
Motif has been released as open source software: see the url
mentioned below.  If you installed the openmotif library rpm package,
it may not have included the headers (look under
/usr/X11R6/include/Xm); to build Snd from the sources you need the
headers (in the openmotif-devel packages).

In Debian, apt-get install libmotif-dev.

If you have installed Motif in some weird place, use the -I compiler
flag to provide that information to the compiler.  I've added the
-with-motif-prefix argument to the configure script, but don't know if
it works; if, for example, you have Motif in /usr/local/lib and
/usr/local/include, try --with-motif-prefix=/usr/local

If Snd using Lesstif is messed up, that's Lesstif's problem!  I'm
not trying to support this anymore.


---- ALSA: ----
Only versions from 0.9 of ALSA are supported. If you get a compile-time
complaint about snd_pcm_hw_params (ALSA 0.9beta4) you need to get
a newer version of ALSA.

On recording, here's a note from Fernando from cmdist:

    > Recently I installed a sound card with digital in (with cmi8738 chip)
    > in my linux system with alsa. With 'arecord -D hw:0.2' I can succesfully record
    > from my digital input. How can I do the same with with Snd? The
    > digital inputs do not appear on the record window. I compiled Snd with alsa support.
    
    You could try to set up an environment variable before starting snd to 
    point to that particular device. This is the way snd reacts to env 
    variables:
    
    - searched for in the following order:
      SNDLIB_ALSA_PLAYBACK_DEVICE
         defines the name of the playback device
      SNDLIB_ALSA_CAPTURE_DEVICE
         defines the name of the capture device
      SNDLIB_ALSA_DEVICE
         defines the name of the playback and capture device
      use the first two if the playback and capture devices are different or the
      third if they are the same.
    
    So you could try:
      SNDLIB_ALSA_DEVICE="hw:0,2" snd
    if you are using bash as your shell
    
    This should use the digital i/o as the input output device.  It would also
    be possible to concatenate several devices using a definition in the
    .asoundrc file but that would involve understanding its arcane
    configuration language, which I don't. The current snd alss 0.9 code only
    looks at the first device it finds (normally hw:0,0).
    
    -- Fernando

There's also a discussion of RME cards in the cmdist archives.


---- Gtk+: ----
Only Gtk-2 or later is supported.  

If you get an error like:

  Gtk-WARNING **: <much useless mumbling>

you can find where it occurs by:

  gdb snd
  run --g-fatal-warnings
    <now do whatever it takes to hit the warning>
  where


---- GSL: ----
If configure finds GSL, but Snd refuses to load with an error
about missing gsl_complex_cos (or whatever), you need to get the
GSL sources and build it again; apparently the version of libgsl.a
that comes with Redhat 7.0 doesn't include any of the complex
trig package?  Snd needs GSL 0.8 or later.


---- Guile: ---- 

If you get a complaint along the lines of "ice-9/boot-9.scm not
found", it means you're running a version of Snd that has Guile
loaded, but Guile isn't installed locally.  You need to install Guile.
If Guile is installed, try running 'guile-config info' to find out
where it thinks its boot files are.  It's not impossible that running
snd under strace would show you what the actual desired path is.  In
the copious strace output, you should be able to find lines like:
    stat("/usr/local/share/guile/1.4/ice-9/boot-9.scm"...)

If you have installed Guile, but the snd image is looking in the wrong
place, try setting the envinronment variable GUILE_LOAD_PATH to the
correct directory:

  setenv GUILE_LOAD_PATH /home/jimb/guile-snap

  (fink): setenv GUILE_LOAD_PATH /sw/share/guile/1.6

Another possibility is the %load-path variable; in your ~/.snd file try
something like:

    (set! %load-path (cons "/home/bil/test" %load-path)))

(assuming you've put the guile files into /home/bil/test).


If the configure script says that your guile doesn't have
scm_make_smob_type, yet you do have guile 1.3.4 (or later) installed,
it's probably because the RedHat installer or someone, installed Guile
1.3 in /usr/bin and /usr/lib, but then the new version got installed
in /usr/local/bin.  The simplest fix is to remove /usr/bin/guile and
/usr/bin/guile-config.  If you get an inconsistent state here (that
is, configure thinks you're loading 1.3, but Snd itself finds 1.3.4),
you will get segfaults when the hooks are accessed (and probably
elsewhere).  If you can run Snd at all, try snd --version -- this will
try to catch and report consistency problems.


If you want to keep several Guile versions around, but use a
particular one for Snd, use the configure variable GUILE_CONFIG_path:

./configure GUILE_CONFIG_path=/home/bil/test/bin

In this case, the configure script looks for /home/bil/test/bin/guile-config
and uses the paths it returns to build Snd.  See also the PATH business below.


> Other thing is that configure doesn't find guile-1.4.
> For some reason it thinks it's an older version and I have to manually edit
> config.h

It's using guile-config to find guile; if you've got more
than one guile-config, it's up to your PATH setting, or
something, which one gets called.  In Redhat, an ancient
version gets installed in /usr/bin, then if you install
your own using the defaults, it ends up in /usr/local/bin,
and in many cases, the new version is not noticed. You
could delete or rename /usr/bin/guile-config or change the
relevant environment variable.  To see what configure sees,
in a shell try guile-config link or guile-config --version.

Fernando Lopez-Lezcano mentioned this possibility:

  If you want to force a different guile do (if you're using bash):

    PATH=/usr/marco/nicepath/bin/:$PATH ./configure --with-alsa --with-gtk

  where /usr/marco/nicepath/bin is the path where the guile-config you want
  is located. Do the same thing when you make:

    PATH=/usr/marco/nicepath/bin:$PATH make


If you're running Guile 1.4 and get:
    Syntax error in fixed argument declaration.
you've hit a use of the newer (Guile 1.5) optargs syntax.  To get around
this, load fix-optargs.scm before anything else.  There are other
similar problems involving "applicable smobs" and the tab-completion
system; if possible, get the latest Guile.


If you're using the CVS Guile (1.7.0), or Forte C on a Sun, and get
some complaint about lt_dlopen (or some name like that), you need to
add -lltdl to the library list.  If that doesn't fix it, add
-lguile-ltdl -- this part of the CVS guile is in flux, so the load
sequence is tricky.



---- SGI/OpenGL ----

OpenGL comes with the SGI, but its drawing area widget seems to be less
than adequate -- I use Mesa on Linux where X drawing commands can be mixed
with OpenGL.  On the SGI, the colors are all messed up.


---- Gtk/OpenGL ----

I'm currently depending on the user to do something reasonable in regard
to placement of the GtkGLext headers and libraries.  If they aren't in
automatically searched directories, you'll have to fix up the makefile
by hand.  For example, I built GtkGLext --prefix=/home/bil/test, so
I added the two /home/bil/test directories to the makefile:

  GL_LIBS = -lGLU -lGL -L/home/bil/test/lib -lgdkglext-x11-0.x -lgtkglext-x11-0.x

Don't run the Motif/GL and the Gtk/GL versions of Snd at the same time.
This can kill the X server!

Another problem with gtkglext is that its developers have been screwing
up library version numbers, so if you want to upgrade your version, first
completely delete every trace of the former version -- check especially
/usr/local/lib!  If the loader gets confused by leftovers, you'll get
an error along these lines:

(snd:16515): GLib-GObject-WARNING **: specified class size for type `GdkGLWindow' is smaller than the parent type's `GdkDrawable' class size



---- Sun ----

If the make process complains about lt_dlclose and friends, add -lltdl
to the GUILE_LIBS list in makefile.  The --with-gl and --with-just-gl
switches are not recommended on the Sun, though they work; the
colormap of the entire system is hijacked while Snd is running.


---- Mac OSX: ---- 

The Snd configure process is confused by the lack of pkg-config (if
Gtk requested), and for Motif, by a problem with dynamic loading, so
you need to run configure, then fixup some portions of the makefile
before running make.  In Motif, you need to make sure libXt.a is
loaded:

MOTIF_LIBS =  -L/usr/X11R6/lib  -lSM -lICE /usr/local/lib/libXm.a /usr/X11R6/lib/libXp.a /usr/X11R6/lib/libXt.a -lXext -lXpm -lX11
# MOTIF_LIBS =  -L/usr/X11R6/lib  -lSM -lICE -lXm -lXt -lX11  -lXext -lXp -lXpm

or, if you installed libXm.a in /sw/lib (via Fink, or something):

MOTIF_LIBS = -L/usr/X11R6/lib -lSM -lICE /sw/lib/libXm.a /usr/X11R6/lib/libXp.a /usr/X11R6/lib/libXt.a -lXext -lXpm -lX11


And you'll probably need to add some things to the GUILE library list:

GUILE_LIBS = -L/usr/local/lib -lguile -lm -lguile-ltdl -ldl

or, in the fink case:

GUILE_LIBS = -L/sw/lib -lguile -lm /sw/lib/libguile.a
GUILE_CFLAGS = -I/sw/include/


If configure didn't find Gtk or Motif, it's possible the header flags will
also need to be fixed:

# GX_HEADERS = $(NO_GUI_HEADERS)
# GX_FILES = $(NO_GUI_O_FILES)
GX_HEADERS = $(SND_X_HEADERS)
GX_FILES = $(X_O_FILES)



If the openmotif package forgot to include libXm.a, a version is
at ccrma-ftp.  If the Mac loader complains that it it out of date,
run ranlib: ranlib libXm.a (you may need to be root to do this).


I haven't tried Gtk+ in OSX for maybe a year, but back then I made
these changes:

GTK_LIBS = /usr/local/lib/libgmodule.a /usr/local/lib/libglib.a /usr/local/lib/libgdk.a /usr/local/lib/libgtk.a -L/usr/X11R6/lib -lXext -lX11 -lm

	
If C-f (and other such commands) doesn't work, either try toggling
the "w" button, or add the focus-widget related hooks from grfsnd.html
to your initialization file:

(add-hook! mouse-enter-graph-hook 
  (lambda (snd chn) 
    (focus-widget (car (channel-widgets snd chn)))))
(add-hook! mouse-enter-listener-hook 
  (lambda (widget) 
    (focus-widget widget)))
(add-hook! mouse-enter-text-hook
  (lambda (w)
    (focus-widget w)))

See also the cmdist archives for tips from Juan Pampin and others.

Here's some info from Josh Mattoon:

    "It turns out everything required for snd is now in fink! 

     sudo fink install openmotif3 fftw guile guile-dev 

    So... after a loooong compilation process (fftw required g77) I had
    everything in place.  But ./configure couldn't find them, d'oh.  My
    simple solution was to pass in the CFLAGS and LDFLAGS as so:
    
    CFLAGS=-I/sw/include LDFLAGS="-L/sw/lib -lmx -bind_at_load" ./configure \ 
         --with-gl --with-editres --with-static-xm --with-guile
    
    This was after a bit of trial and error.  The linker couldn't find
    some symbols that turned out to be in libmx, so I added that, and the
    linker also suggested the bind_at_load (though I'm not totally sure
    what that means)."

(Just a note that fftw is optional -- if it is omitted, Snd will
fallback on its own (slower) version of the fft).

The ccrma-ftp images osx-10.2-snd and osx-10.3-snd need only guile 1.6.4;
  everything else (well, leaving aside -lm) is loaded statically.  The guile
  libraries are loaded statically, but guile needs its "boot" files in
  its ice-9 directory whenever it starts, so you need it installed.  Set
  the environment variable GUILE_LOAD_PATH to point to your version:

    setenv GUILE_LOAD_PATH /Users/Mozart/Desktop/guile-1.6.4

Loading xm.c (--with-static-xm etc) is problematic on Mac.  If you use
the libXm.dylib from openMotif, you'll probably need the langinfo
library as well (motifzone has this in the package "darwin-extras");
you need to add -llanginfo to the makefile (but -lXm will work in this
case).  If you use libXm.a from ccrma-ftp, you'll need to go to
config.h and set the macro HAVE_XmToolTipGetLabel to 0.

The dac-size variable seems to matter a lot in OSX.  If you're
getting distorted playback, try various powers of 2.  It defaults
to 64.


---- Motif: ----
If you installed OpenMotif, then upgraded to RedHat 7.2, Redhat
probably overwrote Motif with Lesstif.  You need, among other
things, to re-install OpenMotif and make sure /usr/local/lib/libXm.so.2
is the new version, not Lesstif's.  If you use mwm, you need
to get it back as well, which means removing the directory that
Lesstif put in its place.  The error you will get will be
some complaint about undefined xmNotebook class, or worse,
Snd will simply become catatonic. I haven't found a foolproof
way to detect Lesstif at run-time (it is possible to build Snd
with OpenMotif, then accidentally load Lesstif's version of
libXm.a or whatever).  ldd snd will tell you which shared
libraries are being loaded.  In any case, Lesstif should
be deleted:

  rpm -e lesstif-devel
  rpm -e ddd
  rpm -e lesstif
  rpm -i openmotif-<whatever the number is>
  rpm -i openmotif-devel-<whatever the number is>

In RedHat 7.3, you can choose to install openmotif, rather than lesstif.

There appears to be a similar problem in Yellow Dog Linux for the PPC.
You'll need to uninstall Lesstif and install OpenMotif.



So to sum up: 
  either a recent GCC or GSL 0.8 or later
  if Gtk, then Gtk+ 2.0.0 or later
  Motif 2.n but not Lesstif (I no longer have any way to test Motif 1)
  in Linux, ALSA 0.9beta8 or later (or any version of OSS)
  Guile 1.3.4 or later but Snd's Scheme files need 1.5.0 or later
  Ruby 1.6.4 or later
  

----------------------------------------------------------------
If you hit a bug, don't just sit there weeping -- send me
(bil@ccrma.stanford.edu) a description of it!  If it's something like
a segfault, you have gdb, and you can build Snd from the sources, it
would help me a lot if you could build it with the -g switch, then

gdb snd
run
<here do whatever it takes to get the bug>
where

The 'where' command should print out the current stack trace which
is extremely helpful to me in tracking down the problem.  It can also
be helpful to move to the first Snd-related function in the stack
(via the 'up' command), then type

info locals

This will print out the value of the local variables.  In most cases,
that's all I need to fix the bug immediately.  On the sgi, the debugger
is named dbx, and the local variable command is named dump.  If Snd
appears to be hung, you can 

gdb snd
break exit
run
<now get it to hang, then type control-C to exit>
where



----------------------------------------------------------------
URLS:

CCRMA:
  http://www-ccrma.stanford.edu/
  http://www-ccrma.stanford.edu/~jos/
  http://www-ccrma.stanford.edu/planetccrma/software/
  http://www-ccrma.stanford.edu/planetccrma/software/soundapps.html#snd
  http://ccrma-mail.stanford.edu/pipermail/cmdist/
  http://ccrma-mail.stanford.edu/mailman/listinfo/planetccrma

Snd:
  ftp://ccrma-ftp.stanford.edu/pub/Lisp/snd-7.tar.gz
  http://www-ccrma.stanford.edu/software/snd/
  http://sourceforge.net/projects/snd/

  http://linux.oreillynet.com/pub/a/linux/2001/10/05/snd_partone.html
  http://linux.oreillynet.com/pub/a/linux/2001/10/18/snd_parttwo.html
  http://www.saunalahti.fi/~mjkoskin/
  http://www.cosy.sbg.ac.at/~gwesp/mma-sound.html (Mathematica)
  http://www.notam02.no/9
  http://www.justlinux.org

Guile/Scheme:
  http://www.gnu.org/software/guile/guile.html
  http://www.cs.indiana.edu/scheme-repository
  http://www.schemers.org/
  http://www.ccs.neu.edu/home/dorai/t-y-scheme/t-y-scheme.html
  http://www.cs.utexas.edu/users/wilson/schintro/schintro_toc.html
  http://www.swiss.ai.mit.edu/~jaffer/SLIB.html
  http://mitpress.mit.edu/sicp/full-text/book/book.html

Motif:
  http://www.opengroup.org/openmotif/
  http://www.motifzone.net

Gtk+:
  http://www.gtk.org
  ftp://ftp.gtk.org/pub/gtk/
  http://sourceforge.net/projects/gtkglext/

OpenGL:
  http://www.mesa3d.org/
  http://www.opengl.org/

Linux audio:
  http://linux-sound.org
  http://www.linuxsound.at

GSL:
  ftp://ftp.gnu.org/gnu/gsl

Ruby:
  comp.lang.ruby
  http://www.ruby-lang.org

fftw:  
  http://www.fftw.org


----------------------------------------------------------------
CVS:

To follow the Snd CVS repository, the first time you need to

       cvs -d:pserver:anonymous@cvs.snd.sourceforge.net:/cvsroot/snd login 
       cvs -z3 -d:pserver:anonymous@cvs.snd.sourceforge.net:/cvsroot/snd co cvs-snd

When prompted for a password for anonymous, press the Enter key. 
After that, you go to your local cvs-snd directory and

       cvs update 
