File: README.Snd

package info (click to toggle)
snd 19.1-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 52,736 kB
  • sloc: ansic: 390,251; lisp: 242,546; ruby: 71,383; sh: 3,284; fortran: 2,342; csh: 1,259; cpp: 294; makefile: 287; python: 47
file content (603 lines) | stat: -rw-r--r-- 19,870 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
Snd

Snd is a sound editor.  It currently runs on nearly all
Unix-based systems, including Mac OSX and Cygwin.
To build Snd, get the sources from

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

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

and if you like, su root, then

  make install


The configure script has a bunch of arguments:

   Extension language:

     --with-s7         use s7 (the default, a version of Scheme).

     --with-ruby       use Ruby as the extension language.  If you build Ruby from the sources,
     			 remember to use the --enable-shared switch.  Otherwise ruby.pc is messed up.
                         If ruby.pc (or equivalent) is missing, tools/make-config-pc.rb can make one:
                         make-config-pc.rb > ruby.pc
                         mv ruby.pc /usr/local/lib/pkgconfig/ruby.pc
                         You may also have to set PKG_CONFIG_PATH:
			 PKG_CONFIG_PATH=.:/opt/X11/lib/pkgconfig/ ./configure --with-gtk --with-ruby --with-portaudio 
			 (Debian: ruby-dev)
  
     --with-forth      use Forth (Mike Scholz's FTH) as the extension language. (libfth or fth at sourceforge)
  
     --without-extension-language  build Snd without any extension language
  

   Graphics:

     --with-motif      use Motif.  If it's in some odd location, you can provide that info:
                         ./configure LDFLAGS="-L/usr/X11R6/lib" CFLAGS="-I/usr/X11R6/include" --with-motif

                         in FC, install the motif, motif-devel, and libXpm-devel packages.
                         in *BSD, pkg install open-motif, or perhaps use pkgin?
                         in Debian, apt-get install libmotif4, libmotif-dev, libxt-dev, libxpm-dev

     --with-gtk        use Gtk+ (Debian package libgtk-3-dev, Fedora gtk3-devel or gtk4-devel)
  
     --with-gui        make Snd with graphics support (actually intended for use as --without-gui)
  
     --with-gl         include support for OpenGL (default: no, Motif only) (debian: libgl-dev libglu-dev)
       --with-gl2ps    include gl2ps (postscript output from OpenGL graphics)
  

   Audio:

     --with-alsa       use ALSA if possible (the default in Linux) (Debian: libasound2-dev)

     --with-oss        use OSS (not tested in a long time)
  
     --with-jack       use the Jack library which needs libsamplerate

     --with-pulseaudio use PulseAudio (untested), libpulse-dev in debian, puleaudio-libs-devel in Fedora

     --without-audio   do not include audio support.  This also affects the
                         GUI (play buttons are omitted).


   Other options:

     --with-gmp        use gmp, mpfr, and mpc to implement multiprecision arithmetic
                       (Debian: libgmp-dev libmpfr-dev libmpc-dev)

     --with-ladspa     include LADSPA plugin support (default: yes in Linux)
                       (get ladaps.h and put it in /usr/local/include or some such directory)
  
     --with-temp-dir   directory to use for temp files (default: ".")
     --with-save-dir   directory to use for saved-state files (default: ".")
     --with-doc-dir    directory to search for documentation


If the configure/make process fails, please send me
(bil@ccrma.stanford.edu) the files mus-config.h, config.log, and makefile,
created (or updated) by configure.  In general, if some switch is ignored,
check that you have installed the "devel" package.  For example, --with-ruby
won't work unless you have installed the ruby-devel package.

Snd comes with s7, but if you insist on building Snd without any extension 
language, you'll find that it's severely limited in what it can do.  
Snd can also be built without any graphics toolkit.  Without either the GUI 
or an extension language, however, there's nothing it can do.

Here at CCRMA, we use this configure invocation:

  ./configure --with-jack --with-temp-dir=/zap


Version info:
  if Gtk, then Gtk+ 2.13 or later (but anything after gtk 3.22 is work-in-progress), and Cairo 1.6.4 or later
  if Motif, then Motif 2.n but not Lesstif
  in Linux, if ALSA, then ALSA 1.0 or later
  if Ruby, Ruby 1.8.0 or later.  
  if Forth, any version
  if s7, version 3.0 or later (it comes with Snd).
  if GSL, version 1.0 or later


----------------------------------------------------------------

The customization/extension languages are either s7, Ruby, or Forth.

Much of Snd's functionality is loaded as needed from the Scheme, Ruby, or Forth
files found in the tarball (*.scm, *.rb, and *.fs).  You can run Snd without 
these files, but there's no reason to!  Just add the directory containing
those files to the "load-path".  In s7,

  (set! *load-path* (cons "/home/bil/cl" *load-path*))

*load-path* is the list of directories that s7 looks at when trying
to find a file to load.  Here I've added "/home/bil/cl" so that Snd
can find its sources no matter what directory I run it in.  If you 
create a file named ~/.snd_s7 and put such a line in it, you'll
never have to think about it again.  In the other languages:

Ruby:   $LOAD_PATH.push("/home/bil/cl")
Forth:  "/home/bil/cl" add-load-path

----------------------------------------------------------------

The documentation is in snd.html, extsnd.html, grfsnd.html, sndscm.html,
sndlib.html, sndclm.html, fm.html, and s7.html.  

A brief change log is in HISTORY.Snd.


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


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

  svn checkout svn://svn.code.sf.net/p/snd/svn1 snd

This creates a local snd directory with the files (in the trunk directory).

  svn update

updates any changed files.


----------------------------------------------------------------
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

Rick Taube, Andrew Burnson, Donny Ward, Greg Santucci: C++ and Windows wizardry.
Kjetil S. Matheussen:                   the Jack support and many other improvements.
Dave Phillips:                          the tutorial, new-effects.scm, and many other files.
Fernando Lopez-Lezcano:                 the current ALSA support.
Rick Taube and Anders Vinjar:           CM scheme files ported to Snd
Tito Latini:                            many bugfixes and new features.
Richard W.E. Furse:                     the original LADSPA support.
Nick Bailey:                            the ESD support.
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.
Steven Schultz and Mike Scholz:         the *BSD ports.
Ludger Brummer and Charles Nichols:     the Mac-OSX port.
Thomas Klausner and Mike Scholz:        the NetBSD port.
Koen De Turck:                          the OpenBSD port.
Steve Beet:                             minGW

Plus many other contributions from
  Fernando Lopez-Lezcano, 
  Tom Roth,
  Fabio Furlanete,
  Rick Taube,
  Anders Vinjar,
  Olivier Doare,
  Ville Koskinen,
  Andrew Burnson.


In terms of number of lines, the languages used in Snd/Sndlib are:
C, Scheme, Ruby, Forth, Emacs Lisp, Fortran, and Lua (altogether about 850k lines).


----------------------------------------------------------------

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.  If Snd
appears to be hung, you can 

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



----------------------------------------------------------------

TROUBLES:


---- audio (a can of worms) ----

If nothing plays in Linux (try aplay for example), and the sound preferences
have no effect, look for the pulseaudio daemon, and kill it.

In OpenBSD, use pulseaudio:
 ./configure --with-gmp --with-gtk --with-pulseaudio CFLAGS=-ftrampolines LDFLAGS=-pthread


---- ALSA: ----

Only versions from 1.0 of ALSA are supported.

An addendum: in my system, I have a wretched sound card in my machine,
and an EMI 2|6 connected to a USB connector.  So the EMI device is "hw:1"
in Alsa terms, and since I never want to use the internal sound card,
I have this line in my ~/.cshrc file:

setenv MUS_ALSA_DEVICE "hw:1"

But this number seems to be set randomly at boot time!  And sometimes, Alsa
in its infinite wisdom mutes the playback device. So, now I
have these lines executing at startup:

amixer sset PCM,0 80% unmute
amixer sset Mic,0 80%

If you use 100% (meaning, give me full amplitude output), it's the same
as 0!!  

On a different machine, I use:

setenv MUS_ALSA_DEVICE "plughw:0"



If you get some complaint like

  ;Invalid argument: cannot set hardware parameters for default

try setting:

    (set! (mus-alsa-device) "plughw:0")

or

    (set! (mus-alsa-device) "plughw:1")

then try playing again.  The "default" device is always completely
broken.  



---- Motif: ----

Only Motif 2.n is supported.  Be sure to get the Motif development
package if you want to build Snd (you need the Motif headers).

On 64-bit machines, use motif 2.3.2 or later.



---- Gtk+: ----

Only Gtk 2.13 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

In some cases, if you installed gtk from an RPM file, you
also need to install gtk-devel.




---- Mac OSX: ---- 

Daniel Hensel sends these instructions to get Snd running with Motif:

Download and install XQuartz:
http://www.xquartz.org

Download and install XCode
open terminal:
install Command Line Tools by typing
xcode-select --install

Install Macports
Install Homebrew

In Terminal type  if not already installed:

brew install gcc 
brew install ruby
brew install gtk+
brew install openmotif
brew install poppler

brew install timidity
brew install wavpack
brew install mpg123
brew install mpg321

sudo port -v install vorbis-tools +flac

untar snd-16.4
cd into the snd-16.4 folder
type:
./configure CFLAGS="-arch x86_64  -I/sw/include" LDFLAGS="-L/sw/lib -lmx -bind_at_load" --with-motif
make
sudo make install

now it works

you may start snd by typing snd from the command line, but you also may add it to XQuartz: open  
/Applications/Utilities/Xquartz/

tab on /Applications, adapt the Path by adding Object and typing /usr/local/bin/snd 

Create your shortcut in XQuartz so it will start immediately by typing Command-s


Later this update:
./configure CFLAGS="-arch x86_64  -I/opt/X11/include" LDFLAGS="-L/opt/X11/lib -lmx -bind_at_load" --with-motif


---- old, possibly out-of-date instructions

You can use either Motif or Gtk running under X11; to start Snd from an
ordinary shell, use the open-x11 command:

  open-x11 snd

or (in later versions of OSX) just start snd, and X should start automatically.

To install X11, first, install the X11SDK and X11User packages.  
The first is in one of the Installer directories, the second (in OSX 10.4) 
is on the first install disk under System/Installation/Packages/X11User.pkg 
or some such name.  These give you the X11 server and its header files.

There are several ways to go from here; the simplest is probably
to use Darwin Ports as outlined by Hans Fugal:

  I installed openmotif and gsl with Darwin Ports: 

  sudo port install openmotif 
  sudo port install gsl 

  Then I did the regular: 

  ./configure --with-motif --with-ruby 
  make 
  sudo make install 
  open-x11 /usr/local/bin/snd 


If you get some complaint about identifiers that look like they come
from libSM or libICE, add -lICE -lSM to the end of the library
list in the makefile.


If C-f (and other such commands) doesn't work, either try toggling
the "w" button, or enable pointer focus:

  (set! (with-pointer-focus) #t)


If the openmotif package forgot to include libXm.a (Motif), 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 admin privileges to do this).

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

    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
    
    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)."


