> here's some untested code that might prove useful.

Thanks, but no luck. It said it was already unmuted and rsynth's "say" didn't
say anything.

Does the following indicate anything obvious to you?:

./strace -fetrace=stat,open,write,ioctl ./say hello
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libm.so.6", O_RDONLY) = 3
open("/lib/libc.so.6", O_RDONLY) = 3
open("/dev/dsp", O_WRONLY|O_NONBLOCK) = 3
ioctl(3, SNDCTL_DSP_SPEED, 0x201924c) = 0
ioctl(1, TCGETS, {0x1002 /* B??? */ opost isig icanon echo ...}) = 0
write(1, "Actual sound rate: 8000\n", 24Actual sound rate: 8000
) = 24
write(3, "\200\200\200\201\201\200\200\200\200\201\200\200\200\201"..., 4608) = 4608
ioctl(3, SNDCTL_DSP_SYNC, 0xbffffdd4) = 0