(fftw is optional in Snd).  Adam Tinsdale had better luck with this:

    CFLAGS=-I/sw/include LDFLAGS="-L/sw/lib -lmx -bind_at_load" ./configure  \
      --with-motif --without-fftw


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.

Rick Taube mentions this for tracing the load process:

  [...]you can set the DYLD_PRINT_LIBRARIES shell variable:

        DYLD_PRINT_LIBRARIES=1
        export DYLD_PRINT_LIBRARIES

  some other useful dylib variables:

        DYLD_FRAMEWORK_PATH
        DYLD_FALLBACK_FRAMEWORK_PATH
        DYLD_LIBRARY_PATH
        DYLD_FALLBACK_LIBRARY_PATH


So, here's the detailed step-by-step method, thanks to Cris Ewing:

    This build was done on a Mac G4 Powerbook with OS X 10.3 (panther).
    
    The first step (and it is a vital one) is to make sure that your version
    of fink is fully up-to-date.  Start by running
    
    $ fink selfupdate
    $ fink update-all
    
    Next, verify that you have a working version of X11 on your machine.  This
    must include the development libs found in the X11SDK.  If you are using
    apple's version of X11, the SDK package is _not_ installed by default when
    you install X11.  You have to do a custom install from the XCode disk to
    get the package.
    
    Once all this is in place, use fink to install openmotif3
    
    $ fink install openmotif3
    
    You can also use fink to install the fftw package.  It takes a really long
    time to build, but helps to speed up the fft-based functions in snd.
    
    $ fink install fftw
    
    Next, download and untar the latest snd sources from ccrma
    
    $ ./configure CFLAGS="-I/sw/include" LDFLAGS="-L/sw/lib -lmx -bind_at_load" --with-motif --with-motif-prefix=/sw
    
    This config was run from a bash shell.  If you are using tcsh (and you
    might be if you upgraded to panther) then you will have to omit the part
    about CFLAGS and LDFLAGS above.  Instead, you can set these through the
    shell by running
    
    % setenv LDFLAGS "-L/sw/lib -lmx -bind_at_load""
    % setenv CFLAGS "-I/sw/include"
    
    After this, you're nearly home:
    
    $ make
    
    $ sudo make install
    
    (you need to sudo make install, because it will install an snd-executable
    in /usr/local/bin)


In OSX 10.5, I had to add Xft, Xmu, and fontconfig to the MOTIF_LIBS line in makefile:

  MOTIF_LIBS =  -L/usr/X11/lib -R/usr/X11/lib  -lSM -lICE -lXft -lXmu -lfontconfig /usr/X11R6-old/lib/libXm.a -L/usr/X11R6-old/lib -lXt -lXp -lX11  -lSM -lICE -lXext -lXpm

(the X11R6-old business came about because I didn't remake libXm, but the OSX installation
process moved the previous X11R6 directory to X11R6 1, which is untypable).


In OSX 10.6.8, Ludger Brummer suggests:

  ./configure CFLAGS="-arch i386 -I/sw/include" LDFLAGS="-L/sw/lib -lmx -bind_at_load" --with-motif


Here's a note from Brooke Mitchell:

How to install snd on Mac OSX Snow Leopard using homebrew: 
--have you installed Developer Tools??? 

1) install openmotif osx package 
(http://www.ist.co.uk/downloads/motif_download.html) 
open terminal: 
   export DYLD_LIBRARY_PATH=/usr/OpenMotif/lib 

2) install homebrew: 
 /usr/bin/ruby -e "$(curl -fsSL https://raw.github.com/gist/323731)" 

3) install dependencies. 
 brew install libffi 
(repository link should be fixed, otherwise terminal: 
    brew edit libffi 
change line 4:" url'sourceware.org:/pub/libffi/libffi-3.0.9.tar.gz'" 

 brew install --HEAD guile 

then: 
 brew install fftw 
...wait 

4) compile the source 

 ./configure \ 
 --with-motif-prefix=/usr/OpenMotif 
 (--with-ruby  //if you want ruby) 

edit makefile. add to line 19: ORIGINAL_LDFLAGS = /usr/OpenMotif/lib 

make 
sudo make install 


--------
For homebrew+gtk, here are the CFLAGS and LDFLAGS I used:

GTK_CFLAGS = -pthread -I/usr/local/include/gtk-3.0 -I/usr/local/include/atk-1.0 -I/usr/local/include/cairo -I/usr/local/include/pango-1.0 -I/usr/local/include/glib-2.0 -I/usr/local/include/pixman-1 -I/usr/local/include/freetype2 -I/usr/local/include/libpng12 -I/usr/local/Cellar/glib/2.40.0_1/lib/glib-2.0/include -D_REENTRANT -I/usr/local/Cellar/gdk-pixbuf/2.30.7/include/gdk-pixbuf-2.0 -I/usr/local/Cellar/libpng/1.6.10/include/libpng16 -I/usr/local/Cellar/glib/2.40.0_1/include/glib-2.0 -I/usr/local/Cellar/glib/2.40.0_1/lib/glib-2.0/include -I/usr/local/opt/gettext/include
LDFLAGS = -L/usr/local/lib /usr/local/lib/libcairo.a /usr/local/lib/libpng.a /usr/local/lib/libcairo-gobject.a -lgtk-3.0 -lglib-2.0 -lpango-1.0 /usr/local/lib/libpixman-1.a -lgmodule-2.0 -lgobject-2.0 -lfontconfig -lfreetype -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lgdk-3.0 -lgio-2.0 -lharfbuzz -lpangoft2-1.0 /usr/local/lib/liblzma.a -L/usr/lib -lz -framework Foundation -framework CoreGraphics

but don't waste your time; it looks like crap, and dies with "No GSetting schemas" or something.




-------- FreeBSD 9.n --------

If the Snd compilation fails with complaints about the complex trig functions (ccosh etc),
here are some suggestions from Mike Scholz:


FBSD has CFLAGS=-fno-strict-aliasing as a default for base and ports. With 
GCC you can use: 

  % ./configure CFLAGS=-fno-strict-aliasing 

Or at least set -fno-builtin: 

  % ./configure CFLAGS=-fno-builtin 

Or use clang without the aforementioned flags: 

  % ./configure CC=clang 

There is also a port in /usr/ports/audio/snd with version 13.0 from August 
2012. 


-------- Debian --------

The last time I installed Debian (25-Jan-17) I installed the following
Snd-related packages by hand:
   libfftw3-3 libgsl2 libgtk-3-dev libmotif-dev libxpm-dev libxt-dev libmpfr-dev libmpc-dev
   libgsl-dev libfftw3-dev libgl-dev libglu-dev libjack-dev ruby-dev libasound2-dev

and for Fedora Core 22:
  yum install gcc tcsh rxvt emacs fftw3 fftw3-devel gtk3 gtk3-devel 
              alsa-lib alsa-lib-devel gsl gsl-devel gmp gmp-devel 
              mpfr mpfr-devel libmpc libmpc-devel ruby ruby-devel motif 
              motif-devel libXpm-devel mesa-libGLU-devel