CM and Macintosh MIDI Communications

Mary Simoni msimoni@umich.edu
Wed, 1 Jan 1997 10:10:26 -0500 (EST)


I cannot seem to establish MIDI communications using cm on a PPC Macintosh
running OS 7.5.2., MCL3.9, OMS 2.2, MIDI Manager 2.0.1 and Patchbay 2.0.1.

Whenever I try to open MIDI communications from with cm, I get:
? 
; Warning: MIDI: no known midi driver with open ports available.
;          Check the cm:*midi-preferences* parameter and/or PatchBay to
;          see whether your driver is included and has any ports enabled.
;          
;          Type y(es) if you could fix the problem, or n(o) to cancel.
;          
; While executing: %MM-GET-DRIVER-AND-PORTS

Retry opening/connecting to a midi driver? (y or n)  

The value of *midi-preferences* is:
? *midi-preferences*
((:APPLE :MTP :OMS :MIDIQT) (0 1))

Patchbay shows cm but no MIDI communication.

OMS Studio Setup says the MIDI Port is in use by another application.

I think I've read every README and see no clues. 

What's wrong?


X-Sender: taube@ux1.cso.uiuc.edu
Date: Wed, 1 Jan 1997 09:37:19 -0800
To: Mary Simoni <msimoni@umich.edu>, cmdist@ccrma.Stanford.EDU
From: taube@uiuc.edu (Rick Taube)
Subject: Re: CM and Macintosh MIDI Communications

>Patchbay shows cm but no MIDI communication.
>
>OMS Studio Setup says the MIDI Port is in use by another application.
>
>I think I've read every README and see no clues.
>
>What's wrong?

It sounds like you are using CM with OMS -- is this correct?  If so, then
the *midi-preferences*  should be:

(( :OMS :APPLE :MTP :MIDIQT) (0 1))

which says CM should attempt to connect to MIDI first using OMS on port 0
(modem)
Note that you currently still need the Apple MIDI Manager in the extensions
folder when working with OMS, and that OMS must be in Apple MIDI Manager
mode.


To get *midi-preferences* set correctly each time you start CM, create a
file called cminit.lisp in the same directory as the CM Lisp image, and put
the following forms in it:

(in-package :cm)
(setf *midi-preferences* '(( :OMS :APPLE :MTP :MIDIQT) (0 1)))


If all goes right, the next release of CM (mid january?) will be 100% OMS.
In other words, CM will no longer use the Apple MIDI manager or Apple MIDI
driver, as these are no longer supported by Apple.



From: Tobias Kunze <tkunze@gigant.kgw.tu-berlin.de>
Date: Thu, 2 Jan 1997 04:06:07 +0100
In-Reply-To: Mary Simoni <msimoni@umich.edu> "CM and Macintosh MIDI Communications" (Jan 1, 10:10am)
To: Mary Simoni <msimoni@umich.edu>, cmdist@ccrma.Stanford.EDU
Subject: Re: CM and Macintosh MIDI Communications

Mary--

which midi driver are you using? with OMS, you should use the "OMS Midi Manager Driver" (cm needs a midi manager compatible driver interface to connect to).
Also, the driver must be able to open an actual serial port, either the modem
or the printer port.  Both your ports seem to be in use though.  Make sure 
no other software controls the port you have your midi interface connected to.
Typical culprits are Apple Talk (which takes over the  printer port, no matter
whether you use LocalTalk or EtherTalk hardware) or a communications software
which might cling on to the modem port (an internal fax modem?).

I'm workinng on a reimplementation of both the ppc and 68k midi code right now,
so things should get a bit easier (we are ditching the Midi Manager altogehter 
and support OMS only), so hang on.
the Apple Midi Driver or the OMS mid 


From: Tobias Kunze <tkunze@gigant.kgw.tu-berlin.de>
Date: Thu, 2 Jan 1997 04:12:13 +0100
In-Reply-To: taube@uiuc.edu (Rick Taube) "Re: CM and Macintosh MIDI Communications" (Jan 1, 9:37am)
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: taube@uiuc.edu (Rick Taube), Mary Simoni <msimoni@umich.edu>,
        cmdist@ccrma.Stanford.EDU
Subject: Re: CM and Macintosh MIDI Communications

> the *midi-preferences*  should be:
>
> (( :OMS :APPLE :MTP :MIDIQT) (0 1))

actually, it does only matter if you have more than one midi manager driver, such as the OMS and Apple Midi Manager Driver, AND if both have ports enabled, in
which case cm connects to the first driver it finds according to the list.  if 
you have only one driver connected to a serial port, cm uses it (if it's in 
the midi-preferences* list, that is)

These things are most likely to change in the new version.  I hope to be able
to simplify things...  :|


Date: 06 Jan 97 00:53:16 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Missing functions?

Is there any logical reason why "between",  "pick", and "pickl" don't work for
me in cm? I believe I've been using the correct syntax but I always get the
undefined functuion response. Also, what do I need to do to get MIDI output
working from cm on my PC? Opening the port (I've tried A and 0) and mixing don't
result in any error messages, but there is no output from the port. Any and all
help appreciated.

Joel Stern
103675.1167@compuserve.com

X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <970106055315_103675.1167_JHQ41-1@CompuServe.COM>
Date: Mon, 6 Jan 1997 08:34:27 -0600
To: "Joel A. Stern" <103675.1167@CompuServe.COM>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Missing functions?
Cc: cmdist@ccrma.Stanford.EDU

>Is there any logical reason why "between",  "pick", and "pickl" don't work for
>me in cm? I believe I've been using the correct syntax but I always get the

you dont say which lisp you are using so ill assume clisp.
perhaps you are working in a different package than cm's??  try doing:

	(cm::between 0 4)

and see what happens. if that works, then do:

	(in-package :cm)

to switch to the cm package. do this before you start stella running.


>working from cm on my PC? Opening the port (I've tried A and 0) and mixing
>don't
>result in any error messages, but there is no output from the port. Any
>and all

there is no "direct to driver" support for the PC  because I dont know
anything about midi drivers under DOS.  TO use midi you must open a MIDI
file, then output to it:

	open test.midi play nil
	mix x,y,z 0

and then use some external app to play the midi file. if its possible to
call DOS .bat files from clisp then this external app could be envoked
automatically as is the case with unix.




Date: 06 Jan 97 15:41:49 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Re: Missing functions?


JS>>Is there any logical reason why "between",  "pick", and "pickl" don't work
for
JS>>me in cm ... ?

>you dont say which lisp you are using so ill assume clisp.
>perhaps you are working in a different package than cm's??  try doing:
>
>	(cm::between 0 4)
>
>and see what happens. if that works

I'm using CLISP. I tried the above but still got the undefined function message.
Any other advice?

Thanks for the info on DOS MIDI in CM. Too bad.
Tobias: Sorry, I don't know anything about implementing MIDI in DOS.

Joel Stern
103675.1167@compuserve.com


Date: Mon, 6 Jan 1997 21:43:26 -0500 (EST)
X-Sender: lt@westnet.com
X-Mailer: Windows Eudora Version 1.4.3
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Common Music <cmdist@ccrma.Stanford.EDU>
From: lt@westnet.com (Larry Troxler)
Subject: Re: Missing functions?

At 03:41 PM 1/6/97 EST, Joel A. Stern wrote:
>
>JS>>Is there any logical reason why "between",  "pick", and "pickl" don't work
>for
>JS>>me in cm ... ?
>
>>you dont say which lisp you are using so ill assume clisp.
>>perhaps you are working in a different package than cm's??  try doing:
>>
>>	(cm::between 0 4)
>>
>>and see what happens. if that works
>
>I'm using CLISP. I tried the above but still got the undefined function
message.
>Any other advice?
>

I'm also using DOS and CLISP, and sorry to say, it works for me (funny how
it's always _bad_ news in our field, when something works):

---begin CLISP output ---
RSX (32bit rel 5) dpmi 0.9-1.0 extender (c) Rainer Schnitker '93 '94

> *package*
#<PACKAGE COMMON-MUSIC>
> (stella)
Hang on a second...

Type ? for help.

Stella [Top-Level]: ,*package*
#<PACKAGE COMMON-MUSIC>
Stella [Top-Level]: (between 2 3)
2
Stella [Top-Level]:

---end CLISP output---


>Thanks for the info on DOS MIDI in CM. Too bad.
>Tobias: Sorry, I don't know anything about implementing MIDI in DOS.
>

You could always try using one of the free DOS Midi file players. There's
one in MIDI-Tools, and probably most sound-cards with a MIDI port ship with
a MIDI file player. But I don't remember if CLISP (which is DOS-extended),
can spawn a normal (real-mode) DOS task. I think I tried this and ran into
problems, but I could be wrong - you should try and see.


It's really too bad there isn't a CM for MS-windows which has DDE, DLL
calling, Windows API calls, or some combo of the above. Too bad XLISP-STAT
isn't Common Lisp with CLOS, otherwise it would be ideal! 

Larry Troxler
lt@westnet.com
 


Date: Mon, 6 Jan 1997 21:43:26 -0500 (EST)
Content-Type: text/plain; charset="us-ascii"
To: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Common Music <cmdist@ccrma.Stanford.EDU>
From: lt@westnet.com (Larry Troxler)
Subject: Re: Missing functions?

At 03:41 PM 1/6/97 EST, Joel A. Stern wrote:
>
>JS>>Is there any logical reason why "between",  "pick", and "pickl" don't work
>for
>JS>>me in cm ... ?
>
>>you dont say which lisp you are using so ill assume clisp.
>>perhaps you are working in a different package than cm's??  try doing:
>>
>>	(cm::between 0 4)
>>
>>and see what happens. if that works
>
>I'm using CLISP. I tried the above but still got the undefined function
message.
>Any other advice?
>

I'm also using DOS and CLISP, and sorry to say, it works for me (funny how
it's always _bad_ news in our field, when something works):

---begin CLISP output ---
RSX (32bit rel 5) dpmi 0.9-1.0 extender (c) Rainer Schnitker '93 '94

> *package*
#<PACKAGE COMMON-MUSIC>
> (stella)
Hang on a second...

Type ? for help.

Stella [Top-Level]: ,*package*
#<PACKAGE COMMON-MUSIC>
Stella [Top-Level]: (between 2 3)
2
Stella [Top-Level]:

---end CLISP output---


>Thanks for the info on DOS MIDI in CM. Too bad.
>Tobias: Sorry, I don't know anything about implementing MIDI in DOS.
>

You could always try using one of the free DOS Midi file players. There's
one in MIDI-Tools, and probably most sound-cards with a MIDI port ship with
a MIDI file player. But I don't remember if CLISP (which is DOS-extended),
can spawn a normal (real-mode) DOS task. I think I tried this and ran into
problems, but I could be wrong - you should try and see.


It's really too bad there isn't a CM for MS-windows which has DDE, DLL
calling, Windows API calls, or some combo of the above. Too bad XLISP-STAT
isn't Common Lisp with CLOS, otherwise it would be ideal! 

Larry Troxler
lt@westnet.com


X-Sender: taube@ux1.cso.uiuc.edu
Date: Tue, 7 Jan 1997 08:38:35 -0600
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Missing functions?

>It's really too bad there isn't a CM for MS-windows which has DDE, DLL
>calling, Windows API calls, or some combo of the above.


This is all possible if you use Franz Inc's ACL/PC Common Lisp. But of
course it costs money (I forget how much; visit http://www.franz.com to
find out) CM supported direct to driver MIDI input/output in ACL/PC several
years ago so it wouldnt be that much of an effort to get it runnning again,
partcularily if the next release of CM is 100% OMS compatible, which is my
hope. But I havent done this work because I dont currently know anyone that
is using ACL/PC.


Date: Tue, 7 Jan 1997 11:19:04 -0500 (EST)
From: Lawrence Troxler <lt@westnet.com>
To: Rick Taube <taube@uiuc.edu>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: Missing functions?
In-Reply-To: <v03007804aef80d7a59f8@[128.174.92.150]>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Tue, 7 Jan 1997, Rick Taube wrote:

> >It's really too bad there isn't a CM for MS-windows which has DDE, DLL
> >calling, Windows API calls, or some combo of the above.
> 
> 
> This is all possible if you use Franz Inc's ACL/PC Common Lisp. But of
> course it costs money (I forget how much; visit http://www.franz.com to

Don't remember exactly how much money, but I do remember my jaw dropping.
It's priced well out of the personal/hobbyist range.

Could XLISP /  XLISP-STAT be a possiblity? The XLISP-STAT version is very
Windows-friendly and complete. It uses a different object system. However,
it will run closette. Is closette enough of a CLOS for CM? Xlisp isn't
entirely Common Lisp, but maybe the changes are small enough so that it
could be dealt with.

Larry



Date: 07 Jan 97 23:56:25 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Matti J Koskinen <mjkoskin@sci.fi>,
        Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Re: Missing functions?

Message text written by Matti J Koskinen
>I also had the same problems, because when building cm, the file
>comptools.lsp was not found. The name is too long for dos! I changed
>the name to cmptools.lsp, edited the make-cm.lsp and rebuilt, and
>everything went fine.
>
>- matti
>
>mjkoskin@sci.fi

Matti: Thanks very much for your rename/rebuild suggestion: it worked for me
too! Thanks also to Rick, Tobias, and Klause for your suggestions. I'm sure I'll
have other cm questions, but for now I'm happy just to have the use of those
"missing functions".

Joel Stern
103675.1167@compuserve


X-Sender: taube@ux1.cso.uiuc.edu
Date: Sun, 5 Jan 1997 14:42:10 -0800
To: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Matti J Koskinen <mjkoskin@sci.fi>,
        Common Music <cmdist@ccrma.Stanford.EDU>
From: taube@uiuc.edu (Rick Taube)
Subject: Re: Missing functions?

>>comptools.lsp was not found. The name is too long for dos! I changed
>>the name to cmptools.lsp, edited the make-cm.lsp and rebuilt, and

Ive fixed this in the next release.

-rick

Date: Wed, 8 Jan 1997 10:05:07 -0500 (EST)
From: Lawrence Troxler <lt@westnet.com>
To: Rick Taube <taube@uiuc.edu>
Cc: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Matti J Koskinen <mjkoskin@sci.fi>,
        Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Re: Missing functions?

On Sun, 5 Jan 1997, Rick Taube wrote:

> 
> >>comptools.lsp was not found. The name is too long for dos! I changed
> >>the name to cmptools.lsp, edited the make-cm.lsp and rebuilt, and
> 
> 
> Ive fixed this in the next release.
> 
> -rick


I wonder why it's working for me. Apparenly my version of CLISP must
silently truncate the file name to eight characters. Otherwise, I should
have the same problem!

Larry


From: de@ucolick.org (De Clarke)
Date: Wed, 8 Jan 1997 10:45:22 -0800 (PST)
Subject: HELP newbie needs guidance on install/build CM!
To: cmdist@ccrma.Stanford.EDU

I'm trying to build CM and CMN on a Linux 2.0.18 Pentium.
My interest is in algorithmic composition, so I don't
need the "sound shaping" side of the code, just the
notation and "notation generation" side of the code.

So far I haven't found any manuals or docs that appear to
be for the novice;  they all seem to assume a far greater
degree of familiarity with LISP than mine (zero).  I'm
completely baffled.

As far as I can tell from what I've read so far, I need to

	build and install GCL (I succeeded with GCL 2.2)

	build and install pcl-gcl (failed with 1.1)

	build CMN  (fails due to dependency on pcl-gcl)

	build CM  (haven't even got this far yet)

I have a working GCL.  The Tcl/Tk support seems rather
outdated (I'm using tcl 7.6b) so I skipped it and am running
without the Tk component.  I can type "gcl" and get a 
prompt.  I did get the message "GCL 2.2 build complete"
or words to that effect.

I could not build pcl-gcl, nor is there anything in the
pcl-gcl distribution (that I've found so far) which even
tells me what pcl-gcl is.  There's a cryptic mention in
the CM install guide to the effect that pcl-gcl adds
CLOS, whatever CLOS is.  At any rate, CMN won't build without
sysdefs.o, which it expects to find in the pcl-gcl tree.
pcl-gcl appears to have some facility which at Make time
converts lisp source into C source, but that's about as
much as I can discover so far.

Now, to make matters worse, what I would call the "configure"
and "make" scripts for these kits seem to be written themselves
in LISP, so given my utter ignorance of LISP, they are quite
incomprehensible and I have no idea how to alter them to
customize my installation.  The error messages from the
LISP compiler (?) passes are quite alien and cryptic to me.
The LISP source itself is quite foreign-looking and though
I *think* I've figured out what's a comment marker, etc.,
I have no confidence that I grok the syntax.

So, I come humbly before you to ask

	Has anyone succeeded in building CMN/CM on a Linux
	box?

	If you succeeded and you know how you succeeded, 
	would you be willing to give this newbie a simple
	cookbook for getting through the install?

	Is there a FAQ somewhere that tells me things like
	"what's CLOS" and "how does LISP work"?

	Has anyone got GCL working with a modern Tcl/Tk?

Although I have many years' experience with freeware packages
of all kinds, and have hacked SQL, TeX, sendmail.cf and other
reputedly obscure dialects, I have never seen anything remotely
like these kits.  I need a mentor, or a real beginner's
guide.

Thanking you profusely in advance...

de
.............................................................................
:De Clarke, Software Engineer                     UCO/Lick Observatory, UCSC:
:Mail: de@ucolick.org | "There is no problem in computer science that cannot: 
:Web: www.ucolick.org |  be solved by another level of indirection"  --J.O. :


X-Sender: taube@ux1.cso.uiuc.edu
Date: Thu, 9 Jan 1997 08:32:02 -0600
To: de@ucolick.org (De Clarke)
From: Rick Taube <taube@uiuc.edu>
Subject: Re: HELP newbie needs guidance on install/build CM!
Cc: cmdist@ccrma.Stanford.EDU

>	Has anyone succeeded in building CMN/CM on a Linux
>	box?

Dont use GCL, it not worth the trouble. Franz Inc is offering their ACL
Common Lisp FREE for Linux, see http://www.franz.com for more information


>	If you succeeded and you know how you succeeded,
>	would you be willing to give this newbie a simple
>	cookbook for getting through the install?

Lets assume that you installed the sources to CM in /usr/local/lisp/cm
Once you have ACL Common Lisp installed, do:

	(load "/usr/local/lisp/cm/build/make-cm.lisp")

and answer the questions that the script asks you.   See
cm/doc/install.html for more information about installation.

>	Is there a FAQ somewhere that tells me things like
>	"what's CLOS" and "how does LISP work"?

Yes, the comp.lang.lisp has a Lisp FAQ. Lisp is very easy to Learn, and you
dont really need much to understand CM or CLM. THhere is a lisp tutorial
packaged with cm:
	cm/doc/contrib/LISP-tutorial.html
	cm/doc/contrib/lispintro.html

I would recomment the tourestky book.


hope this helps,

Rick Taube


Date: Thu,  9 Jan 97 09:27:08 PST
From: bil (To: cmdist)
To: cmdist
Subject: linux clm etc

I've ported CLM and CMN to ACL 4.3 in Linux.  There are
still a few nits (a strange "rehash" bug), but most things
are working.  Does anyone know how to install a font
in Linux or view a postscript document?  

Recent CLM/Snd changes include the :trace, :break,
and :display arguments to with-sound, exp-env in
env.lisp (Anders Vinjar), grapheq.ins (Marco Trevisani),
wavelets.cl (which I'm willing to extend if there's
interest), more clm-snd debugging hooks (ins-var,
debugdata, to-snd), SoundFont headers.  In NeXtStEp,
GCL only runs :no-ffi now -- I finally gave up on
the GCL FFI in that case (too many bus errors).


X-Sender: taube@ux1.cso.uiuc.edu
Date: Thu, 9 Jan 1997 12:26:45 -0600
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: linux CM

The last release of CM seems to compile and run fine in ACL 4.3 for Linux
-- it should be ok to use it with CLM or to output MIDI files or Csound.  I
dont know anything about supporting MIDI drivers under Linux; I may have
more news on this by the next release of CM.


From: de@ucolick.org (De Clarke)
Date: Thu, 9 Jan 1997 12:22:08 -0800 (PST)
Subject: thanks  ( newbie in trouble with gcl / CM )
To: cmdist@ccrma.Stanford.EDU
X-Mailer: TkMail 4.0beta8


thanks to those who pointed out to me the error of my
ways :-)  I've ordered the free Linux ACL 4.3 and will 
wait until it arrives before trying to build the CM
suite again.

de

Date: 09 Jan 97 20:35:08 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: editor in cm

Now that I have "between" etc. working in CM, time for another mundane question.
Is it possible to call up a text editor from within Stella, CM, or CLISP DOS?
I'm thinking of something like Win95's edit.com. I know there has to be a better
way to edit files than what I'm doing now, which is to open CLISP in a DOS
session, find bugs/changes, close CLISP return to Win95, call up my text editor,
make and save changes, return to CLISP. I have already tried inserting the
following in config.lsp, to no avail:

(defparameter *editor* "C:\\WINDOWS\\COMMAND\\EDIT.COM")
(defun editor-name ("C:\\WINDOWS\\COMMAND\\EDIT.COM") (or (sys::getenv "EDITOR")
*editor*))

Thanks for the help.

Joel Stern
103675.1167@compuserve.com

X-Sender: taube@ux1.cso.uiuc.edu
Date: Thu, 9 Jan 1997 19:14:24 -0800
To: "Joel A. Stern" <103675.1167@CompuServe.COM>
From: taube@uiuc.edu (Rick Taube)
Subject: Re: editor in cm
Cc: cmdist@ccrma.Stanford.EDU

>Is it possible to call up a text editor from within Stella, CM, or CLISP DOS?
>I'm thinking of something like Win95's edit.com. I know there has to be a

This has to do with CLISP, not CM. I believe it is possible to call up an
editor from inside CLISP (at least I remeber reading some documentation to
that effect) -- maybe someone reading CLISP's mailing list has the answer.


Date: Thu, 9 Jan 1997 22:24:27 -0500 (EST)
X-Sender: lt@westnet.com
To: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Common Music <cmdist@ccrma.Stanford.EDU>
From: lt@westnet.com (Larry Troxler)
Subject: Re: editor in cm

At 08:35 PM 1/9/97 EST, Joel A. Stern wrote:
>Now that I have "between" etc. working in CM, time for another mundane
question.
>Is it possible to call up a text editor from within Stella, CM, or CLISP DOS?
>I'm thinking of something like Win95's edit.com. I know there has to be a
better
>way to edit files than what I'm doing now, which is to open CLISP in a DOS
>session, find bugs/changes, close CLISP return to Win95, call up my text
editor,
>make and save changes, return to CLISP.

If you're talking about a top-level application file that defines
algorithms, etc, I don't see why you need to close CLISP when you edit the
file! If you find a bug in your CLISP session, just switch to your editor,
fix the change, save the file, and then switch back to CLISP and reload the
file - (load "fixed.lsp").  You may get warnings about redefined methods,
etc, but that's ok.

I'm using 3.1 and not 95 ( I'm thinking of switching to linux rather than
deal with 95). 
But Assuming the DOS boxes work the same way in Win 95, you can also cut and
paste between a CLISP dos box and an other windows editor. This might be
usefull for the small stuff. I can send you a windows editor that does
paren-matching, if you want.

Larry Troxler
lt@westnet.com


Date: 10 Jan 97 22:37:50 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Re: editor in cm



-------------Forwarded Message-----------------

From:	"Tobias Kunze", INTERNET:tkunze@ulysses.stanford.edu
Date:	1/10/97 12:16 AM
RE:	Re: editor in cm
From: "Tobias Kunze" <tkunze@ulysses.stanford.edu>
Date: Thu, 9 Jan 1997 21:18:10 -0800
In-Reply-To: "Joel A. Stern" <103675.1167@CompuServe.COM>
        "editor in cm" (Jan  9,  8:35pm)

> Is it possible to call up a text editor from within Stella, CM, or CLISP DOS?

The Common Lisp function "ed" does what you want.  It's exact behavior,
however, is implementation-dependent.  In MCL, it's equivalent to Cmd-O
and opens up the file in a new window, in CLISP (under UNIX) it depends on
what your editor does.  An example:

> *editor*
"vi"
> (ed "/usr/local/lisp/cm/kernel/midi.lisp")

   [...up comes vi, IN THE SHELL, and stays there til I quit...]

0
> (setf *editor* "jot")
"jot"
> (ed "/usr/local/lisp/cm/kernel/midi.lisp")

   [...the (SGI) app "jot" puts up a window with the file content, CLISP
    returns immediately...]

0
>
Hope that helps.
______________________________________________________________________

Tobias Kunze                       t@kunze.stanford.edu
CCRMA, Stanford University         http://www.stanford.edu/~tkunze

Date: 11 Jan 97 11:02:13 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Re: editor in cm

Message text written by Larry Troxler:

>Have you checked the CLISP mailing list archives, or asked them?

Does anyone happen to have the url for the CLISP archives and the address to
subscribe to the CLISP list?

> It's supposed to be able to run in a DOS box if you tweak things right.

 How did you get CLISP to run in a window under Win3.1?

> I think that there's also a Win32 console-mode build of CLISP at one of the
sites.
>Maybe that's the one you need to be using.

 I had the Win32 version of CLISP installed for a while, but either I installed
it wrong or there were some fatal bugs in it. It now seems to have disappeared
from the world as I am now unable to relocate it at any ftp or web site--which
makes me think the problem was not with my installation of it and that it has
been yanked while undergoing rennovation. Thanks for all  the help!

Joel Stern
103675.1167@compuserve.com



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sat, 11 Jan 1997 15:00:42 -0800
In-Reply-To: "Joel A. Stern" <103675.1167@CompuServe.COM>
        "Re: editor in cm" (Jan 11, 11:02am)
Reply-To: t@ulysses.Stanford.EDU
To: "Joel A. Stern" <103675.1167@CompuServe.COM>
Subject: Re: editor in cm
Cc: Common Music <cmdist@ccrma.Stanford.EDU>


 | Does anyone happen to have the url for the CLISP archives
 | and the address to subscribe to the CLISP list?

the cm home page lists the ftp sites:

   www: http://sayre.sysc.pdx.edu:8001/clisp
   ftp: ftp://ma2s2.mathematik.uni-karlsruhe.de/pub/lisp/clisp

the pdx.edu site has also a beta version of the win-32 clisp, it seems.

mail to clisp-list-request@ma2s2.mathematik.uni-karlsruhe.de to
subscribe to the clisp list.

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sat, 11 Jan 1997 15:29:14 -0800
Reply-To: t@ulysses.Stanford.EDU
To: cmdist@ccrma.Stanford.EDU
Subject: cm 1.0.0 in MCL 3.1 (68k)

[Some people seem to have run into this, so I thought it might be
worth posting the fix to the list.]

The MIDI code (mcl-midi.lisp) in the current archives breaks in the
latest (and last) 68k-version of MCL (3.1) due to an internal data
structure change in this version.  If you are running MCL 3.0.1 and
plan on upgrading to 3.1, you should replace %mm-midi-open-aux with
the code below.  I'm currently in the middle of rewriting the midi
code and there will be a new release as soon as I'm done, in about
2 weeks.


(defun %mm-midi-open-aux (int)
  (catch :midi-open-exit
    (setf %mm-close-stack%
          `(,#'(lambda ()
                 (setf %midi-open-p% nil)
                 (%update-midi-menu)
                 (values +midi-success+))))
    (%mm-sign-in)
    (push #'%mm-sign-out %mm-close-stack%)
    (%mm-add-cm-ports)
    (push #'(lambda ()
              (%mm-remove-cm-ports)
              ;; Make sure the pointers held in %inv-outports% can't be
              ;; accessed any more.
              (setf %inv-outports% nil)
              ;; Fight memory leaks and dispose the block %myports-ptr% points
              ;; to, but never dispose a dead pointer.
              (when  %myports-ptr%
                (#_disposeptr %myports-ptr%)
                (setf %myports-ptr% nil))) %mm-close-stack%)
    ;; Check for the availability of drivers and ports. This function also
    ;; sets the globals $driver-id$ and $serial-port$.
    (%mm-get-driver-and-serial-port int)
    (push #'(lambda () (setf $serial-port$ nil $driver-id$ nil))
          %mm-close-stack%)
    (%mm-connect-data $serial-port$)
    (%midi-start-time)
    ;; make sure %midi-open-p% holds the serial port variable
    (setf %midi-open-p% (verbose-find-port $serial-port$))
    (%update-midi-menu)
    (push #'%update-midi-menu %mm-close-stack%)
    ;; Initialize the c side; but close everything again, if it failed.
    (unless (midi-c-setup)
      (throw :midi-open-exit :cancel-midi-open))
    ;; Now make the data area, jump table, function code segment, and our
    ;; structures ineligible for virtual memory page swapping, because
    ;; they will be accessed at interrupt level (avoid a possible fatal
    ;; double page fault error at paging time).
    (mapcar #'(lambda (x) (#_holdmemory x (#_getptrsize x)))
            (list
             (cdr (first (last (ccl::ffenv-entries %ff-env%)))) ; data & JT
             (first (ccl::ffenv-seg-ptrs %ff-env%))             ; code segment
             %myports-ptr%))                                    ; structures
    (push #'(lambda ()
              ;; Make data & jump table, code segment, and our structures
              ;; eligible for page swapping again
              (mapcar #'(lambda (x) (#_unholdmemory x (#_getptrsize x)))
                      (list (cdr (first (last (ccl::ffenv-entries %ff-env%))))
                            (first (ccl::ffenv-seg-ptrs %ff-env%))))
              ;; ...but the structures only if their pointer is valid.
              (when %myports-ptr% (#_unholdmemory %myports-ptr%
                                   (#_getptrsize %myports-ptr%))))
          %mm-close-stack%)
    (values +midi-success+)))

Date: 11 Jan 97 19:55:03 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: editor in CLISP

After reading my CLISP documentation again, I now know at least how to use the
built-in editor. For anyone else in my former state of confusion over this
here's what to do.

Start CLISP or CM. Type the following, providing the path to your CLISP
directory if necessary:

(load "c:\\lisp\\editor.lsp")

After the editor compiles type:

(ed)

You will then be in the built-in screen editor. Type alt-h for help. Press esc
to return to the Lisp prompt.

I'm still trying to get CLISP to run in a DOS window under Win95. I've tried
using RSX and RSXWIN, so far to no avail. If anyone has any knowledge on how to
do this please let me know.

Joel Stern
103675.1167@compuserve.com


Date: 11 Jan 97 22:32:21 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: CLISP and CM in a Win95 Dos Window

Message text written by Joel A. Stern
>I'm still trying to get CLISP to run in a DOS window under Win95. I've tried
using RSX and RSXWIN, so far to no avail. If anyone has any knowledge on how to
do this please let me know.<

[Replying to my own message]
Following many adventure and misadventures I've got the DOS window thing figured
out now. If anyone out there is running Common Music under CLISP and wonders how
to run it in a Win95 DOS window, do the following :
1. set the following environment variables in your autoexec.bat file (adjust the
path to reflect  wherever you keep rsx.exe): 
	set rsx=c:\music\lisp\rsx.exe
	set emx=c:\music\lisp\rsx.exe
You might be able to include these lines in the batch file described in #2
instead: I'm not sure. rsx.exe is included with CLISP or can be downloaded from
sites listed in the CLISP readme.

2. create the following batch file and call it "CM.BAT" or whatever. Again,
adjust the paths to conform with your own system:
	@echo off
	set TERM=ansi
	set TERMCAP=c:\music\lisp\temp\termcap.dat
	echo COMMON MUSIC
	c:\music\lisp\rsx.exe -Re -am -Rs50 c:\music\lisp\lisp.exe -M
c:\music\lisp\cm\cm %1 %2 %3 %4 %5 %6 %7 %8 %9

3. Now right-click on the icon for the above batch file, or its shortcut, and
left click on "properties". Click on the "program" tab at the top. Click on
"advanced" at the bottom and make sure that "suggest MS-DOS mode as necessary"
is checked.

Restart your system so that the autoexec environment settings will take effect.
That should do it. I'm sure some of the parameters above can be refined.

Joel Stern
103675.1167@compuserve.com


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sun, 12 Jan 1997 14:11:17 -0800
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: cmdist@ccrma.Stanford.EDU
Subject: cm 1.0.0 in MCL 3.1 (68k)

I posted the OLD function instead of the fix yesterday, sorry.
Here's the RIGHT code:

(defun %mm-midi-open-aux (int)
  (catch :midi-open-exit
    (setf %mm-close-stack%
          `(,#'(lambda ()
                 (setf %midi-open-p% nil)
                 (%update-midi-menu)
                 (values +midi-success+))))
    (%mm-sign-in)
    (push #'%mm-sign-out %mm-close-stack%)
    (%mm-add-cm-ports)
    (push #'(lambda ()
              (%mm-remove-cm-ports)
              ;; Make sure the pointers held in %inv-outports% can't be
              ;; accessed any more.
              (setf %inv-outports% nil)
              ;; Fight memory leaks and dispose the block %myports-ptr% points
              ;; to, but never dispose a dead pointer.
              (when  %myports-ptr%
                (#_disposeptr %myports-ptr%)
                (setf %myports-ptr% nil))) %mm-close-stack%)
    ;; Check for the availability of drivers and ports. This function also
    ;; sets the globals $driver-id$ and $serial-port$.
    (%mm-get-driver-and-serial-port int)
    (push #'(lambda () (setf $serial-port$ nil $driver-id$ nil))
          %mm-close-stack%)
    (%mm-connect-data $serial-port$)
    (%midi-start-time)
    ;; make sure %midi-open-p% holds the serial port variable
    (setf %midi-open-p% (verbose-find-port $serial-port$))
    (%update-midi-menu)
    (push #'%update-midi-menu %mm-close-stack%)
    ;; Initialize the c side; but close everything again, if it failed.
    (unless (midi-c-setup)
      (throw :midi-open-exit :cancel-midi-open))
    ;; Now make the data area, jump table, function code segment, and our
    ;; structures ineligible for virtual memory page swapping, because
    ;; they will be accessed at interrupt level (avoid a possible fatal
    ;; double page fault error at paging time).
    (let* ((len (length (ccl::ffenv-entries %ff-env%))))

      (mapcar #'(lambda (x) (#_holdmemory x (#_getptrsize x)))
              (list (cdr (elt (ccl::ffenv-entries %ff-env%)
                              (1- len))) ; data & JT
                    (elt (ccl::ffenv-seg-ptrs %ff-env%) 0) ; code segment
                    %myports-ptr%))     ; structures
      (push #'(lambda ()
                ;; Make data & jump table, code segment, and our structures
                ;; eligible for page swapping again
                (mapcar #'(lambda (x) (#_unholdmemory x (#_getptrsize x)))
                        (list (cdr (elt (ccl::ffenv-entries %ff-env%)
                                        (1- len)))
                              (elt (ccl::ffenv-seg-ptrs %ff-env%) 0)))
                ;; ...but the structures only if their pointer is valid.
                (when %myports-ptr%
                  (#_unholdmemory %myports-ptr% (#_getptrsize %myports-ptr%))))
            %mm-close-stack%))
    (values +midi-success+)))



Date: 12 Jan 97 18:38:35 EST
From: "Joel A. Stern" <103675.1167@CompuServe.COM>
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: import...

Dilemna--which-I-have-spent-many-hours-trying-tosolve-when-there-is-undoubtedly-a
-simple-explanation...of the day: Why can't I import csound .sco files? Here's
what's happening:

Set syntax to: csound
Current syntax is CSOUND.
Stella [Top-Level]: import test.sco

*** - FIND-CLASS: I1 does not name a class
The following restarts are available:
R1 = Return to Top-Level.
R2 = Exit Top-Level.
1. Break>

It seems that Stella is stumbling on the fact that the first p-field in my score
is "i1".  What does Stella want? Are modifications to the score file necessary
before they can be imported?
Appreciative as always,


Joel Stern
103675.1167@compuserve.com


X-Sender: taube@ux1.cso.uiuc.edu
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sat, 11 Jan 1997 15:02:12 -0800
To: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Common Music <cmdist@ccrma.Stanford.EDU>
From: taube@uiuc.edu (Rick Taube)
Subject: Re: import...

if i remember correctly, in order to import an "i1" pfield statement there
has to be an "i1" class defined in stella to accept the pfield data. so if
your statement were:

i1 0.0 1.0 440.0 .5


there would have to be a definition of an I1 class with appropriate parameters,
for example:

(defobject i1 (csound-note)
  (dur freq amp)
  (:parameters ins time dur freq amp))



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sun, 12 Jan 1997 18:05:52 -0800
In-Reply-To: "Joel A. Stern" <103675.1167@CompuServe.COM>
        "import..." (Jan 12,  6:38pm)
References: <970112233834_103675.1167_JHQ57-1@CompuServe.COM>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: "Joel A. Stern" <103675.1167@CompuServe.COM>,
        Common Music <cmdist@ccrma.Stanford.EDU>
Subject: Re: import...
Mime-Version: 1.0
Content-Type: multipart/mixed;
	boundary="PART-BOUNDARY=.19701121805.ZM27393.stanford.edu"

--
--PART-BOUNDARY=.19701121805.ZM27393.stanford.edu
Content-Type: text/plain; charset=us-ascii


> Why can't I import csound .sco files?

"i1" does not exist as a class and was "only" the value of another
class' "ins" slot at score output time, lets say a class named
"my-csound-note".  It is important to note that there is NO link
backwards from the "i1" statement as it occurs in the score file
to the actual class which created it.  A subclass of csound-note
can be used to create any number of I-statements and, conversely,
an I-statement starting with "i1" could have been generated by any
csound-note subclass.

Probably the "cleanest" solution to the problem is to define "i1"
(and all other "iX" statements that have been generated by
"my-csound-note") as a subclass of "my-csound-note":

(defobject i1 (my-csound-note) ())


The attached file gives an example.


--PART-BOUNDARY=.19701121805.ZM27393.stanford.edu
X-Zm-Content-Name: csound-example.cm
Content-Description: Text
Content-Type: text/plain ; name="csound-example.cm" ; charset=us-ascii

;;;
;;;
;;; File:         csound-example.cm
;;;
;;; Summary:      Example for using Stella with the :CSOUND syntax
;;;
;;; Author:       Tobias Kunze
;;; e-Mail:       t@kunze.stanford.edu
;;; Org:          CCRMA, Stanford University
;;;
;;; orig-Date:    14-Sep-96 at 23:28:08
;;; Last-Mod:     12-Jan-97 at 18:04:01 by Tobias Kunze
;;;
;;; Revision:     1.1
;;;
;;; Description:  Edit the variables in the section marked *** VARIABLES ***
;;;               below and load the file.
;;;
;;; Changes:
;;;   12-Jan-97   tk   added Stella import



(let (;; 
      ;; *** BEGIN VARIABLES ***
      ;;
      (orc-file "/tmp/csound-ex.orc")
      (sco-file "/tmp/csound-ex.sco")
      (snd-file "dac")			; "dac" generates sound in real-time
      ;; 
      ;; *** END VARIABLES ***
      ;;
      )


;;;
;;; 1) Create a CSound orchestra file.

  (with-open-file (orc orc-file
		       :direction :output
		       :if-does-not-exist :create
		       :if-exists :supersede)
      
    (format orc "sr = 44100~%~
                   kr = 4410~%~
                   ksmps = 10~%~
                   nchnls = 1~%~
                   ~%~
                   ;;;~%~
                   ;;; simple oscillator with envelope~%~
                   ;;;~%~
                   ;;; f1: 0  <size>  10  1 0 1 0 1 0 1 0 1 0 1~%~
                   ~%~
                   instr 1~%~
                     idur = p3~%~
                     iamp = p4*32767       ; scale logical amplitude~%~
                     ifreq = p5~%~
                     iattackt = p6~%~
                     irelt	= p7~%~
                   ~%~
                     k1	linen	iamp, iattackt, idur, irelt~%~
                     a1	oscili	k1, ifreq, 1~%~
                   	out	a1~%~
                   endin~%"))

;;;
;;; 2) Create a Stella output stream.  This stream holds all additional 
;;;    information needed by CSound to process the generated score file.

  (open-cmd (format nil "~a ~{~a ~s~}"
		    sco-file
		    (list 'args "-A -d -m0"
			  'header "f1 0 8192  10  1 0 1 0 1 0 1 0 1 0 1"
			  'orchestra orc-file
			  'output snd-file
			  'play t)))

#| 
-----------------------------------------------------------------------------
EXAMPLE STELLA INTERACTION
-----------------------------------------------------------------------------

Stella [Top-Level]: open "/tmp/csound-ex.sco" args "-A -d -m0" output
  "dac" header "f1 0 8192  10  1 0 1 0 1 0 1 0 1 0 1" orchestra
  "/tmp/csound-ex.orc" 
Stream: #<File: "/tmp/csound-ex.sco">
Stella [Top-Level]: list io-streams
Io-Streams:
     1. #<File: "/tmp/csound-ex.sco"> 
Stella [Top-Level]: show io-streams[1]

Object:    #<File: "/tmp/csound-ex.sco">
Type:     Csound-Score-File
Status:   Normal
Position: 1 in Io-Streams
Slots:
          Header       "f1 0 8192  10  1 0 1 0 1 0 1 0 1 0 1"
          Container    #<CONTAINER: Io-Streams>
          Flags        0
          Finalizer    unset
          Initializer  unset
          Clock        unset
          Scheduling   :RUNTIME
          Direction    :OUTPUT
          Timescale    unset
          End          unset
          Start        unset
          Stream       unset
          Element-Type CHARACTER
          Play         :ASK
          Name         "/tmp/csound-ex.sco"
          Args         " -A -d -m0"
          Syntax       #<Syntax: CSOUND>
          Output       "dac"
          Orchestra    "/tmp/csound-ex.orc"
Stella [Top-Level]: edit io-streams[1]
Editing #<File: "/tmp/csound-ex.sco">
Type ? for help.
Edit: play
The value of PLAY is :ASK
new value: (<cr>=Unchanged)  T
The value of PLAY is T
Edit: q
Stella [Top-Level]: 
-----------------------------------------------------------------------------
|#



;;;
;;; 3) Define an instrument class. 

(defobject beep (csound-note)
  ((ins :initform 'i1) duration amplitude pitch
   (attack :initform .05) (release :initform .25))
  (:parameters ins time duration amplitude pitch attack release))


;;;
;;; 4) Create musical structure.

(algorithm ninth beep (amplitude .5)
  (setf pitch (- (item (pitches e e f g g f e d c c d e e d d) :kill t) 50)
	rhythm (item (rhythms (rhythms q for 12 tempo 160) q. e h tempo 160))
	duration rhythm))

#|
-----------------------------------------------------------------------------
EXAMPLE STELLA INTERACTION
-----------------------------------------------------------------------------

Stella [Top-Level]: new thread
Name for new Thread: (<cr>=Thread-10) ninth
New object position: (<cr>=Top-Level) 
Stella [Top-Level]: new beep
Number of beeps to create: (<cr>=*) 
Slots and values: {pitch (- (pitches e e f g g f e d c c d e e d d) 50)
  rhythm (rhythms (rhythms q for 12 tempo 160) q. e h tempo 160) 
  duration $rhythm amplitude .5}
New object position: (<cr>=Pasteboard) ninth
Stella [Top-Level]: tlist ninth
Start time offset:(<cr>=None) 
Ninth
    0.00    1. #<i1 1.0 1.0 0.25 829.62756 0.1 0.5>
    1.00    2. #<i1 1.0 1.0 0.25 829.62756 0.1 0.5>
    2.00    3. #<i1 1.0 1.0 0.25 849.2283 0.1 0.5>
    3.00    4. #<i1 1.0 1.0 0.25 891.99554 0.1 0.5>
    4.00    5. #<i1 1.0 1.0 0.25 891.99554 0.1 0.5>
    5.00    6. #<i1 1.0 1.0 0.25 849.2283 0.1 0.5>
    6.00    7. #<i1 1.0 1.0 0.25 829.62756 0.1 0.5>
    7.00    8. #<i1 1.0 1.0 0.25 793.6648 0.1 0.5>
    8.00    9. #<i1 1.0 1.0 0.25 761.62555 0.1 0.5>
    9.00   10. #<i1 1.0 1.0 0.25 761.62555 0.1 0.5>
   10.00   11. #<i1 1.0 1.0 0.25 793.6648 0.1 0.5>
   11.00   12. #<i1 1.0 1.0 0.25 829.62756 0.1 0.5>
   12.00   13. #<i1 1.5 1.5 0.25 829.62756 0.1 0.5>
   13.50   14. #<i1 0.5 0.5 0.25 793.6648 0.1 0.5>
   14.00   15. #<i1 2.0 2.0 0.25 793.6648 0.1 0.5>
Stella [Top-Level]: 
-----------------------------------------------------------------------------
|#


;;;
;;; 5) Generate output.

(mix-cmd "ninth 0")

#|
-----------------------------------------------------------------------------
EXAMPLE STELLA INTERACTION
-----------------------------------------------------------------------------

Stella [Top-Level]: mix ninth
Start time offset:(<cr>=None) 
Csound Version 3.42 (Sep 14 1996)
orchname:  /tmp/csound-ex.orc
scorename: /tmp/csound-ex.sco
sorting score ...
	... done
orch compiler:
21 lines read
	instr	1	
MIT Csound: 3.42 (Sep 14 1996)
orch now loaded
displays suppressed
audio buffered in 1024 sample-frame blocks

 PMLqueuesize = 1024
writing 2048-byte blks of shorts to dac (AIFF)
SECTION 1:
ftable 1:
end of section 1	 sect peak amps:      0.0
inactive allocs returned to freespace
SECTION 2:
new alloc for instr 1:
end of section 2	 sect peak amps:  16350.7
end of score.		   overall amps:  16350.7
	   overall samples out of range:        0
0 errors in performance
259 2048-byte soundblks of shorts written to dac (AIFF)
T
Stella [Top-Level]: 
-----------------------------------------------------------------------------
|#



;;;
;;; 6) Re-import the score file into Stella if desired.  
;;;   
;;;    Although Stella does not yet fully support importing of .sco files,
;;;    you can always define "i1" to be a subclass of "beep" and then import.

;; (defobject i1 (beep) ())
;; (import-cmd "/tmp/csound-ex.sco")

#|
-----------------------------------------------------------------------------
EXAMPLE STELLA INTERACTION
-----------------------------------------------------------------------------
Stella [Top-Level]: (defobject i1 (beep) ())
#<STANDARD-CLASS I1>
Stella [Top-Level]: import /tmp/csound-ex.sco 
Stella [Top-Level]: list
Top-Level:
     1. #<ALGORITHM: Ninth>
     2. #<THREAD: From-Csound-Ex> 
Stella [Top-Level]: list 2
From-Csound-Ex:
     1. #<i1 0.374 0.374 0.499 279.627 0.05 0.249> 
     2. #<i1 0.375 0.374 0.499 279.627 0.05 0.249> 
     3. #<i1 0.376 0.374 0.499 299.228 0.05 0.249> 
     4. #<i1 0.37399995 0.374 0.499 341.995 0.05 0.249> 
     5. #<i1 0.375 0.374 0.499 341.995 0.05 0.249> 
     6. #<i1 0.37600005 0.374 0.499 299.228 0.05 0.249> 
     7. #<i1 0.37400007 0.374 0.499 279.627 0.05 0.249> 
     8. #<i1 0.375 0.374 0.499 243.664 0.05 0.249> 
     9. #<i1 0.375 0.374 0.499 211.625 0.05 0.249> 
    10. #<i1 0.375 0.374 0.499 211.625 0.05 0.249> 
    11. #<i1 0.37599993 0.374 0.499 243.664 0.05 0.249> 
    12. #<i1 0.375 0.374 0.499 279.627 0.05 0.249> 
    13. #<i1 0.5619998 0.562 0.499 279.627 0.05 0.249> 
    14. #<i1 0.18700027 0.187 0.499 243.664 0.05 0.249> 
    15. #<i1 0.749 0.749 0.499 243.664 0.05 0.249> 
Stella [Top-Level]: 
-----------------------------------------------------------------------------
|#

)

;;;
;;; -*- EOF -*-

--PART-BOUNDARY=.19701121805.ZM27393.stanford.edu--


Date: Tue, 21 Jan 1997 10:39:18 +0200 (EET)
From: Matti J Koskinen <mjkoskin@sci.fi>
X-Sender: mjkoskin@fingerprint
To: cmdist@ccrma.Stanford.EDU
Subject: Acl 4.3 and CM
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


Hi all

I received yesterday a copy of Allegro 4.3 for Linux and compiled Common
Music with it. The compilation went without problems (only warnings about
float-type) and the code looks like working ok. The next thing to do is to
get the midi working. I have tclmidi-3.1f, which can read midi
from keyboard and to integrate mrec and mplay shouldn't be very
complicated (though my knowledge of lisp is very limited). A rather
interesting point is that the compilation with my 486-33 DX took almost an
hour while compiling with clisp it took only just about 15 mins. The code
generated with acl is about 4.5 megs and it is not a loadable module as in
clisp but an executable module with all the common lisp features.

I have not yet made any speed comparisons between clisp and acl generated
cm, but surely will do them when I get more used to acl.

Matti

mjkoskin@sci.fi


X-Sender: taube@ux1.cso.uiuc.edu
Date: Tue, 21 Jan 1997 08:33:56 -0600
To: Matti J Koskinen <mjkoskin@sci.fi>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Acl 4.3 and CM
Cc: cmdist@ccrma.Stanford.EDU

>interesting point is that the compilation with my 486-33 DX took almost an
>hour while compiling with clisp it took only just about 15 mins. The code

One hour on a 486-33 might be right -- I compiled in Linux at ccrma on some
sort of fast pentium and it took about 10-15 minutes if I recall correctly.
On a Mac PPC it takes under 15 and the system is considerably larger due to
gui code.

re midi: i submitted a grant propposal to get a pentium system to run
NT/Linux, if I get it then I will try to figure Linux MIDI out -- my first
problem is that I havent found a useful (working) MIDI driver...

-hkt



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Tue, 21 Jan 1997 06:37:55 -0800
In-Reply-To: Matti J Koskinen <mjkoskin@sci.fi>
        "ACL4.3 and CM" (Jan 21,  4:18pm)
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: Matti J Koskinen <mjkoskin@sci.fi>, cmdist@ccrma.Stanford.EDU
Subject: Re: ACL4.3 and CM

I am currently rewriting most of the midi architecture, so
things will change in Linux, too.  Do you have documentation
about tclmidi-3.1f?  we are still looking for a reasonable
midi driver (with timing services) for Linux...

Thanks,

-Tobias

Date: Tue, 21 Jan 1997 11:34:36 -0500 (EST)
From: Lawrence Troxler <lt@westnet.com>
To: Matti J Koskinen <mjkoskin@sci.fi>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: Acl 4.3 and CM
In-Reply-To: <Pine.LNX.3.93.970121102712.133B-100000@fingerprint>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Tue, 21 Jan 1997, Matti J Koskinen wrote:

> 
> Hi all
> 
> I received yesterday a copy of Allegro 4.3 for Linux and compiled Common
> Music with it. The compilation went without problems (only warnings about
> float-type) and the code looks like working ok. The next thing to do is to
> get the midi working. 
> I have tclmidi-3.1f, which can read midi
> from keyboard and to integrate mrec and mplay shouldn't be very
> complicated 

Hi Matti. I just recently set up linux on my machine and installed ACL.
Regarding MIDI, I'm still a Linux novice, but I wonder why you need
something like tclmidi? Can't you just read and write raw midi data to
/dev/midi0x?. Of course this won't handle scheduling tho. What about the
/dev/sequencer device, however? I can't find any documentation on it, but
I imagine that it might schedule output. I plan on taking a look at the
Jazz sequencer source to try to figure out how this works (assuming of
course, that Jazz is under GPL license, and using /dev/sequencer).

> A rather
> interesting point is that the compilation with my 486-33 DX took almost an
> hour while compiling with clisp it took only just about 15 mins. The code
> generated with acl is about 4.5 megs and it is not a loadable module as in
> clisp but an executable module with all the common lisp features.
> 
"Interesting" is the wrong word, IMO. This is a rather *disturbing* point.
I
had assumed that Allegro would be better than CLISP (which I was using on
DOS), but now I wonder which is really better. Take a look at the ACL
installation guide for some horror stories about sizes on different
platforms. Hopefully, ACL will make up for it in speed of executing
compiled code. 

Larry Troxler
lt@westnet.com


Date: Wed, 29 Jan 97 08:17:34 PST
From: bil (To: cmdist)
To: cmdist
Subject: clm/snd news

Recent changes to CLM: a new help subdirectory and clm-help function
for quicker access to the documentation and lisp code; more filters in
wavelets.cl; swapped.cl folded into CLM (mainly to make it easier to
deal with SMS data files in Linux).

Changes to Snd: a new display choice named 'wavogram'; fully rotatable
and scalable spectrograms; dot_size; keypad mappings for various
things (mainly spinning spectrograms); combined channels (for simpler
display of multi-channel files); new "focus style" menu option
chooses what to try to keep in view during zoom; spectrum bug
fixed ([1+1] where [i+1] intended turned it into a sort of sine
transform -- the two look identical with my current glasses, but
bifocals gave me terrible headaches -- my new strategy is to remove
the glasses and sit with my forehead six inches from the screen --
this can't last).


Date: Mon, 3 Feb 1997 23:34:58 -0500
From: fled fairlane <samh@digicron.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Linux ACL / I gotta get me a wavogram...


I can finally stop lurking now that I have an email address.

>> Matti J Koskinen wrote:
>> I received yesterday a copy of Allegro 4.3 for Linux and compiled
>> Common Music with it. ...

>> A rather interesting point is that the compilation with my 486-33 DX
>> took almost an hour while compiling with clisp it took only just
>> about 15 mins. The code generated with acl is about 4.5 megs and it
>> is not a loadable module as in clisp but an executable module with
>> all the common lisp features.

> Larry Troxler responds:
>
> "Interesting" is the wrong word, IMO. This is a rather *disturbing*
> point.  I had assumed that Allegro would be better than CLISP (which I
> was using on DOS), but now I wonder which is really better. Take a
> look at the ACL installation guide for some horror stories about sizes
> on different platforms. Hopefully, ACL will make up for it in speed of
> executing compiled code.

CLISP does not really compile -- it just reads the code and then
writes a file which will be easier to read the next time around (it
byte compiles it). Comparing the compilation time of CLISP to ACL is
not fair. ACL seems to compile to machine code, and probably does a
lot more optimization as well.

I just got ACL today and it took ~15 minutes to compile CLM and
~10 minutes to compile CM on my Linux 586 100mhz. The image size is
about the same as it was with CLISP.

Even having used ACL for only a day I would vouch that ACL is 1000
times better than CLISP. It still amazes me that Franz actually sent
me a CD in the mail for free.

> On  Wed Jan 29 Bill Schottstaedt wrote:
>
> Changes to Snd: a new display choice named 'wavogram'; fully rotatable
> and scalable spectrograms; dot_size; keypad mappings for various
> things (mainly spinning spectrograms); combined channels (for simpler
> display of multi-channel files); new "focus style" menu option

I wasn't going to ask for this but I have to have a wavogram ;-)
Could an executable for Snd that is statically linked against the
Motif libraries be placed on the FTP site for us poor souls that do
not have the $50 to send Metrolink?


sam heisz

From: de@ucolick.org (De Clarke)
Subject: CM with ACL4
To: cmdist@ccrma.Stanford.EDU
Date: Mon, 3 Feb 1997 22:41:55 -0800 (PST)
X-Mailer: ELM [version 2.4 PL22]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit


System: RH Linux kernel 2.0.18 on Pentium 133
LISP  : Franz's ACL 4 (the free Linux CD)
CM    : not sure -- how does one determine CM version?
	I snarfed it some time in early January, I think.

I'm a complete CM newbie, so am working my way through the nifty
Stella tutorial.  All goes exactly as documented until section 6,
in which the student is instructed to save the example... this is
what happens to me at this point:

Stella [Top-Level]: archive * myarchive
Archiving /home/de/myarchive.cm.
Error: attempt to call `VARIABLE-GLOBALLY-SPECIAL-P' which is an undefined
       function.
  [condition type: UNDEFINED-FUNCTION]

Restart actions (select using :continue):
 0: Try calling VARIABLE-GLOBALLY-SPECIAL-P again.
 1: Return a value instead of calling VARIABLE-GLOBALLY-SPECIAL-P.
 2: Try calling a function other than VARIABLE-GLOBALLY-SPECIAL-P.
 3: Setf the symbol-function of VARIABLE-GLOBALLY-SPECIAL-P and call it again.
 4: Return to Top-Level.
 5: Exit Top-Level.
[1] CM(2): 0

Can anyone tell me whether this is a known problem (is the publicly
distributed version of CM crippled so that it can't save files?),
a problem with ACL vs other LISPs, the known result of a common newbie
configuration error, a "documentation bug", or... could it be a CM bug?

best wishes to all

de

-- 
.............................................................................
:De Clarke, Software Engineer                     UCO/Lick Observatory, UCSC:
:Mail: de@ucolick.org | "There is no problem in computer science that cannot: 
:Web: www.ucolick.org |  be solved by another level of indirection"  --J.O. :

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 3 Feb 1997 23:29:44 -0800
In-Reply-To: de@ucolick.org (De Clarke)
        "CM with ACL4" (Feb  3, 10:41pm)
References: <199702040641.WAA05404@ronin.ucolick.org>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: de@ucolick.org (De Clarke), cmdist@ccrma.Stanford.EDU
Subject: Re: CM with ACL4
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii



Same here on my SGI under ACL 4.3.  It works in CLISP, though:

 | tkunze@ulysses:~ [3208]> clispcm
 |
 | > (stella)
 | Hang on a second...
 |
 | Type ? for help.
 |
 | Stella [Top-Level]: (algorithm henon midi-note (length 250)
 |                       (vars (x pi) (y 30))
 |                       (setf x (- (* x 10) y)
 |                             y (* (truncate x) 10)
 |                             note (note (* x 120))
 |                             rhythm (/ y 200)))
 | #<ALGORITHM: Henon>
 | Stella [Top-Level]: list
 | Top-Level:
 |      1. #<ALGORITHM: Henon>
 |
 | Stella [Top-Level]: archive henon /tmp/foo.cm
 | Archiving /tmp/foo.cm.
 | WARNING:
 | The archive code for algorithm Henon contains one or more references to the
global variable PI, which must exist when Henon is loaded and rerun.
 |
 | Stella [Top-Level]: q
 |
 | > (describe 'variable-globally-special-p)
 |
 | Description of
 | VARIABLE-GLOBALLY-SPECIAL-P
 | This is the symbol VARIABLE-GLOBALLY-SPECIAL-P, names a function.
 | The symbol lies in #<PACKAGE WALKER> and is accessible in the packages CLM,
COMMON-MUSIC, WALKER.
 |
 | > (VARIABLE-GLOBALLY-SPECIAL-P 'pi)
 | T
 | >


In ACL, however, walker::VARIABLE-GLOBALLY-SPECIAL-P seems to clash
with a method or flet which uses the same name (ie, it's function slot
holds a function object, but symbol-function errors):

 | tkunze@ulysses:~ [3209]> aclcm
 | Allegro CL 4.3 [Silicon Graphics Iris 4D; R1] (4/5/96 18:43)
 | Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA.  All Rights
Reserved.
 | ;; Optimization settings: safety 1, space 1, speed 1, debug 2.
 | ;; For a complete description of all compiler switches given the current
optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).
 |
 | [changing package from "COMMON-LISP-USER" to "COMMON-MUSIC"]
 | CM(1): (stella)
 | Hang on a second...
 |
 | Type ? for help.
 |
 | Stella [Top-Level]: (algorithm henon midi-note (length 250)
 |                       (vars (x pi) (y 30))
 |                       (setf x (- (* x 10) y)
 |                             y (* (truncate x) 10)
 |                             note (note (* x 120))
 |                             rhythm (/ y 200)))
 |
 | #<ALGORITHM: Henon>
 | Stella [Top-Level]:
 | Stella [Top-Level]: list
 | Top-Level:
 |      1. #<ALGORITHM: Henon>
 |
 | Stella [Top-Level]: archive henon /tmp/foo.cm
 | /tmp/foo.cm exists. Overwrite? yes
 | Archiving /tmp/foo.cm.
 | Error: attempt to call `VARIABLE-GLOBALLY-SPECIAL-P' which is an undefined
 |        function.
 |   [condition type: UNDEFINED-FUNCTION]
 |
 | Restart actions (select using :continue):
 |  0: Try calling VARIABLE-GLOBALLY-SPECIAL-P again.
 |  1: Return a value instead of calling VARIABLE-GLOBALLY-SPECIAL-P.
 |  2: Try calling a function other than VARIABLE-GLOBALLY-SPECIAL-P.
 |  3: Setf the symbol-function of VARIABLE-GLOBALLY-SPECIAL-P and call it
again.
 |  4: Return to Top-Level.
 |  5: Exit Top-Level.
 | [1] CM(2): (describe 'variable-globally-special-p)
 | VARIABLE-GLOBALLY-SPECIAL-P is a SYMBOL.
 |   It is unbound.
 |   It is INTERNAL in the CLOS package and accessible in the COMMON-MUSIC, and
 | WALKER packages.
 | [1] CM(3): (inspect 'variable-globally-special-p)
 | The symbol VARIABLE-GLOBALLY-SPECIAL-P @ #x1031d9df
 |   which is an INTERNAL symbol in the CLOS package
 |    0 type ---------> Bit field: #x07
 |    1 flags --------> Bit field: #x00
 |    2 hash ---------> Bit field: #xb83f
 |    3 value --------> ..unbound..
 |    4 package ------> The CLOS package
 |    5 function -----> #<Function (unnamed) @ #x1003e952>
 |    6 name ---------> A simple-string (27) that starts "VARIABLE-GLOBALL"
 |    7 plist --------> The symbol NIL
 | [2i] CM(4):


I would just not use the archive command on algorithms for now.  You can
still archive threads and merges of threads.  I always reconstruct
stella algorithms from code I save as lisp anyway, and so does everybody
else, i guess :)  If you *need* algo runs to be archived, try "run <algo>
into <thread>" and then archive the thread.


-Tobias

Date: Tue,  4 Feb 97 05:58:11 PST
From: bil (To: cmdist)
To: cmdist
Subject: Re: Linux ACL / I gotta get me a wavogram...

I'll build executables of Snd for the SGI and Linux 
later today, and put them on the ccrma-ftp site under
names resembling sgi-snd and linux-snd -- I don't think
I can include the 4Front sound module, due to license
restrictions, so it won't be able to play anything in Linux.

I'm very proud of the name "wavogram".  (By the way, check
out the new CLM instruments -- the digital zipper in
zipper.ins, and various frequency domain cross-fades
(sweep, dissolve, etc) in fade.ins).  And I'm goofing
around with Java applets in clm.html -- I will include
one as an experiment in the next version (say tomorrow).


X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <9702032329.ZM8944@ulysses.stanford.edu>
References: de@ucolick.org (De Clarke)        "CM with ACL4" (Feb  3,
 10:41pm) <199702040641.WAA05404@ronin.ucolick.org>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Tue, 4 Feb 1997 09:14:34 -0600
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM with ACL4
Cc: t@ulysses.Stanford.EDU

>Same here on my SGI under ACL 4.3.  It works in CLISP, though:
[...]
>In ACL, however, walker::VARIABLE-GLOBALLY-SPECIAL-P seems to clash
>with a method or flet which uses the same name (ie, it's function slot
>holds a function object, but symbol-function errors):

In ACL 4.3, CM should not contain the WALKER package and
variable-globally-special-p appears to be undefined in their clos package.
i think it could be defined like so:

#+(and excl clos)
(defun clos::variable-globally-special-p (var)
  (clos::variable-special-p var nil))



I dont understand how the WALKER package is getting loaded in your example
but it likely will cause confusion with ACLs verion.  In the cm image that
i booted at ccrma (ulysses://usr/local/bin/aclcm) walker is absent -- maybe
you are using clm and clm loads walk.lisp???


X-Sender: taube@ux1.cso.uiuc.edu
Date: Tue, 4 Feb 1997 09:26:07 -0600
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM with ACL4

i forgot to add that it is probably best not to ARCHIVE algorithms or
generators at all. this is because an algorithm of any complexity will
likely depend on a lexical clousure and the common lisp standard does not
provide a mechanism for saving these "objects" divorced from the lexical
environment in which they were created.  this turns out to not really be a
problem becuseu algorithms are almost always developed inside a text editor
anyway. so you should just save that file -- that way the algorithms can be
recreated in the environment in which they were intended.


Date: Fri, 7 Feb 1997 22:18:50 -0500 (EST)
To: fled fairlane <samh@digicron.com>, cmdist@ccrma.Stanford.EDU
From: lt@westnet.com (Larry Troxler)
Subject: Re: Linux ACL 

At 11:34 PM 2/3/97 -0500, fled fairlane wrote:
>[...]

Thanks for the clarification and corrections. For one, I didn't realize that
Franz compiles directly to machine code. 

Larry Troxler
lt@westnet.com


From: de@ucolick.org (De Clarke)
Date: Mon, 10 Feb 1997 10:50:19 -0800 (PST)
Subject: newbie LISP question
To: cmdist@ccrma.Stanford.EDU
X-Mailer: TkMail 4.0beta8

I have been investigating Common Music with Franz ACL on
my Linux crate, using Touretsky as my primer for LISP.
I'm about halfway through Touretsky and I have a general
question for all you experienced LISP hackers:

	what are the features of LISP that distinguish it
	from other languages and make it better for this 
	kind of work?

So far, I haven't met a feature of LISP that isn't in (or 
can't be trivially done using) Extended Tcl; and some features 
seem less developed than their counterparts in Tcl.  Obviously 
I have a bias, after 5 years hacking Tcl; and obviously I'm 
studying LISP at the dopey beginner level, where the real 
strengths of the language are not revealed.  So I'm sure this 
discouraging impression is untrue! 

Unfortunately Touretsky is strictly tutorial, not really
comparative...

Therefore, I thought I would ask you folks, who have so
much more experience with LISP, what it is that endears
LISP to you.  Every language advocate has their favourite
"bet you can't do *this* in [that other language]" example.
Would anyone be kind enough to send me a few such examples
where "only LISP will do the trick," so as to inspire me
to stick with my self-imposed lessons?  at the moment I
am wondering why I'm doing this to myself :-)

How would you compare, say, LISP vs Perl vs Tcl vs Java?
I will certainly take this question to the Usenet if you
all feel it's inappropriate here -- but I'm particularly
interested in musicological applications.

de

.............................................................................
:De Clarke, Software Engineer                     UCO/Lick Observatory, UCSC:
:Mail: de@ucolick.org | "There is no problem in computer science that cannot: 
:Web: www.ucolick.org |  be solved by another level of indirection"  --J.O. :


X-Sender: taube@ux1.cso.uiuc.edu
Date: Mon, 10 Feb 1997 13:25:18 -0600
To: de@ucolick.org (De Clarke)
From: Rick Taube <taube@uiuc.edu>
Subject: Re: newbie LISP question
Cc: cmdist@ccrma.Stanford.EDU

sorry i dont really have time (desire?) to get into a comparison, but ill
list several reasons why i use it

programs are data in lisp, and can be treated or analyzed just like any
other data.  both clm and cm use a "code walker" that makes use of this
feature. (for example, clm's code walker turns part of what you write into
C. )

lisp makes it easy to write programs that write programs. common music
depends on this ablity. when you define an algorithm you are writing a
program that writes a (new) program each time it runs.

lisp's object system is incredibly powerful and dynamic. gnereric functios
are much more general than message passing, and even method dispatch
(:before :after :around, etc) is at the control of the programmer.

lisp has automatic memory management.

lisp has an interpreter

lisp has lexical closures.

lisp is a standardized language and has free implementations that run on
most machines.

lisp has a (fairly) consistent syntax. its possible to get people up and
running in a few hours time.

---
lisp is a very old language and a number of newer langueages (and operating
systems and computers) have encorporated some or even many of these
features.


Date: Mon, 10 Feb 1997 15:57:57 -0500 (EST)
X-Sender: starrett@pop.fas.harvard.edu
To: cmdist@ccrma.Stanford.EDU
From: "Charles D. Starrett" <starrett@husc.harvard.edu>
Subject: Re: newbie LISP question

At 10:50 -0800 2/10/97, De Clarke wrote (among other things):

>	what are the features of LISP that distinguish it
>	from other languages and make it better for this
>	kind of work?


You might want to read:

Peter Desain, "LISP as a Second Language: Functional Aspects,"
_Perspectives_of_New_Music_ 28:1 (1990): 192-222.

He talks a little about how LISP is different from less symbolic
environments.  It might answer your question, or it might not, but I think
it's worth a read.

/----Charles D. Starrett-----\
|     /  | ____ | |  ____    |
|    /\--| |    |-|  |       |
|   /  \ | |____| |  |___    |
|        |      | | ___|___  |
\--starrett@fas.harvard.edu--/



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 10 Feb 1997 13:42:51 -0800
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: cmdist@ccrma.Stanford.EDU
Subject: Re: newbie LISP question

Touretzky is a nice book, but really dated and thus does not really
convey to you the modern aspects of LISP.

An all-time winner of mine is Peter Norvig's  "Paradigms of Artificial
Intelligence Programming: Case Studies in Common Lisp", which also
sports the best LISP tutorial i've seen so far.  There is a page for
the book at

  http://www.norvig.com/paip.html

and more links on his home page

  http://www.harlequin.com/books/norvig/norvig.html


Enjoy!


Date: Mon, 17 Feb 97 07:21:44 PST
From: bil (To: cmdist)
To: cmdist
Subject: snd and clm news

New Snd has a variety of colormaps for pretty sonograms,
a color and orientation browser, a much improved save-as
dialog, a new files browser, and an improved region browser.

At Tobias Kunze's suggestion, I added the generator rec-any
to clm for real-time microphone input.  Also the help
facility is gradually moving beyond the 1960's. In Linux
I removed the :voxware switch because that code is apparently
a standard part of the kernel (similarly in Snd).


Date: Tue, 18 Feb 1997 07:35:46 -0500 (EST)
From: GeoDanCor@aol.com
To: cmdist@ccrma.Stanford.EDU
Subject: cmdist first contact

Hello

Thank you very much for the first sending of cmdist!

I have in CM und CLISP under WINDOWS 95 just few experience (some 2 month)
but a lot of enthusiasm. Here is my way to CM under WIN95 put together -
please excuse the length of my exposing, but I think, it may help to somebody
newer than I am... There are also some questions in my text. 

1. My first try: XLisp is OK, and the WIN95 XLISPWIN version 2.1G
(ftp://ftp.uni-kl.de/pub3/pc/win/developement/xlisp) - is really nice, but
do'nt accept CM building. 

2. ACL 3.0 light (downloaded as free ware from http://www.franz.com/) is very
elegant, but the compiler is disabled in this light version and the heap
limited, so, CM building is impossible. I tried to install an allready
builded CM to ACL, but it did'nt work. (Q.: Could anybody install CM under
ACL light version?)

3. I could never install correct WIN32.ZIP
(http://sayre.sysc.pdx.edu:8001/clisp/ win32.zip). I became always an error
message (from UNIX world?): "cannot find /bin/sh.exe, copy /user/bin/bash.exe
to it!". I could'nt find this files. (Q.: Have anybody already resolved this
problem?)

4. CM under CLISP in DOS exclusive modus was my first success (after I
manually ran lispini.fas und renamed comptools to comptool - may be, because
I unziped it under WIN95, which, unlike DOS or WIN3.1, accepts longer names),
but without a parallel editor and sequencer to hear the results, it's not a
serious solution. 

5. Thanks to some indirectly information from cmdist, I installed CLISP in a
DOS windows under WIN95, then ported the old CM from DOS. This DOS window
must be prepared (e.g. 520 RAM, no EMS, 4096 XMS; also activate Doskey). Here
is the batch file cm.bat (better than in autoexec.bat!), to load CM together
with the DOS windows:

@Echo off
set TERM=ANSI
set TERMCAP=C:\LISP\CLISP\TERMCAP.DAT
set rsx=C:\LISP\CLISP\rsx.exe
set emx=C:\LISP\CLISP\rsx.exe
C:\LISP\CLISP\RSX.EXE -Ra C:\LISP\CLISP\LISP.EXE -M C:\CM\CM.MEM

(Q: I don't know why the list of variables %1 %2 ... are not accepted  - may
be also not really needed?) 
(Q: There is always an error message: "Warning: emx 0.9b or later requiered",
but everything looks OK. Can somebody tell me please, what mean this, where
is emx 0.9b to find or how is this message to disable?)
(Q: How can I let automatically execute <STELLA> with CM start?)

I load/write/save the CM file in a Text Editor in WIN95, then load/open/seq
or mix in CM into a MIDI file in the DOS window, then load/play in Cakewalk
Pro Audio in WIN95, to hear and see the result. With 64MB RAM on a Pentium
133 MHz and all programms actives in RAM it goes all very quickly. Till now,
this is my best solution. 

6. I hope to have soon ACL 3.0.1 or 3.0.2, the complete version. (ACL
standard costs $595 + shipping, but there were also a discount price of
$446.25; the professional version costs $1250). I knew, that's the best for
CM in WIN95, but - as I read in cmdist - MIDI real time 'must be
theoretically OK', but nobody has this already proved...

7. I informed myself about LINUX on Pentium: there are problems with most
MIDI (only MPU standard is OK, but I have Voyetra MIDI), some Graphic and
Sound cards, even with some CDs. So is LINUX - sorry! - conceptually 'older'
than WINDOWS, which handles e.g. all MIDIs, cards etc. through one and well
documented API and DLL.

Actually I am interested 'to put musical material (i.e. algorithms) in time',
so I tried 2 methods: 
(1) to give to ALGs absolute start and end times values as variables from a
table and to places them on a time scale, controlled through a globale
counter
(2) to add simply the ALGs times: the end of an ALG will be start for the
next

Surely the ALGs must be therefor renamed with the function (name 'nx- T). For
a more complex project, I wish put ALGs in different MERGEs (m1, m2 ...),
which I work separately, evtl. on different channels, then only set them in a
finale MERGE (m). The start times are already fixed in each ALG, so the
partial or finale MERGEs need only couple them, have also time slot unset.
Now came the surprise: The times of ALGs in MERGE m1, m2... are not correctly
worked, so the result is unforeseeable. It seems, this times interact free
between different MERGEs. Here the simplest example to prove that: 

 (merge m ()
	(merge m1 ()		  
		(algorithm a1 midi-note (start 0 end 8 amplitude .5 channel 0)			
            (setf note (item (steps 1 -1 2 -2 in random initially-from 'a4)))
			(setf rhythm (item (rhythms 16 32)))   	))		 				 
	(merge m2 ()
 			(algorithm a2 midi-note (start 13 end 21 amplitude .2 channel 1)
				(setf note (item (notes bf3 gf ef in random)))
				(setf rhythm (item (rhythms 16 8)))  ))   )

This is my most actually and the last question: is it here something false?
Is MERGE not maked to be nested? I tried also other possibilities to insert
different containers in other (super)containers, but MERGEs and ALGORITHMs
are the most flexible combination. 

Thank you in advance for any help or comment.

Regards, 

Corneliu Dan Georgescu
Freie Universitaet Berlin, Institut fuer vergleichende Musikwissenschaft


Date: Tue, 18 Feb 1997 09:57:39 -0600
To: GeoDanCor@aol.com
From: Rick Taube <taube@uiuc.edu>
Subject: Re: cmdist first contact
Cc: cmdist@ccrma.Stanford.EDU

>builded CM to ACL, but it did'nt work. (Q.: Could anybody install CM under
>ACL light version?)

this is not possible because of the limited heap size of ACL Lite.

>(Q: How can I let automatically execute <STELLA> with CM start?)

create a file cminit.lisp in the same directory as the cm image with the
following lines:

  (in-package :cm)
  (stella)

cm tries to autoload this file if it exists. if for some reason that doesnt
work in clisp/dos, then  i think clisp takes a -i argument that will load
an init file. check the clisp docs for a description of what arguemnts you
can pass it from the shell.

>
>6. I hope to have soon ACL 3.0.1 or 3.0.2, the complete version. (ACL
>standard costs $595 + shipping, but there were also a discount price of
>$446.25; the professional version costs $1250). I knew, that's the best for
>CM in WIN95, but - as I read in cmdist - MIDI real time 'must be
>theoretically OK', but nobody has this already proved...
>
>7. I informed myself about LINUX on Pentium: there are problems with most
>MIDI (only MPU standard is OK, but I have Voyetra MIDI), some Graphic and
>Sound cards, even with some CDs. So is LINUX - sorry! - conceptually 'older'
>than WINDOWS, which handles e.g. all MIDIs, cards etc. through one and well
>documented API and DLL.


the next release of CM will hopefully be OMS compliant. if so, it should be
possible to compile cm's macintosh midi code under windows, too.

>Actually I am interested 'to put musical material (i.e. algorithms) in time',
>so I tried 2 methods:
>(1) to give to ALGs absolute start and end times values as variables from a
>table and to places them on a time scale, controlled through a globale
>counter
>(2) to add simply the ALGs times: the end of an ALG will be start for the
>next

either is possible, the second one is more interesting -- define the
algorithm inside a lisp function that calls itself again just before it
stops:

(defun make-it (name beg len off rep)
  (algorithm (name name) midi-note (length len start beg)
    (setf note (between off (+ off 12)))
    (setf rhythm (pickl .1 .2))
    (when (and (> rep 0) (= count (1- length)))
      (format t "~%Sprouting #~D." rep)
      (sprout
       (make-it nil (+ time rhythm)
                (between 20 40)
                (pickl 20 30 40 50 60)
                (1- rep)))))))

Stella [Top-Level]: (make-it 'top 0 20 60 6)
#<ALGORITHM: Top>

Stella [Top-Level]: mix top 0
Sprouting #6.
Sprouting #5.
Sprouting #4.
Sprouting #3.
Sprouting #2.
Sprouting #1.
Stella [Top-Level]:


>worked, so the result is unforeseeable. It seems, this times interact free
>between different MERGEs. Here the simplest example to prove that:
[...]
>This is my most actually and the last question: is it here something false?
>Is MERGE not maked to be nested? I tried also other possibilities to insert
>different containers in other (super)containers, but MERGEs and ALGORITHMs
>are the most flexible combination.


im not sure what you mean -- your example works correctly from cm's point
of view. note that except for the top level merge you dont need to name the
internal ones. also your example really doesnt need the internal merges. it
could be more simply written so:

(merge m ()
  (algorithm nil midi-note (start 0 end 8 amplitude .5 channel 0)

    (setf note (item (steps 1 -1 2 -2 in random initially-from 'a4)))
    (setf rhythm (item (rhythms 16 32)))   	)

  (algorithm nil midi-note (start 13 end 21 amplitude .2 channel 1)
    (setf note (item (notes bf3 gf ef in random)))
    (setf rhythm (item (rhythms 16 8)))  )   )


X-Mailer: Novell GroupWise 4.1
Date: Thu, 20 Feb 1997 17:11:08 +0100
From: Jozef van de Vorst <J.J.A.O.v.d.Vorst@tm.tue.nl>
To: cmdist@ccrma.Stanford.EDU
Subject:  help newby

how to implement in this process:

(algorithm tst midi-note (length 48 rhythm 1
duration 1 amplitude .5)
  (setf note (item (steps 2 from 48)))
)

the next algorithm:
if note > max then note=note-12='new offset'
so all notes are lower then max (say 72)


X-Sender: taube@ux1.cso.uiuc.edu
Date: Thu, 20 Feb 1997 10:32:18 -0600
To: Jozef van de Vorst <J.J.A.O.v.d.Vorst@tm.tue.nl>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: help newby
Cc: cmdist@ccrma.Stanford.EDU

>how to implement in this process:
>
>(algorithm tst midi-note (length 48 rhythm 1
>duration 1 amplitude .5)
>  (setf note (item (steps 2 from 48)))
>)
>
>the next algorithm:
>if note > max then note=note-12='new offset'
>so all notes are lower then max (say 72)

what do you mean by "the next algoritm"? the next version?? a different
algorithm that should run concurrently?? your questions need to be more
specific if you want a specific solution. but in general, if you want 2
algorithms to use the same variables then use let:

(let ((maximum 74)
      (offset 40))
  (algorithm one ... )
  (algorithm two ... ))

this way either or both algos can refer to and set the same maximum and offset.


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Thu, 20 Feb 1997 15:56:30 -0800
In-Reply-To: Jozef van de Vorst <J.J.A.O.v.d.Vorst@tm.tue.nl>
        "help newby" (Feb 20,  5:11pm)
Reply-To: t@ulysses.Stanford.EDU
Subject: Re: help newby

I guess what you want is an series of notes that start at
48 and "step" up to an upper limit (of, say 72) and resets
itself to a new offset each time it hits the limit, right?

Solution 1: don't care about the steps, do the pure math

  (setf note (+ note 2))
  (when (> note 72)
    (decf note 12))

Solution 2: use steps with the INITIALLY-FROM option, then
continue as above

  (setf note (item (steps 2 initially-from 48)))
  (when (> note 72)
    (decf note 12))

Solution 3: transfer control to the item stream

  (setf note (item (steps 2
                          for (items 13 6 in sequence)
                          from (items 48 60 in sequence))))

There are zillions of other solutions, of course.


X-Mailer: Novell GroupWise 4.1
Date: Mon, 24 Feb 1997 10:08:37 +0100
From: Jozef van de Vorst <J.J.A.O.v.d.Vorst@tm.tue.nl>
To: cmdist@ccrma.Stanford.EDU

what i did

; open tst.mid timescale .25
(merge midi ()
  (setf m (defmode major 2 1 2 2 2 1 2 ))
  (transpose m 'c4)
  (algorithm melos midi-note
    ( start 0 end 16 )
    ( setf note 
      ( item (steps 1 in cycle initially-from '48 of
m )))
      ( when (> note 66)(decf note 12))      ;
advise from tobias
    ( setf rhythm 
      ( item (items 1)))
    ( setf duration rhythm)
    ( setf amplitude .5 )
    ( setf channel 0 )
  )
)
; mix midi

the result is a series of notes from 48 up 65,
jump down 55 and 
up 91 passing the upperlimit 66.
And that's not what i wanted. I expected 3 more
jumps.
The problem is this:
Generate notes by steps or intervals within
lower&upper limits
   what to do when passing a limit ?
   solutions
     1 jump one octav
     2 mirror around upper and lower limit
     3 mirror step or interval responsible for this
passing
     ...

questions:
how to explain the result
what's the right piece of code for LimitByJump
what about LimitByMirrorLimit and
LimitByMirrorStep

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 24 Feb 1997 01:56:56 -0800
Reply-To: t@ulysses.Stanford.EDU
To: Jozef van de Vorst <J.J.A.O.v.d.Vorst@tm.tue.nl>,
        cmdist@ccrma.Stanford.EDU

Might as well comment on your code while I'm sitting here late at
night grading common music homework!

Here's what I would do:

  (algorithm melos midi-note (start 0 end 16 rhythm .25 duration .25)
    (vars (m (defmode (major on 'bf3) 2 2 1 2 2 2 1))
  	(lb (degree 'g3)) step)
    (setf step (item (steps 1 initially-from 48 of m))
  	note (if (> step lb)
  		 (mode-degree (+ lb (mod (- step lb) 12)) m)
  	       step)))


Or, if you like terse code:

  (defparameter *my-mode* (defmode (major on 'c4) 2 1 2 2 2 1 2))

  (algorithm melos midi-note (start 0 end 16 rhythm .25 duration .25)
    (setf note (item (steps 1 initially-from 48 of *my-mode*)))
    (and (>= note 67)
	 (setf note (mode-degree (+ 55 (mod (- note 55) 12)) *my-mode*))))


To: cmdist@ccrma.Stanford.EDU
Subject: Setting up CLM on Linux/ACL
Date: Mon, 24 Feb 1997 10:41:02 -0500
From: Charles G Waldman <cgw@pgt.com>

Hello.  I am new to this list;  I have a brand-new Linux system
that I am interested in using for musical purposes.  The base
system is a 166Mhz 586 with 64MB. I originally installed 
Slackware 3.0 and then upgraded the kernel from 2.0.0 to 2.0.29
(the current stable release).  I have a SoundBlaster 32 with the
OSS/Linux sound driver. Everything works great; in fact
it is a whole lot better system than the seven-year-old Sun
I'm sitting in front of now (Linux at home, Sun at work). 
I obtained the free ACL CD from Franz, and downloaded the current
release of CLM.  Everything seems to have installed OK;
when I ":ld all.lisp" inside the CLM directory; everything
compiles and loads without a hitch.  ((Before putting ACL
on the system, using GCL I was unable to load CLM succesfully)).

I run (full-test) after loading "clm-test.lisp" and most of the
tests are OK;  the sounds are produced;  there are a few errors,
though - I'm not in front of the system now so I don't have
the exact error text, sorry, but it was something about
rehash-threshold needing to be between 0 and 1.  I just
skipped that test, and the rest of the tests seemed OK.

But; when I ":ld clm-example.lisp" I get an almost instant
"Segmentation Fault" and ACL exits; I am back at the shell
prompt;  not at any useful place inside Lisp where I could
hope to debug.   

Does anybody have a similarly configured system, and does
clm-example work for them?  I don't know if this is a CLM
problem, an Allegro problem,  or a problem with my system.
What kind of tests might pinpoint the problem?

Please pardon me if such questions are inappropriate to this
list, and if so kindly direct me toward the correct channels.
Thank you.

	Charles G. Waldman
	cgw@pgt.com


Date: Mon, 24 Feb 97 09:10:25 PST
From: bil (To: Charles G Waldman <cgw@pgt.com>)
To: Charles G Waldman <cgw@pgt.com>
Subject: Re: Setting up CLM on Linux/ACL
Cc: cmdist

Are you using the current version of CLM?  I think the rehash
bug was fixed about a month ago -- it is a bug in ACL 4.3 on
Linux that Franz blames on their C compiler(!).  The work-around
in defins.lisp is to set the rehash-threshold explicitly.

The clm-example.lisp problem is in the random-state argument
to random -- apparently ACL changed the format of that
variable at some point, and I didn't notice.  Since Lisp
makes it ridiculously difficuly to repeat a random number
sequence, I might change that example to use CLM's C-based
random number generator, and bypass Lisp entirely.
I'll send you the repaired clm-example code (at the
moment, it's very hard for me to do anything since my
files and the lisp compilers here at work are largely 
inaccessible -- no doubt this is a temporary situation).


Date: Sun, 2 Mar 1997 07:59:24 -0500 (EST)
From: GeoDanCor@aol.com
To: cmdist@ccrma.Stanford.EDU
Subject: re: nested MERGEs

> create a file cminit-lisp ... with the following lines: (IN-PACKAGE :CM)
(STELLA)) ... in for some reason that doesnt work...
Thanks, it's OK: CM loads the cminit.lsp file under DOS/WIN95. 

- I wish put ALGs in different MERGEs (m1, m2 ...), which I work separately,
evtl. on different 
- channels, then only set them in a finale MERGE (m) ...
- The times of ALGs in MERGE m1, m2... are not correctly worked, so the
result is
- unforeseeable. It seems, this times interact free between different MERGEs.

- Here the simplest example to prove that: 
- (merge m ()
-	(merge m1 ()		  
-		(algorithm a1 midi-note (start 0 end 8 amplitude .5 channel 0)			
-           (setf note (item (steps 1 -1 2 -2 in random initially-from 'a4)))
-			(setf rhythm (item (rhythms 16 32)))   	))		 				 
-	(merge m2 ()
- 			(algorithm a2 midi-note (start 13 end 21 amplitude .2 channel 1)
-				(setf note (item (notes bf3 gf ef in random)))
-				(setf rhythm (item (rhythms 16 8)))  ))   )
-
> im not sure what you mean -- your example works correctly from cm's point
> of view. note that except for the top level merge you dont need to name the
> internal ones. also your example really doesnt need the internal merges. it
> could be more simply written so:
> (merge m ()
>  (algorithm nil midi-note (start 0 end 8 amplitude .5 channel 0)
>    (setf note (item (steps 1 -1 2 -2 in random initially-from 'a4)))
>    (setf rhythm (item (rhythms 16 32)))   	)
>  (algorithm nil midi-note (start 13 end 21 amplitude .2 channel 1)
>    (setf note (item (notes bf3 gf ef in random)))
>   (setf rhythm (item (rhythms 16 8)))  )   )

Well, my example was not good - but as it was, it can show the times errors
in nested MERGEs by writing MIDI-files (proved on WIN95 and MAC). Here is a
better one: 

(merge m ()
	(setf zv 0)

	(merge m1 ()				  
	  (dotimes (i 144) 	
		(setf x0 (+ 1 (random 8)))		
		(case x0
			(1	(setf dv (item (items 1 2 3 2 in heap))) 
				(setf x1 (+ 1 (random 3)))
				(case x1
					(1	 (algorithm (name 'nva1- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
							(setf note (item (steps 1 -1 2 -2 3 -3 
								in random initially-from 'a6)))
  							(setf rhythm (item (rhythms 32)))	))
 					(2	 (algorithm (name 'nva2- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
							(setf note (item (steps 1 -1 2 -1 
								in random initially-from 'fs6))) 	 	
							(setf rhythm (item (rhythms 32)))	))
					(3	 (algorithm (name 'nva3- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
							(setf note (item (steps 1 -1 2 1 -2 
								in random initially-from 'cs6))) 	 	
							(setf rhythm (item (rhythms 32)))	)) 		))	 	
			(2	(setf dv (item (items 1 2 in heap)))
				(setf x2 (+ 1 (random 2)))
				(case x2
					(1  (algorithm (name 'nvb- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .8 channel 0)			
							(setf note (item (notes [af3 ef4] r)))
							(setf rhythm (item (rhythms 16 16 
										(rhythms 16/3 16/3 16/3)
										(rhythms 32 32 32 32)			
										(rhythms 16 16) 
										(rhythms 32 32 32 32 32 32)
										in random traversing breadth)))  ))
					(2  (algorithm (name 'nvb- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .8 channel 0)			
							(setf note (item (notes [af3 ef4] r)))
							(setf rhythm (item (rhythms 16 16 16
										(rhythms 32 32 32 32 32 32 32 32 32 32)
										in random traversing depth)))  ))		))									 
			(3 (setf dv (item (items 2 3 4 3 2 in heap)))
				(setf x3 (+ 1 (random 3)))
				(case x3
					(1  (algorithm (name 'nvc1- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
								(setf note (item (notes 
									a5 g f e f d e f  gs a f g  
									a gn f e  d e f g  f e d  a a4 a	
									d5 e f gs a e gn  f e d  cs 
									d e f gs a e gn  f e d a a4 a ))) 	 
								(setf rhythm (item (rhythms 
									16 16 16 16 16 16 16 16 16 16 16 16
									16 16 16 16 16 16 16 16 16 16  8  4 8 8 	
									16 16 16 16 16 16 16 16 16 16 16 16 
									16 16  8 16 16 16 16  8  4  8  8 ))) ))						
					(2  (algorithm (name 'nvc2- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
								(setf note (item (notes 
								 r 	d5 e f gs a e gn  f e d cs d e f gs 
							  		a e gn f e d  a a4 a ))) 	 
								(setf rhythm (item (rhythms 
								8	16 16 16 16 8 16 16 16 16 16 16 16 
									16 16 16 8 16 16 16 16 8 4 8 8 ))) ))							
					(3  (algorithm (name 'nvc3- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
								(setf note (item (notes 
								r	f5 d e f gs a f gs  a gn f e  
									d e f g  f e d  a a4 a	
									d5 e f gs a e gn  f e d cs 
									d e f gs a e gn  f e d a a4 a ))) 	 
 								(setf rhythm (item (rhythms 
 								16	16 16 16 16 16 16 16 16 16 16 16 16 16 
 									16 16 16 16 16 8 4 8  	
									16 16 16 16 8 16 16 16 16 16 16 16 16 
									16 16 8 16 16 16 16 8 4 8 8 ))) ))	))		
			(4	  (setf dv (item (items 1 2 3 4 3 2 in heap)))
				  (algorithm (name 'nve- T) midi-note	
					(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
						(setf note (item (notes cs4)))
						(setf rhythm (item (rhythms 8 16 16 32)))  ))	 		
			(5	(setf dv (item (items 3 4 5 4 3 2 in heap)))
				(algorithm (name 'nvf- T) midi-note	
					(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
						(setf note (item (notes g3)))
						(setf rhythm (item (rhythms 1 2 4 16 16))) ))				
			(6	(setf dv (item (items 1 2 3 2 in heap)))
				(algorithm (name 'nvg- T) midi-note 
					(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
						(setf note (item (notes [b4 fs5] r)))
						(unless-chording
						(setf rhythm (item (rhythms 8 16)))) 	 ))		
			(7	(setf dv (item (items 1 2 3 4 3 2 in heap)))
				(setf x7 (+ 1 (random 3)))
				(case x7
					(1  (algorithm (name 'nvh1- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
  							(setf note (item (notes 
	  						r	 g6 f e f d e f  gs a f gn  
  								a g f e  d e f g  f e d  a a4 a	
								d5 e f gs a e gn  f e d cs d e f gs 
								a e gn  f e d a a4 a ))) 	 
 							(setf rhythm (item (rhythms 
 							16	 16 16 16 16 16 16 16 16 16 16 16 
 								16 16 16 16 16 16 16 16	16 16 8 4 8 8 	
 								16 16 16 16 8 16 16 16 16 16 16 16 
	 							16 16 16 8 16 16 16 16 8 4 8 8 ))) ))							
 					(2 (algorithm (name 'nvh2- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
  							(setf note (item (notes 
  								d5 e f gs a e gn  f e d cs d e f gs 
  								a e gn f e d  a a4 a ))) 	 
	 						(setf rhythm (item (rhythms 
 								16 16 16 16 8 16 16 16 16 16 16 16 
 								16 16 16 8 16 16 16 16 8 4 8 8 ))) ))			
 					(3  (algorithm (name 'nvh3- T) midi-note 
							(start zv end (+ zv (- dv .125)) amplitude .5 channel 0)
  							(setf note (item (notes 
  								f gs  a gn f e  d e f g  f e d  a a4 a	
								f5 e d cs d e f gs a e gn  f e d a a4 a ))) 	 
 							(setf rhythm (item (rhythms 
 								16 16 16 16 16 16 16 16 16 16 16 
 								16 16 8 4 8 16 16 16 16 16 16 16 8 
 								16 16 16 16 8 4 8 8 ))) )) 	))					 
 			(8			(setf dv (item (items 1 2 3 4 5 4 3 2 in heap)))
				(setf x8 (+ 1 (random 3)))
					(case x8
						(1  	(thread (name 'nvd- T) 	(start zv)
								(object rest rhythm 4)	))	
	 					(2 	(thread (name 'nvd- T) 	(start zv)
								(object rest rhythm 2)	))
						(3		(thread (name 'nvd- T) 	(start zv)
								(object rest rhythm 8)	))	 )	)	)	
				(setq zv (+ zv dv)))
 
(merge m2 ()			 
	(loop for zp1 in	'(13 21  34  55  121)
			for dp1 in	'(8  13   13  21  13)
			do
			(algorithm (name 'npa- T) midi-note
				(start zp1 end (+ zp1 (- dp1 .125)) amplitude .2 channel 6)
				(setf note (item (notes (notes bf6 gf ef in cycle)
										(notes bf6 gf df in cycle) in random)))
				(setf rhythm (item (rhythms 16 16 16)))	))					

	(loop for zp2 in	'(21 26 34 55 89 121)
			for dp2 in 	'(13 5  13 21  8    )
			do
			(algorithm (name 'npb- T) midi-note
				(start zp2 end (+ zp2 (- dp2 .125)) amplitude .02 channel 7)
				(setf note (item (notes [a2 b c3 d e])))
    			(setf rhythm (item (rhythms 1 2))) 	))	) 
(merge m3 () .... )
(merge m4 () .... )   ;;; and so on!
)

Please don't care the details, the problem is not how much ALGs or how
complex are they, but: 
how can I use nested MERGEs? I wish work them complete separately, then load
and mix them free, eventually reuse in other combinations. 	
Thank you!

Regards,
Corneliu Dan


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sun, 2 Mar 1997 16:16:37 -0800
In-Reply-To: GeoDanCor@aol.com
        "re: nested MERGEs" (Mar  2,  7:59am)
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: GeoDanCor@aol.com, cmdist@ccrma.Stanford.EDU
Subject: Re: nested MERGEs

A bug in score-select (merge t) makes the scheduler initialize its timing
information correctly only when each nested merge has at least one object
starting at time 0.

If no subobject starts at 0, the elements will be selected out of order:

 : (merge merge-0 ()
 :   (merge merge-1 ()
 :     (mute mute-1 (length 2 start .1 rhythm 1))
 :     (mute mute-2 (length 2 start .2 rhythm 1)))
 :   (merge merge-2 ()
 :     (mute mute-3 (length 2 start .3 rhythm 1))
 :     (mute mute-4 (length 2 start .4 rhythm 1))))
 :
 : Stella [Top-Level]: tlist merge-0 0
 : Mute-1
 :     0.10    1. #<RHYTHMIC-ELEMENT @ #x10827952>
 : Mute-3
 :     0.30    1. #<RHYTHMIC-ELEMENT @ #x10827bca>
 : Mute-2
 :     0.20    1. #<RHYTHMIC-ELEMENT @ #x10827a5a>
 : Mute-4
 :     0.40    1. #<RHYTHMIC-ELEMENT @ #x10827c62>
 : Mute-1
 :     1.10    2. #<RHYTHMIC-ELEMENT @ #x10827952>
 : Mute-2
 :     1.20    2. #<RHYTHMIC-ELEMENT @ #x10827a5a>
 : Mute-3
 :     1.30    2. #<RHYTHMIC-ELEMENT @ #x10827bca>
 : Mute-4
 :     1.40    2. #<RHYTHMIC-ELEMENT @ #x10827c62>
 :
 : Stella [Top-Level]:

The problem does not surface in MIDI real-time output (since the
output queues sort events again), but is definitely a problem when
you output to a file.

Again, the problem is due to the fact that, when it selects `merge-0',
score-select (merge t) correctly selects the two subobjects `merge-1'
and `merge-2' right after one another (since they both start at default
time 0), not knowing that the first actual output will be not before
.1 or .3, respectively.

The easiest workaround would be to insert a rest object at start 0 in
each merge:

 : (merge merge-0 ()
 :   (merge merge-1 ()
 :     (object rest start 0)
 :     (mute mute-1 (length 2 start .1 rhythm 1))
 :     (mute mute-2 (length 2 start .2 rhythm 1)))
 :   (merge merge-2 ()
 :     (object rest start 0)
 :     (mute mute-3 (length 2 start .3 rhythm 1))
 :     (mute mute-4 (length 2 start .4 rhythm 1))))
 :
 : Stella [Top-Level]: tlist merge-0 0
 : Merge-1
 :     0.00    1. #<REST 0#x107c9ef2>
 : Merge-2
 :             1. #<REST 0#x107ca0c2>
 : Mute-1
 :     0.10    1. #<RHYTHMIC-ELEMENT @ #x107c9f8a>
 : Mute-2
 :     0.20    1. #<RHYTHMIC-ELEMENT @ #x107ca022>
 : Mute-3
 :     0.30    1. #<RHYTHMIC-ELEMENT @ #x107ca15a>
 : Mute-4
 :     0.40    1. #<RHYTHMIC-ELEMENT @ #x107ca1f2>
 : Mute-1
 :     1.10    2. #<RHYTHMIC-ELEMENT @ #x107c9f8a>
 : Mute-2
 :     1.20    2. #<RHYTHMIC-ELEMENT @ #x107ca022>
 : Mute-3
 :     1.30    2. #<RHYTHMIC-ELEMENT @ #x107ca15a>
 : Mute-4
 :     1.40    2. #<RHYTHMIC-ELEMENT @ #x107ca1f2>
 :
 : Stella [Top-Level]:


Hope that helps,

-Tobias


Date: Tue,  4 Mar 97 09:05:50 PST
From: bil (To: cmdist)
To: cmdist
Subject: Snd mix dialog

I'm goofing around with mixer user-interface ideas, for
incoporation into Snd (currently its mixing option is about
as bare-bones as you can get).  If anyone has a favorite
along these lines, or ideas they'd like to see implemented,
please pass them along (anything is possible).


Date: Tue, 4 Mar 1997 09:30:38 -0800 (PST)
From: Celso Aguiar <aguiar@ccrma.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: Snd mix dialog

I remember a nextstep progam (Soundworks, if I'm not mistaken) 
as an interesting graphical interface for a mixer. The ability
to 'slide' the relative position of the sounds in time by just
dragging its icon was something nice (and useful). Unfortunatly, 
what soundworks had of 'good gui' it also featured some of the 
worst sound computation algorithms, making it unuseful for any 
serious work with sound. 
I've heard rt has a nice interface also (for the SGI only) but 
that one I haven't tried.

celso
+------------------------------------------------------------+
|Celso Aguiar - aguiar@ccrma.stanford.edu                    |
|CCRMA - Center for Computer Research in Music and Acoustics |
|Stanford University                                         |
+------------------------------------------------------------+

X-Sender: taube@ux1.cso.uiuc.edu
Date: Tue, 4 Mar 1997 12:29:52 -0600
To: bil@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Snd mix dialog
Cc: cmdist@ccrma.Stanford.EDU

arent there already lots of xwindwos programs that do mixing ?  if not, id
vote for something that was scriptable and that tracked dependancies
automatically.


Sender: pichej@ERE.UMontreal.CA
Date: Tue, 04 Mar 1997 14:18:24 -0500
From: Jean Piche <pichej@ERE.UMontreal.CA>
X-Mailer: Mozilla 3.0SC-SGI (X11; I; IRIX 6.3 IP32)
To: bil@ccrma.Stanford.EDU
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: Snd mix dialog

SGI-mix is fabulous but is sgi-only...
________________________________________________________
Jean Piche
Universite de Montreal
http://mistral.ere.umontreal.ca/~pichej
http://www.musique.umontreal.ca/Org/CompoElectro/CEC/

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Tue, 4 Mar 1997 13:07:36 -0800
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: Bill Schottstaedt <bil@ccrma.Stanford.EDU>
Subject: Re: Snd mix dialog
Cc: cmdist@ccrma.Stanford.EDU

X doesn't have a generic mixer as far as I know, but there are
several free mixers on the sgi, some of which might probably
be easily ported to linux.

Hey, I just realize I'm a mixophobe!  Thinking back, I believe I've
never seriously used a mixer at all...  Always struck me as a real
crude tool, somewhat like shifting the voices in a Bach Fugue,
hoping it'll make it sound better.

But, theoretically, scriptability would be important for me.  RT
is highly scriptable, but it's processing algorithms seem a bit
inferior to me (ie, speed-oriented).  Fasmix is programmable, too.
But both lack a graphical representation of (at least) the waveform.

SGI Mix is scriptable and has a most straightforward GUI, i.e.,
shifting works graphically, pan, aux and vol faders may be applied
or programmed at any point as well as variables set.  It allows not,
however, to reference regions among tracks.  It shares soundfiles,
but not subregions of soundfiles.  SGI Mix is limited to 8 "tracks",
each of which may hold as many sounds as you wish.  It has an overall
time limit of i believe 20 minutes, but it's easy to hack in the
sources, a matter of 2 lines if i remember right.  And, yes, it comes
with sources.

I could go on and on, but let's not forget Michael Edward's nifty
artimix program, a real-time mixer with real-time keyboard and
midi control and no GUI!  Then, there is midisynth(1) on the SGI's,
which may be used as a midi-controlled soundfile mixer (just drop
soundfile icons in the channel drop boxes and start hacking away at
your keyboard).

Last, but not least, irix 6.3 comes with an unlimited-track mixer,
soundtracker(1), written in part by ccrma's own paul wienc??awski
(sorry, forgot the exact name), which has it all: gui, real-time
graphics playback (scrolling at any zoom), region definition, region
linking, of course all sorts of mouse operations, envelopes, etc.
Quite similar to digidesigns ProTools on the Mac, which I believe
is still the "industry standard" mixing environment for post-production.
Of course, soundtracker is not as powerful as protools, but it's
free and, I believe, hard to beat if you start from scratch.  They
put about 10 man-years into it.

What i personally would really really like to see is an orchestra
compiler for clm!  That is, a pre-compiled clm "super" instrument,
that can be called from an interpreted script, like csound does.

Content-Type: text/plain
Mime-Version: 1.0 (NeXT Mail 3.3 v118.2)
In-Reply-To: <v03007805af4218efd2f6@[128.174.92.150]>
X-Nextstep-Mailer: Mail 3.3 (Enhance 1.3)
From: Charles Baker <baker@filoli.com>
Date: Tue,  4 Mar 97 15:07:02 -0800
To: bil@ccrma.Stanford.EDU
Subject: Re: Snd mix dialog
Cc: cmdist@ccrma.Stanford.EDU

Bil,

i also want to put a vote in for simple scripting language: i do many simple "signal processing" tricks while mixing...(slap echos, early-echos, even comb-filtering effects) usually i write these in
a scripting language (or CM), and output the "mix note list" to CLM (or occasionally cmix).
The ability to have a simple scripting language for these type
"effects"(which would only require the standard mix params: infile,outchan,outtime,volume,etc.), and perhaps ability to store and menu-driven recall of these would be the ideal!

Also perhaps
graphic global envelopes on mix parameters. (fancy envelope specification?)
Collasping mixes into reloacatable "chunks" (relative time?)
Simple "Solo/Muting" on any (and all) tracks.

Thanks!
CharlieB

Date: Wed, 5 Mar 1997 10:02:37 +0100 (MET)
From: Anders Vinjar <anders.vinjar@notam.uio.no>
To: cmdist@ccrma.Stanford.EDU
Subject: Snd mix dialog

Wish-list:

Transparent interface to lisp, ie. to-snd, from-snd and whatnot, as well
as a script-driven interface capability outside of lisp.  Ability to
receive lists of CLM 'mix' or 'fasmix' calls.

With graphical control of sound placement in time.  User-defined
envelopes on fasmix-type-parameters.  Quick keyboard interface.  Ability
to receive notelists computed in CLM, like the 'section'-section in CLM,
storing temporarily sections of mixes to maybe help computation speed.
Bouncing to sound-files outside of real-time.

All the useful capabilities already in Snd, like markers, regions,
soundfile-lists, automation etc., would be highly appreciated in a
mixer-extension as well.

Date: Wed,  5 Mar 97 09:03:35 PST
From: bil (To: cmdist)
To: cmdist
Subject: snd mix dialog

Thanks for the suggestions.  To answer some of the questions,
I was thinking of the mix as an editing operation like any
other; the mixed-in data could have something like a mark
associated with it; drag the mark to reposition the mixed
data (with constant graphic updates, I hope, looking
something like a cat under a blanket); click it to open
a sort of local mixing console to affect mixed-in channel
amplitude contributions and so on; this would implement
a sort of distributed mixer, with no notion of a "track";
from CLM, the "explode" option to with-sound would
generate the normal sound output, plus all the mix-marks
so you could edit the sound relatively easily, then
save the result as a CLM note list (the "script" I
think, unless I misunderstand).  Since everyone mentions
envelopes, I'll include that in the mini-console.
Then "unmix", "mute", "reset" buttons, and hide/show
mix-marks option, and voila?  I think the hard part will
be getting the mixer widgets to slide around with the
graph in some reasonable way.


Date: Thu, 6 Mar 1997 22:08:31 +0100 (MET)
From: Ludger Bruemmer <ludi@folkwang.uni-essen.de>
To: Bill Schottstaedt <bil@ccrma.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: snd mix dialog

I like the realtime pitch control, an existing scribt on rt, the visual 
files and the rubberband envelope option on mix but on all mixing 
software I miss a 
reasonable multichannel output routing ability (something like the array 
in fasmix). rt is only capable to run 2 and 1 channel soundfiles and to 
output only 2 chan
and in mix you can route the output either to the 2 front or to the 2 back 
channels.
As the graphical of the sound, the highest priority a soundblock with pitch 
correction (ie longer or shorter) would do the basic thing, like the rt 
window. If there would be some details of the sound visible - 
even better.


ludi

=================================================================
Ludger Bruemmer
Hohenzollernstr. 66
45128 Essen Germany

++ 49 201 787823	Have a nice day!

ludi@zkm.de
ludi@ccrma.stanford.edu
ludi@folkwang.uni-essen.de
==================================================================

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sun, 9 Mar 1997 11:21:42 -0800
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: cmdist@ccrma.Stanford.EDU
Subject: CLM on SGI's: 400% speedup!
Cc: savd@ccrma.Stanford.EDU

[Applies to SGI machines only.]

I just noticed that some clm instruments (for instance, Scott
vanDuyne's piano.ins, when used with a :singleStringDecayRateFactor
as small as 1/10) could easily spend up to 95% in floating-point
exceptions generated by FPU underflow conditions.  Since noone
really cares about underflows in DSP, and since its sometimes
hard to predict them, we might as well flush straight to zero instead.

Example:  Last with-sound example call in piano.ins, at 44.1kHz

  - with FPU exceptions:

    Duration: 10.7501, Last begin time: 0.0000
    Compute time: 15.378, Compute ratios: 1.43 (1.43)

  - with FPU underflow exceptions disabled:

    Duration: 10.7501, Last begin time: 0.0000
    Compute time: 3.803, Compute ratios: 0.35 (0.35)

which corresponds to a 404.36497% speedup!  ;)


What to do:
-----------

  - compile your instrument as usual
  - edit the clm-generated c file:
  - add #include <sys/fpu.h>  to the beginning of the file
  - insert

       union fpc_csr f;

       f.fc_word = get_fpc_csr();
       f.fc_struct.flush = 1;
       set_fpc_csr(f.fc_word);

    right between variable declarations and function body in EVERY
    instrument definition.
  - reload the fasl.

That's admittedly suboptimal, but the system handles exceptions on a
per-object basis (I believe), i.e., disabling exceptions does not work
across so's in ACL.  Ideally, this should be done in some sort of
"main" routine, but so's don't have a "main", so you'll have to put
it in the instrument function itself.  In the CLISP case, Bill could
probably add the code to the beginning of rc's main.

Enjoy,

-Tobias

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sun, 9 Mar 1997 11:31:04 -0800
In-Reply-To: "Tobias Kunze" <tkunze>
        "CLM on SGI's: 400% speedup!" (Mar  9, 11:21am)
References: <9703091121.ZM11989@ulysses.stanford.edu>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: cmdist@ccrma.Stanford.EDU
Subject: Re: CLM on SGI's: 400% speedup!

Forgot to point out:

The FPU code comes courtesy of Chris Pirazzi at Silicon Graphics
and is available via Doug Cook's SGI Audio page at

  http://reality.sgi.com/employees/cook/audio.apps/dev/fp.underflow

-Tobias

Date: Mon, 10 Mar 97 06:01:39 PST
From: bil (To: t@ulysses.Stanford.EDU)
To: t@ulysses.Stanford.EDU
Subject: Re: CLM on SGI's: 400% speedup!
Cc: cmdist

Thanks very much for the underflow code -- I'll look
into making that the default in CLM on the SGI, so
no one will have to edit the CLM output by hand.


Date: Fri, 21 Mar 1997 22:41:02 -0500 (EST)
From: Lawrence Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM/Linux/ACL 4.3 - DAC output howto?

It seems that, "out-of-the-box", CLM isn't setup to output to the
soundcard on my Linux 2.0.x system, using the OSS-Free drivers and the
Allergro CL free distribution CD. By that, I mean that "with-sound" just
gives a "Warning: test.sound NIL" (not sure that that's the exact
message).

By "out-of-the-box", I mean that I simply loaded "all.lisp" into ACL. Is
there something more I need to do on this platform?

I'm hoping that some kind soul will offer some beginning pointers on using
the DAC
output with the CLM/ACL/Linux combination. Probably the documentation
already exists, but I don't know where to look. So just tell me what to
read.

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  

Date: Sun, 23 Mar 1997 21:49:37 -0500 (EST)
X-Sender: lt@westnet.com
To: cmdist@ccrma.Stanford.EDU
From: lt@westnet.com (Larry Troxler)
Subject: CLM/Linux/ACL/OssFree/GUS - Big-endian problem?

Is anyone using CLM on Linux 2.0.x with ACL 4.3, OSS-Free 2.0.0, and a
Gravis Ultrasound? Does it work for you?

The problem I'm having is the dreaded +96db
"SCSCTCTSHSHSHTKTKTKQPQPQRQRKCKCK!!!" from the sound-card. After some
hacking around, I suspect that perhaps big-endian output isn't working on
this combination. If I mangle the code to write the samples in little-endian
form to the .SND file, and set the driver format to little-endian, then it
works.

So what's the deal?

Larry
                  
 --  Larry Troxler  --  lt@westnet.com  --  Patterson, NY  USA   --


Date: Mon, 24 Mar 97 06:18:48 PST
From: bil (To: lt@westnet.com (Larry Troxler))
To: lt@westnet.com (Larry Troxler)
Subject: Re: CLM/Linux/ACL/OssFree/GUS - Big-endian problem?
Cc: cmdist

Apparently the Gravis card can't handle big endian data --
I've never tried one myself.  You can set the output
type with the "data-format" argument to with-sound (in this
case, snd-16-linear-little-endian, or maybe in the
worst case snd-8-mulaw); or set the output format default
(see defaults.lisp).  The card(s) we use here are
happy with big-endian data, as is the Linux driver.
On the earlier problem, I'd need to see the actual
error message, and ideally a stack trace to be able to
say what the problem might be.


Date: Mon, 24 Mar 97 07:26:43 PST
From: bil (To: cmdist)
To: cmdist
Subject: clm/snd news

Jean Laroche fixed a bug in the fft dB display; new
features include an update option in the file menu to re-read
current file from disk; x axis units in the view menu (samples,
etc); scale-by and scale-to added for easier amplitude
changes; 5 or 6 more header types implemented and
MIDI sample dumps translated; also, a netscape-like -remote 
switch.

In clm, c-random for repeatable random number sequences;
Tobias Kunze's floating underflow code for the SGI;
a better run-loop funcall in acl 4.3; through-snd
for clm-to-snd-edited-and-back-to-clm interactions.


Date: Sun, 30 Mar 1997 20:45:57 -0500 (EST)
From: Lawrence Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM beginner's problem with definstrument
		
This is directly from the tutorial, but doesn't work on my Linux/ACL4.3
system. Is there something I need to configure?

USER(17): (definstrument simp (start-time duration frequency amplitude) 
  (multiple-value-bind (beg end) (get-beg-end start-time duration)
    (let ((s (make-oscil :frequency frequency)))                      
      (run                                                                     
       (loop for i from beg to end do                                 
         (outa i (* amplitude (oscil s))))))))                                 


Error: NIL cannot be converted to a pathname.
  [condition type: TYPE-ERROR]
[1] USER(18): 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  
From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sun, 30 Mar 1997 17:59:26 -0800
In-Reply-To: Lawrence Troxler <lt@westnet.com>
        "CLM beginner's problem with definstrument" (Mar 30,  8:45pm)
References: <Pine.SUN.3.95q.970330204335.20917A-100000@westnet.com>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: Lawrence Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: CLM beginner's problem with definstrument

 | This is directly from the tutorial, but doesn't work on my Linux/ACL4.3
 | system. Is there something I need to configure?

Don't evaluate definstrument forms, compile/load them.

 - Save the definition to a file,
 - if you use cm
   - add (in-package cm) to the top, then
   - in Stella, type cl <file>
 - else
   - add (in-package clm) to the top, then
   - type :cl <file>

cf. chapter 12 (?) of the stella tutorial


Content-Type: text/plain
Mime-Version: 1.0 (NeXT Mail 3.3 v118.2)
In-Reply-To: <Pine.SUN.3.95q.970330204335.20917A-100000@westnet.com>
X-Nextstep-Mailer: Mail 3.3 (Enhance 1.3)
From: Juan Carlos Pampin <juan@ccrma.Stanford.EDU>
Date: Sun, 30 Mar 97 18:01:09 -0800
To: Lawrence Troxler <lt@westnet.com>
Subject: Re: CLM beginner's problem with definstrument
Cc: cmdist@ccrma.Stanford.EDU

Hi Larry,
you have to copy the instrument definition code into a text
file and save it as, for example, simp.ins. Then from ACL4.3
do:

:cl simp.ins

After the instrument is compiled and loaded you can call it
using the with-sound macro to generate an output sound file:

(with-sound (:output "~/Juan-snd/Tmp/test.snd")
     (simp 0.0 2.0 440.0 0.707))

This should make your sound card sing a nice A4 tone :)
I've tried this on our Linux/ACL4.3 and is working fine.
JUAN


Date: Sun, 30 Mar 1997 21:18:49 -0500 (EST)
From: Lawrence Troxler <lt@westnet.com>
Subject: Thanks! Re: definstrument problem

On Sun, 30 Mar 1997, Tobias Kunze wrote:

> Don't evaluate definstrument forms, compile/load them.

Thanks, guys! After only a few minutes, I got three responses to my
question. I think this is some kind of record!

I guess everyone is celebrating their Easter sunday by peering into their
monitor screens :-)

Now for the bad news: I'm still having problems with the OSS dac output
that with-sound uses, with my GUS clasic. It stops outputing after about 1
second, and all
subsequent write() calls return immediately with -1. In general, I've been
having a lot of problems with sound output on my Linux 2.0.18 PC with the
i430FX IDE chipset. I've tried both the OSS and the specific GUS driver
written by that guy in .cz . Wavplay works fine, however, so I suppose I
could set that global variable to use wavplay. I'm just wondering why the
code in dacs.c isn't working for me. I've pored over it and everything
looks fine - I wonder if it's something to do with ACL. Well, I don't
expect you guys to troubleshoot what is probably a system configuration
problem, but I thought I'd at least mention it, just in case someone
happened to have run across the same thing.

Larry
  

Date: Mon, 14 Apr 97 08:15:15 PDT
From: bil (To: cmdist)
To: cmdist
Subject: clm/snd changes for good sports

If you're feeling adventurous, the first step toward
the new mixing stuff is implemented in the new snd.
Also I think the control panel expand operation is
less prone to clicks.  In clm, you can call display
in the run loop on arrays (see clm-snd.lisp for an
example).


Date: Mon, 14 Apr 1997 18:17:07 +0200 (GMT+0200)
From: Antti Kaihola <akaihola@siba.fi>
To: Common-Music Mailing-List <cmdist@ccrma.Stanford.EDU>
Subject: CLM and Linux

Hello fellow musicians,

I'm a new subscriber of this list. I'm a student of music from Helsinki, 
Finland. I study the piano at Sibelius-Academy.

I have recently installed Linux (RedHat 4.1), GCL and CLM 2.2.2 (beta I 
think). Is there a fix for Linux for the dac command or dacs utility? 
They don't seem to work or even to be designed for Linux. At the moment I 
have to use MiXViews to listen to the audio files.

I have successfully compiled and listened to a couple of examples: the 
bird instrument and the test instrument, but the singer instrument won't 
compile, but shows an error message and a long excerpt from the source 
code. Is this normal?

Antti.Kaihola@siba.fi  http://www.siba.fi/~akaihola/ 
Sibelius-Academy, Helsinki, Finland

Date: Mon, 14 Apr 97 10:07:47 PDT
From: bil (To: Antti Kaihola <akaihola@siba.fi>)
To: Antti Kaihola <akaihola@siba.fi>
Subject: Re: CLM and Linux
Cc: cmdist

I just tried gcl 2.2 with clm in redhat linux
and the dac function seemed ok -- it played
the sound file anyway.  Everyone seems to have
trouble with playing sound in linux -- we have
a soundblaster card of some sort, and (I think)
audiotrix cards, and I use the 4front drivers.
Beyond that, I'm at sea.  I'd recommend using
acl 4.3 with linux -- it's available free from
Franz (www.franz.com) and is a much better lisp
than gcl.

See the singer instrument code for a comment about
gcl -- if the suggestion there doesn't work, send me
the actual error printout.


Date: Mon, 14 Apr 97 14:46:01 EDT
From: cgw@pgt.com (Charles G Waldman)
To: cmdist@ccrma.Stanford.EDU
Subject: Linux + CLM

Bill wrote:
>Everyone seems to have trouble with playing sound in Linux

Hey, wait, that's not true!! I have *never* had any problem 
with playing sound on my Linux system!  "Dac" works fine for
me.... Details:  Slackware '96; 2.0.29 kernel, OSS/Linux sound
drivers, SoundBlaster "AWE32" card, 64MB RAM ((Lisp sure eats
up a lot of memory!))

I wholeheartedly second Bill's comment about ACL vs. GCL.

The only problem I'm experiencing at all with running CLM onb
Linux is the recurring "rehash-threshhold" bug.  (Hmm, any
new ideas on that one?)

I'd be happy to try to help anyone with Linux-related issues.

	-Charles G. Waldman


Sender: akaihola@ludwig.siba.fi
Date: Mon, 21 Apr 1997 13:34:54 +0300
From: Antti Kaihola <akaihola@siba.fi>
Organization: Sibelius-Academy
X-Mailer: Mozilla 4.0b3C (X11; I; Linux 2.0.27 i586)
To: "cmdist@ccrma.Stanford.EDU" <cmdist@ccrma.Stanford.EDU>
Subject: Re: CLM and Linux

Bill Schottstaedt wrote:
> That looks like a data format problem:  try either
> (with-sound (:data-format snd-8-mulaw) ...) or
> snd-16-linear-little-endian with :type set to
> RIFF-sound-file:  (with-sound (:type RIFF-sound-file
> :data-format snd-16-linear-little-endian) ...)
> These can be set as the defaults (see defaults.lisp
> for examples).

With mulaw .au file type dac actually plays back the sound, but the
output is not continuous - I hear a click and a 1 second pause every 4-5
seconds.

CLM doesn't seem to make valid RIFF files. I tried RIFF-sound-file with
SND-16-linear-little-endian. Dacs didn't like the file and gave an error
-8. Sox said "sorry, this is not a RIFF file" while it reads all Windows
WAV files ok.

I guess I'll have to look for a replacement for the dacs program. Linux
Sound-Playing-HOWTO mentions bplay - is that software any good?

Thanks Bill and Charles for you help! Although I haven't still got it
work, I've started to understand how it works. Are there any more
detailed technical documents about CLM? I couldn't find any.

Antti Kaihola
Sibelius-Academy, Helsinki, Finland


Date: Fri, 2 May 1997 20:44:56 -0400 (EDT)
From: Lawrence Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: How's the next CM version doing?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I'm just wondering whether or not to apply the bug fixes and patches to
the current version and bring it up on Linux, or to hold off and wait a
little while
longer..

So, any news? When's the baby due? How much different will it be? Any
Tcl/Tk interface? Boy or Girl? Do you know what to do for Linux midi, or do
you need more info still? etc.. ...

Just wondering :-)

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Fri, 2 May 1997 19:57:45 -0700
In-Reply-To: Lawrence Troxler <lt@westnet.com>
        "How's the next CM version doing?" (May  2,  8:44pm)
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
To: Lawrence Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: How's the next CM version doing?

Larry-

the whole midi architecture is going to change significantly.   There
is no tcl/tk interface in the plans afaik, but I'd support it for
capella.  I haven't tackled linux midi yet and probably won't for this
release, since many people need oms asap.  but linux midi would be an
easy maintenance release once the midi architecture is in place.

-Tobias


Date: Sat, 3 May 1997 16:44:47 +0200 (GMT+0200)
From: Antti Kaihola <akaihola@siba.fi>
To: cmdist@ccrma.Stanford.EDU
Subject: Re: How's the next CM version doing?

On Fri, 2 May 1997, Tobias Kunze wrote:

> capella.  I haven't tackled linux midi yet and probably won't for this
> release, since many people need oms asap.  but linux midi would be an
> easy maintenance release once the midi architecture is in place.

I have recently installed CM and am still learning it, but I also noticed 
that there is no MIDI support for Linux yet. It would be useful for me.

What is OMS?

What is the correct way to load CM and CLM in ACL4.3/Linux? The only way 
I could get it work was to first load CLM and then compile and dump CM 
and use the saved image. Is it better to use an image, or is it possible 
to run a "clean" ACL and then load CLM and CM separately into it?

Is there any good archive of CM and CLM examples and contributions from 
users, or are the examples included in both packages all there is 
available?

I have noticed that the CSound mailing list is much more active than this 
one. Does this mean that CM and CLM are not as widely used as CSound? I 
have learned CSound, too, but I like the lisp concept much better.
CM and CLM were more difficult to install and are perhaps not available for 
as many platforms as CSound. There are CSound courses here in SACMUS, the 
Sibelius-Academy Computer Music Studio, and they have CM as well but 
don't teach it.

I guess this was too many questions for one message...

  Antti

----
Antti.Kaihola@siba.fi  http://www.siba.fi/~akaihola/ 
Sibelius-Academy, Helsinki, Finland


Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sun, 4 May 1997 20:07:34 -0600
To: cmdist@ccrma.Stanford.EDU
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: How's the next CM version doing?


>So, any news? When's the baby due? How much different will it be? Any

its turned out to be an enormous amount of work; the term ends in a week
and ill work full time on it till its done, hopefully by the end of may. it
will be quite a bit different, ill send a messages saying what all is
included when its ready to go.


Date: Mon,  5 May 97 07:17:05 PDT
From: bil (To: cmdist)
To: cmdist
Subject: clm/snd news

The Snd mixer work is one step further along -- still a
long way to go, but the clm with-sound explode argument
now works (it sets up the notelist result as a giant 
mix in Snd).  Don't try any really large cases yet --
it currently gets cranky if there are more than around
60 mix inputs active.

Also by popular request, the dB fft display finally works
on sonograms and spectrograms, and in the simple case
the fft can be left unnormalized (I tried this in the
sonogram case, but it just washes out all the colors).
And there's a zero-pad variable for the pedagogues
amongst us.

In clm, several long-standing MCL/memory-related bugs
have been fixed.

On the question from Antti Kaihola about Csound --
I believe it has many more users than CLM (this was
a consideration back when I was trying to decide whether
to start from scratch in writing CLM, or simply piggy-back
on CSound).  At this point, I think the two programs are
aimed at different audiences.


Date: Tue, 6 May 1997 12:32:56 -0700
To: cmdist
From: marco trevisani <marco@ccrma.Stanford.EDU>
Subject: CLM -Mac new release

Yesterday release of clm had a bug so it was impossible to get it to run on
the PowerMac (yes i'm talking of the Mac version not UNIX)
I have fixed it and made a clm.sea.hqx (a self extracting version of clm
for Mac). All the file contained in this version are already set with the
right creator CCL2 and the newline option. So what you have to do is just
download it and then make the cw (follow the instructions) and you're ready
to go.

I sent to Bill the application but it was too late, so if you are desperate
about the new clm version with the bug fixed, you can download it from my
ftp pub site:

ftp://ocram.stanford.edu/

or anonymous ftp at ocram.stanford.edu, then cd pub and.. You'll see it.
(it is my PowerMac at home and it takes 4 connection at the time, it wont
be impressively fast the downloading.)
>From tomorrow, i think, it could be in the usual ccrma ftp server.

marco trevisani

Date: Tue, 6 May 1997 14:36:16 -0700
To: cmdist
From: marco trevisani <marco@ccrma.Stanford.EDU>
Subject: clm.sea.hqx...

...is now  also at ftp-ccrma
Sorry for my second message in few hours.

marco


Date: Thu, 08 May 1997 03:07:32 +0200
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 3.01 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: How to describe a piece measure by measure?
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello,

I downloaded CMN a couple weeks ago and I've been playing
around with it.  It's really great!
Thank you, Rick and all who developed it.

Now, here is the introduction to my question: 
I would like to use cmn to print a small (considering the 
compositional quality) piece of music which contains
316 measures for about 25mn and has about 50 different parts
(of course, they never play all together).
The problem is that the piece is too long to consider typing 
every single note by hand in a big call to the `cmn' function.
Moreover, the piece already exists but it is a 142Kb file
in a special format:
it is the input data for a sequencer which I wrote, when I 
was working at Ircam, in PreFORM (a CLOS-like object-oriented 
extension of Le_Lisp).

As you will notice, the concepts are rather innovative ;-)
The sequencer plays an object called a `piece'.
A piece is a sequence of `measures'.
A measure has a `time-signature' and assigns `patterns' to
`instruments'.
A pattern is a list of chords or notes with a pitch, a sequential 
duration, a real duration and a velocity.

Here is a simple example of such a piece (I took off unnecessary 
details (like tempo, transpositions...)):

(def-time-signature ts-5/4 "time signature for mes A and B"
  5 4)

(def-pattern bass-pat-AB "bass pat for mes A and B"
  '(a2 d3   g3 e3)
  '( 2  4    2  2)  ;; delta between notes-on
  '( 2  2    2  2)  ;; durations
  '(90 60   80 60)) ;; velocities

(def-pattern org-pat-A "org pat for mes A"
  '(e4 fs4 a4 b4 g4)
  '( 2   2  2  2  2)  ;; delta between notes-on
  '( 1   1  1  1  1)  ;; durations
  '(80  80 80 80 80)) ;; velocities

(def-pattern org-pat-B "org pat for mes B"
  '(cs5 a4 fs4 d4 b3)
  '( 2   2  2  2  2)  ;; delta between notes-on
  '( 1   1  1  1  1)  ;; durations
  '(80  80 80 80 80)) ;; velocities

(def-measure measure-A "mes A" 'ts-5/4
  '((bass-instrument . bass-pat-AB)
    (org-instrument  . org-pat-A)))

(def-measure measure-B "mes B" 'ts-5/4
  '((bass-instrument . bass-pat-AB)
    (org-instrument  . org-pat-B)))

(def-piece the-piece "a very nice piece ;-)"
 '(measure-A measure-A measure-A measure-A
   measure-B measure-B measure-B measure-B))

As you can see, the organisation is the opposite of cmn's one
(considering the two dimensions: parts and measures).
I chose deliberately this kind of organisation because it is
very convenient for repetitive / minimal music (with many similar
measures or patterns).  

Now, my problem is: how to convert this stuff to cmn?

As I said earlier I don't want to write every note by hand, 
but I would agree to do any kind of automatic or semi-automatic
modification of my file (using sed, awk, yacc, or whatever
(even lisp, of course (common- or emacs-) :-)).

I can imagine (I guess) how to write the functions def-piece,
def-measure and def-pattern in cmn, presumably using the `engorge'
functions, but I would previously like to know if anybody 
has already written something similar to them or if anybody
can give me any hints about the right way to do it or any
example of code that might help.

I don't have clm and don't know precisely what it does.
Would it be useful for my needs?

Thank you in advance for any answer (preferably helpful ;-)
                                                             [jack]
-- 
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Wed, 7 May 1997 20:40:59 -0700
In-Reply-To: Jacques Duthen <duthen@club-internet.fr>
        "How to describe a piece measure by measure?" (May  8,  3:07am)
References: <33712754.36E@club-internet.fr>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Jacques Duthen <duthen@club-internet.fr>, cmdist@ccrma.Stanford.EDU
Subject: Re: How to describe a piece measure by measure?
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


it seems to me as if you could port your def-* forms almost trivially
to cm, from where you can write a cmn score file.  You'll want to
add some cmn objects in the stella structure, if you don't want cm
to guess at the barlines and meters, though.

writing a lisp function to convert from horizontal to vertical representation
doesn't strike me as trivial, however :)  since you'll have to time-sort
events on the fly.


Date: Thu,  8 May 97 06:50:43 PDT
From: bil (To: Jacques Duthen <duthen@club-internet.fr>)
To: Jacques Duthen <duthen@club-internet.fr>
Subject: Re: How to describe a piece measure by measure?
Cc: cmdist

The first thing that occurs to me is that you could use
cmn "sections" for the patterns.  Then the def-piece call
could be used almost as is.  I don't know of any code
already written to do this kind of translation, but it
doesn't look too difficult -- if you have problems, let
me know, and I'll conjure up something.

> I don't have clm and don't know precisely what it does.
> Would it be useful for my needs?

Probably not -- CLM is a synthesis package, in the same
ballpark as Csound.


X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <9705081350.AA24518@ ccrma.Stanford.EDU >
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Thu, 8 May 1997 09:32:24 -0600
To: Jacques Duthen <duthen@club-internet.fr>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: How to describe a piece measure by measure?
Cc: cmdist@ccrma.Stanford.EDU

>it is the input data for a sequencer which I wrote, when I was working at
>...
>Now, my problem is: how to convert this stuff to cmn?

since your sequencer presumably writes midi files from your input, i would
simply generate a midi file, then import that file into cm and write it out
again as a cmn score:
  import pc.midi
  open test.clm ...
  mix pc 0
that will give you a version of your piece with all of the notes converted
to cmn's format. its possible to  add cmn directives to your imported
manterial (measure ect), but i would work directly with cmn once all the
notes have been translated. actually, cmn is very smart about layout, you
may not have to do anything special to get it to add measures/meter changes
the way you want



Date: Sat, 10 May 1997 04:23:02 +0200
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 3.01 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Re: How to describe a piece measure by measure?
References: <v03007802af97a0544b88@[128.174.92.150]>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

First of all, I would like to thank Tobias Kunze, Bill Schottstaedt 
and Rick Taube who took the time to reply: the interaction seems 
better than in certain newsgroups ;-) even with a far french
interlocutor.

Bill Schottstaedt wrote:
> The first thing that occurs to me is that you could use
> cmn "sections" for the patterns.  Then the def-piece call
> could be used almost as is.  I don't know of any code
> already written to do this kind of translation, but it
> doesn't look too difficult -- if you have problems, let
> me know, and I'll conjure up something.

I looked at the 'section' function.  Do you think I could ask my
def-measure function to return a section (with as many staves as
I have instruments in the piece (inserting rests for instruments
who don't play in this section/measure)) and concat all of them?

> > I don't have clm and don't know precisely what it does.
> > Would it be useful for my needs?
> 
> Probably not -- CLM is a synthesis package, in the same
> ballpark as Csound.

OK, now, I realize that my question should have been (don't
answer to the following question): 
"what are cm, clm, cmn and what is their relationship?"
or, at least (don't answer to the following question):
"Would _CM_ be useful for my needs?"  
So, as everything in the different suggestions I received 
was not clear for me, and as some of them mention CM, 
I decided to download it and I am now in the process of RTFMing.  

Clearly CLM is for synthesis and thus is off-topic (english?).

So, considering using or not using CM, the manual says:

   The CMN output syntax
   ---------------------

   The CMN syntax writes postscript output or CMN input from normal
   event data in Common Music. It is not a substitute for working with
   CMN directly to produce manuscript quality output.

   When the CMN output syntax is current the write command creates
   either .eps (postscript) or .cmn (cmn input) files. .eps files
contain 
   a postscript image of our compositional data in common music
notation.
   .cmn files contain input expressions for the CMN program. These
   expressions can then be edited to produce a high quality manuscript.
   There is no backward link from .cmn to .cm files, so its best to
delay
   creating .cmn input files until the composition is finished.

This is a little bit confusing: is CM higher level than CMN or not?
Can CM produce _everything_ needed by CMN (like time signature,
accents, text- -text- and -text, etc.).  I already noticed that
the 'data' function can be used to send time signature to cmn.  
And this is _very_ important:
The piece is mainly a combination of 17/8 and 21/8 (which correspond
to the theme of the Good and the theme of the Bad) with some extra 
variations (when they fight together).  Whatever clever cm or cmn might
be,
I cannot imagine it will recognize these time signatures without being
told!

I don't really need manuscript quality output, but reasonably high
quality would be nice, and I imagine that editing the .cmn file would
be a too hard and long job.  Of course, I realize that using CM gives 
me the benefit to be able to play midi and to produce a midi-file.

Bill Schottstaedt wrote:
> 
> The first thing that occurs to me is that you could use
> cmn "sections" for the patterns.  Then the def-piece call
> could be used almost as is.  I don't know of any code
> already written to do this kind of translation, but it
> doesn't look too difficult -- if you have problems, let
> me know, and I'll conjure up something.

This suggests not to use CM, does it?

What I had in mind with pure CMN was to make some CLOS classes
(pattern, measure, instrument, piece) _without_ using CM,
combined by the def-* macros and a method over piece like this:

(def-method extracts-parts-for-cmn ((self piece) instruments from to)
  "create a cmn object containing the parts for the given INSTRUMENTS
between measure FROM and measure TO")

The question is: should I use or ignore the CM classes to do so?

Tobias Kunze wrote:
> it seems to me as if you could port your def-* forms almost
> trivially to cm, from where you can write a cmn score file.  

This suggests to use CM, does it?  Should I subclass any CM class?
Could you point me to some section of the manual?

> You'll want to add some cmn objects in the stella structure,
> if you don't want cm to guess at the barlines and meters, though.

Tobias, excuse me.  Since I'm not good at understanding english,
I don't get the meaning of what you say, though I have the feeling
it's closely related to my previous question.  Can you elaborate
a little?  As I said the time signature is _very_ important:

> writing a lisp function to convert from horizontal to vertical representation
> doesn't strike me as trivial, however :)  since you'll have to time-sort
> events on the fly.

Hmm.  In the hypothesis to not use CM, I was thinking that my method
extracts-parts-for-cmn would be something like:

(loop for instrument in instruments do
   (setq aStaff (new-staff))
   (loop for measure in (self get-measures from to) do
      ;; Extract pattern played by instrument in this measure
      ;; or get a rest corresponding to the whole measure.
      ;; Add this pattern or rest to the current aStaff.
   )
   ;; Collect the staves in a system.
)

which is not so far from trivial :-)

Do you foresee any difficulties either using or not using CM?

Rick Taube wrote:
> >it is the input data for a sequencer which I wrote, when I was 
> >...
> >Now, my problem is: how to convert this stuff to cmn?
> 
> since your sequencer presumably writes midi files from your input, i would
> simply generate a midi file, then import that file into cm and write it out
> again as a cmn score:
>   import pc.midi
>   open test.clm ...
>   mix pc 0
> that will give you a version of your piece with all of the notes converted
> to cmn's format. its possible to  add cmn directives to your imported
> manterial (measure ect), but i would work directly with cmn once all the
> notes have been translated. actually, cmn is very smart about layout, you
> may not have to do anything special to get it to add measures/meter changes
> the way you want

Argl... there are _many_ reasons why I can't do that:
- PreFORM/Le_Lisp does not run very well under MacOS 7 (Actually, I did
not
  run it since 1989! (though it might be possible (I think)).  And now
  I am too used to MCL to step back to Le_lisp)
- I always wanted to implement a midi file output to my sequencer
  but never got time to do it
- the piece was played using only a DMP7, a RX5, two TX816, a TX802 and 
  a sampler which leads to a lot of program changes to handle the 50 
  virtual synthesizers
- there are "multiple" synthesizers. For example, to get a good piano
sound,
  the same chord is sent to 5 modules of one TX816 (each on a different
  channel), so it would be difficult to build the staves from the
midi-channel.
- each key-on is preceded by a volume change (for mixing purpose)
  this extra information might not be easy to use.
- my sequencer does not output any time signature information

Sorry to bother you again and thanks in advance
-- 
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <3373DC06.450@club-internet.fr>
References: <v03007802af97a0544b88@[128.174.92.150]>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sat, 10 May 1997 07:55:54 -0600
To: Jacques Duthen <duthen@club-internet.fr>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: How to describe a piece measure by measure?
Cc: cmdist@ccrma.Stanford.EDU

>Argl... there are _many_ reasons why I can't do that:
>"Would _CM_ be useful for my needs?"

i suggested cm only if the data were midi. since its not you should work
directly with cmn --  you dont need anything in cm or clm so forget about
these packages. if i were you i would either reimplement your lisp code so
that it produces cmn forms or write some translation functinos that map
over your data structures and do the same.

-rick



Date: Sat, 10 May 1997 11:43:38 -0700 (PDT)
From: Celso Aguiar <aguiar@ccrma.Stanford.EDU>
X-Sender: aguiar@cmn25
To: Bill Schottstaedt <bil@ccrma.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: clm/snd news
In-Reply-To: <9705051417.AA12203@ ccrma.Stanford.EDU >
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Mon, 5 May 1997, Bill Schottstaedt wrote:

> Also by popular request, the dB fft display finally works
> on sonograms and spectrograms, and in the simple case
> the fft can be left unnormalized (I tried this in the

Would it be too much to ask that "% of spectrum" in the 
orientation_popup work with "just fft" option. 
It's so hard to see details of the spectra on a 22Khz range only.
Thanks,

+------------------------------------------------------------+
|Celso Aguiar - aguiar@ccrma.stanford.edu                    |
|CCRMA - Center for Computer Research in Music and Acoustics |
|Stanford University                                         |
+------------------------------------------------------------+


Date: Sun, 18 May 1997 14:44:34 -0400 (EDT)
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: jfhallst@colby.edu (Jonathan Hallstrom)
Subject: CLM on Mac

Dear Common Lisp Music community,

I realize that this is not the most auspicious way to enter the user group,
but...

I can't get CLM to load properly under Macintosh Common Lisp (MCL 4.1).
CLMlib seems to have compiled OK under Code Warrior, but loading all.lisp
into MCL doesn't do anything.  I've been trying to work my way through the
code in all.lisp, and have discovered that the MCL compiler seems to be
trying to find a file called walk.ins which doesn't appear to exist
anywhere in the CLM sources.  My Lisp chops aren't strong enough (yet) to
figure out whether this is in fact what's causing the problem or not.

Is there anyone out there who's gotten CLM going on a PowerMac?  If so, can
you let me know what you did to get it to load properly?

Thanks

Jon Hallstrom



Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sun, 18 May 1997 13:12:45 -0600
To: jfhallst@colby.edu (Jonathan Hallstrom)
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: CLM on Mac
Cc: cmdist@ccrma.Stanford.EDU

hi jon - it should be looking for a file called walk.lisp not walk.ins.
check to see if it is there. if it is, then something else is wrong. how
did you unpack the archive? sometimes people forget to make tar strip line
feeds when untarring, the result is each file has one line, and the result
is that nothing hapeens when it compiles the file.
you can check to see if this is the problem by opening walk.lisp (or any
other lisp file) in the mcl editor  and check that the contents looks
normal, ie its not a sinle line



To: cmdist@ccrma.Stanford.EDU
Date: Sun, 18 May 1997 16:23:01 +0200 (MET DST)
From: Reine Jonsson <ljord@connectum.skurup.se>
X-Sender: root@ReinesDator
Subject: CMN on Linux, font question
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=iso-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE

A half year ago i tried to make CMN working on
my Linux (PC) thing. I could not find any free
fonts and if its possible to use the mac versions
of Petrucci and Sevilla I could not make it work.

I know you can buy the fonts from Adobe but=20
the salesperson here in Sweden could not say that
it would work on linux. If it does not work
on linux its nothing to waste money on, is it?

So to my questions:

Is there a CMN running on a linux-thing?
What fonts?
How to do it?

tia,


Reine J=F6nsson

ljord@connectum.skurup.se       tel: int + 46 414 201 70 =20
http://www.skurup.se/~ljord    fax: int + 46 414 202 81=20


Date: Mon, 19 May 97 09:36:17 PDT
From: bil (To: cmdist)
To: cmdist
Subject: re: linux fonts and CMN

CMN does run in ACL 4.3 under Linux.  The following
installs the Sonata font, but I haven't yet found a
postscript previewer or tried to send the CMN output to
a printer:

cd Sonata.font
cp Sonata /usr/X11R6/lib/X11/fonts/Type1/Sonata.pfa
 
   ;;; this works because the Sonata portion of the directory
   ;;; is actually the same format as the thing Linux calls 
   ;;; a .pfa file

cd /usr/X11R6/lib/X11/fonts/Type1

   ;;; now su root if you can

emacs fonts.dir
add 1 to the first line (in my case I changed 16 to 17)
add this line:

Sonata.pfa -adobe-sonata-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific

   ;;; this is the X form of the font spec

do the same in fonts.scale (this step may not be necessary -- I
omitted it and things seemed to work).

Now if fonts.alias does not exist on the Type1 directory, create
it (i.e. touch fonts.alias), then edit it and add the line:

Sonata -adobe-sonata-medium-r-normal--0-0-0-0-p-0-adobe-fontspecific

   ;;; this creates the alias "Sonata" for the X font spec

now return to your home directory as yourself (not root, I think),
and

xset fp rehash

   ;;; this tells X to update the font path info

Now you should be able to use the Sonata font!  (i.e. xfd -fn Sonata)

Date: Mon, 19 May 1997 10:20:58 -0700 (PDT)
From: Celso Aguiar <aguiar@ccrma.Stanford.EDU>
X-Sender: aguiar@cmn14
To: Bill Schottstaedt <bil@ccrma.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: re: linux fonts and CMN
In-Reply-To: <9705191636.AA08209@ ccrma.Stanford.EDU >
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I've just tried a CMN file in ghostscript/ghostview.
It worked quite fine. I (as root) just had to:

cd Sonata.font
cp Sonata /usr/share/ghostscript/fonts/Sonata.pfa

then (as root) edit the /usr/share/ghostscript/fonts/Fontmap file
to include:

% My font for music

/Sonata                                 (Sonata.pfa)    ;

That line has to go the way it is. Ghostscript/view is very
strict about that. The same about the ; in the end.

>From what I read in its fonts.doc file, ghostscript should
be able to use any Type1 font once it's installed in the system.
Things only worked for me after I actually copyed the .pfa to
ghostscript's font directory.

Hey, Bill, thanks for caring.

+------------------------------------------------------------+
|Celso Aguiar - aguiar@ccrma.stanford.edu                    |
|CCRMA - Center for Computer Research in Music and Acoustics |
|Stanford University                                         |
+------------------------------------------------------------+



Date: Thu, 22 May 1997 02:04:27 +0200
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 3.01 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Bug in CMN: meter does not accept strings
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello!

The doc (cmn.html) says:

<i>meter</i> displays a meter and sets the staff's current meter (for
beaming
decisions and so on).  <i>Numerator</i> and <i>denominator</i> can be
integers,
strings, or symbols.  

Integers and symbols are ok, but strings produce the following error:
> Error: value "\"3+4\"" is not of the expected type number.

I fixed the functions (in cmn1.lisp and cmn4.lisp) which call `num',
but maybe it would be better (safer) to throw away the function `algol+'
and to ask the user to give:
- num, an integer, the real number of beats,
- den, an integer, the information for the duration of a beat.
The function `beats-per-measure' would then just return `num'.
And if the user wants a special numerator, s/he could give it 
with an extra message like this:

(meter 7 8 (numerator "three + four"))

This special numerator would be stored in the meter and 
used by the display functions.  

BTW, this does not provide a way to ask for the meter:
4   3
- + -
4   8

Here are the modified functions:
hth							[jack]

;;; [jack] bug fix of cmn1.lisp
;;; The numerator of a time signature can be a string,
;;; so "~A" is better than "~S".  

(defmethod display ((meter meter-mixin) container score &rest rest)
  (when container
    (setf (box-x0 meter) (box-x0 container))
    (setf (staff-y0 meter) (staff-y0 container)))
  (when (and (or (not (member :just-fooling rest))
		 (not (eq (visible-justification meter) :none)))
	     (not (invisible-matrix-p meter)))
    (let* ((parens (find-if #'(lambda (n) (and (sundry-p n) (eq
:in-parentheses (sundry-name n)))) (marks meter)))
	   (x0 (+ (box-x0 meter) (dxy-dx meter) (if parens .1 0)))
	   (y0 (+ (%staff-y0 meter) (dxy-dy meter))))
      (if (marks meter) (apply #'display-marks meter score rest))
      (when (or (not (meter-size meter))
		(not (zerop (meter-size meter))))
	(if (or (meter-name meter) (eq (meter-style meter) :suppressed))
	    (progn
	      (comment score (format nil "~A" (meter-name meter)))
	      (moveto score x0 (+ y0 (- (half-staff-dy score) .025)))
	      (if (meter-name meter)
		  (show score (if (eq (meter-name meter) :common-time) %commontime
%cuttime))
                  ;; [jack] "~s" doesn't handle string num
		(let ((num-text (format nil "~A" (num meter))))
		  (if (or (not (meter-size meter))
			  (<= (meter-size meter) 1.0))
		      (show score (%%text :letters num-text))
		    (show score (%%text :letters num-text :font-name music-font
:font-scaler (meter-size meter)))))))
            ;; [jack] "~s" doesn't handle string num
	  (let* ((num-text (format nil "~A" (num meter)))
		 (den-text (format nil "~S" (den meter)))
		 (num-len (length num-text))
		 (den-len (length den-text))
		 (num-offset (if (>= num-len den-len) 
				 (if (and (numberp (num meter))
					  (= (num meter) 6))
				     -.0125 0)
			       (* .15 (- den-len num-len))))
		 (den-offset (if (>= den-len num-len)
				 (if (and (numberp (den meter))
					  (= (den meter) 8))
				     .0125 0)
			       (* .15 (- num-len den-len)))))
	    (if (or (not (meter-size meter))
		    (<= (meter-size meter) 1.0))
		(progn
		  (moveto score (+ x0 num-offset) (+ y0 .75))
		  (show score (%%text :letters num-text))
		  (if (not (eq (meter-style meter) :note-head))
		      (progn
			(moveto score 
				(+ x0 den-offset) 
				#+Sonata (+ y0 (- .25 .025)) #+Petrucci (+ y0 .25))
			(show score (%%text :letters den-text)))
		    (let ((ob (quarters-to-text (/ 4 (den meter)) t))) ; 2nd arg ->
stem-down
		      (moveto score x0 (+ y0 .25))
		      (show score (text ob (font-name music-font))))))
	      (if (plusp (meter-size meter))
		  (let ((yup (* (meter-size meter) #+Sonata .215 #+Petrucci .25))
			(ydown (* (meter-size meter) #+Sonata .215 #+Petrucci .23))
			(added-num-offset (* num-offset (meter-size meter)))
			(added-den-offset (* den-offset (meter-size meter))))
		    (moveto score (+ x0 added-num-offset) (+ y0 .5 yup))
		    (show score (%%text :letters num-text :font-name music-font
:font-scaler (meter-size meter)))
		    (moveto score (+ x0 added-den-offset) (- (+ y0 .5 -.025) ydown))
		    (show score (%%text :letters den-text :font-name music-font
:font-scaler (meter-size meter))))))))))))

(defun algol+ (sym)
  (let (nums)
    ;; [jack] (format nil "~s" sym) doesn't handle string num
    (with-input-from-string (str (nsubstitute #\  #\+ (format nil "~a"
sym)))
      (loop for num = (read str nil nil nil)
       while num
       do (push num nums)
       finally (return (apply #'+ nums))))))

(defmethod house ((meter meter) score)
  (declare (ignore score))
  (if (not (invisible-matrix-p meter))
    ;; [jack] "~s" doesn't handle string num
      (let* ((num-text (format nil "~A" (num meter)))
	     (den-text (format nil "~S" (den meter)))
	     (dx-num (text-dx num-text))
	     (dx-den (text-dx den-text))
	     (parens (find-if #'(lambda (n) (and (sundry-p n) (eq
:in-parentheses (sundry-name n)))) (marks meter))))
	(setf (box-x1 meter) (+ (* (max dx-num dx-den) (or (meter-size meter)
1.0)) (if parens .1 0)))
	(setf (center meter) 0)
	(if (not (walls meter)) (setf (walls meter) meter-walls))
	(if (not (fences meter)) (setf (fences meter) meter-fences))
	(if (not (expanders meter)) (setf (expanders meter) meter-expanders)))
    (progn
      (setf (box-x1 meter) 0)
      (setf (center meter) 0))))

;;; [jack] bug fix of cmn4.lisp
;;; To get the numerical value of the numerator,
;;; beats-per-measure is better than num.

(defun staff-engorge (objects)
  (let ((current-clef nil)
	(current-meter nil)
	(current-key nil)
	(new-data nil)
	(local-brace nil))
    (loop for stf in objects do
      ;; at the start of each staff after the first, toss the redundant
set-up stuff
      (let ((stf-data (staff-data stf))
	    (happy t))
	(if (and (not local-brace) (staff-local-brace stf))
          (setf local-brace (copy (staff-local-brace stf))))
	(when (or current-clef current-meter current-key)
	  (loop while happy do
	    (let ((topdat (first stf-data)))
              ;;(setq jd-topdat topdat jd-current-meter current-meter)
              ;;(break)
	      (if (or (bar-p topdat)
		      (and (clef-p topdat) (eq (clef-name topdat) (clef-name
current-clef)))
		      (and (meter-p topdat)
                           (= (den topdat) (den current-meter))
                           ;; [jack] beats-per-measure is better than
num
                           ;;(= (num topdat) (num current-meter))
                           (= (beats-per-measure topdat)
(beats-per-measure current-meter)))
		      (and (key-p topdat) (equalp (signature topdat) (signature
current-key))))
		  (setf stf-data (cdr stf-data))
		(setf happy nil)))))
	(loop for datum in stf-data do
	  (push datum new-data)
	  (if (meter-p datum) (setf current-meter datum)
	    (if (clef-p datum) (setf current-clef datum)
	      (if (key-p datum) (setf current-key datum)))))))
    (setf (staff-data (first objects)) (nreverse new-data))
    (setf (staff-local-brace (first objects)) local-brace)
    (first objects)))

-- 
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

Date: Thu, 22 May 1997 02:07:05 +0200
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 3.01 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: [Q] Can we use twice the same object?
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello,

It seems that the same object cannot be used twice in the same score.
Is it correct?

(let ((pat
       (engorge
        (list (a2 (rq 1)) (d3 (rq 2)) (g3 (rq 1)) (e3 (rq 1))))))
  (cmn
   (output-type :quickdraw)
   (size 18)
   (staff
      bass
      (meter 5 4)
      pat
      pat)))  ;; only one pattern is displayed

Do I have to use a function to produce a new object rather than
to use a variable which always points to the same object?

(defun new-pat ()
  (engorge
   (list (a2 (rq 1)) (d3 (rq 2)) (g3 (rq 1)) (e3 (rq 1)))))

(cmn
 (output-type :quickdraw)
 (size 18)
 (staff
  bass
  (meter 5 4)
  (new-pat)
  (new-pat))))  ;; all the patterns are displayed

Is there any other workaround?

Thanks in advance                                            [jack]

-- 
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|


Date: Thu, 22 May 97 07:22:33 PDT
From: bil (To: Jacques Duthen <duthen@club-internet.fr>)
To: Jacques Duthen <duthen@club-internet.fr>
Subject: Re: Bug in CMN: meter does not accept strings
Cc: cmdist

Thanks very much for the bug fixes!  I'll merge them
into cmn.tar.gz (along with some irregular beat
subdivision changes).  I'll look into implementing
the double meter -- I don't remember tackling this
at all.  

On the engorge example, you do need to copy the
engorged lists -- I suppose I could copy the list
rather than simply splicing it into the output;
your example could be:

(let ((pat
       (engorge
        (list (a2 (rq 1)) (d3 (rq 2)) (g3 (rq 1)) (e3 (rq 1))))))
  (cmn
   (output-type :quickdraw)
   (size 18)
   (staff
      bass
      (meter 5 4)
      (copy pat)
      (copy pat))))

but that's not really any different from calling engorge twice.


Date: Wed, 4 Jun 1997 13:05:35 +0200 (MDT)
From: Anders Vinjar <anders.vinjar@notam.uio.no>
To: cmdist@ccrma.Stanford.EDU
Subject: SND wins 1st. prize in software competition
Mime-Version: 1.0

Congratulations Bill Schottstaedt!

Of interest to readers of this list may be that SND won 1st. prize in
this years software competition - the "Concours" - arranged
simultaneously as the festival of electroacoustic music in Bourges.

The results and the juryists may be gleaned at:

  http://www.gmeb.fr/Sommaire-dir/index2.html

Among the unspoken messages they sent out together with the annoouncement
of the actual price-winners in various categories, is that the SGI bears
a broad share of whats coined good music-software around.

(Among last years winners were Common Music.)

Cheers Bill!

(Cheers to everyone else around as well)

-anders


Date: Wed, 4 Jun 1997 20:57:05 +0200 (MET DST)
X-Sender: assayag@maelzel.ircam.fr
Mime-Version: 1.0
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
To: cmdist@ccrma.Stanford.EDU
From: Gerard Assayag <Gerard.Assayag@ircam.fr>
Subject: beaming

There seems to be a bug in the beaming construct :

(cmn  staff treble
      (meter 3 4 (beaming (list .5 2 .5))) c4 e c4 h c4 e   )

should display an eighth, a half note, and an eighth.  But the half note is
strangely split.

Date: Thu, 5 Jun 1997 10:07:19 +0200 (MDT)
From: Anders Vinjar <anders.vinjar@notam.uio.no>
To: Gerard Assayag <Gerard.Assayag@ircam.fr>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: beaming
In-Reply-To: <l03020902afbb80ce70b4@[129.102.3.61]>
References: <l03020902afbb80ce70b4@[129.102.3.61]>
Mime-Version: 1.0

  Gerard Assayag writes:

   > There seems to be a bug in the beaming construct :

   > (cmn staff treble
   >   (meter 3 4 (beaming (list .5 2 .5))) c4 e c4 h c4 e )

   > should display an eighth, a half note, and an eighth.  But the half
   > note is strangely split.


It seems that youre possibly confusing beams and ties.  The splitted
half-note is made by CMN while trying to figure out how to do the ties in
this measure.  It sets up a 'beatscheme for various meter-types and
split/ties notes together according to that scheme.

Try to set AUTOMATIC-TIES to NIL:

(cmn (automatic-ties nil) staff treble
   (meter 3 4 (beaming (list .5 2 .5))) c4 e c4 h c4 e )


To see the effect of the beaming-list in your example:

(cmn staff treble
   (meter 3 4 (beaming (list .5 2 .5))) c4 e c4 e c4 e c4 e c4 e c4 e)


Good luck!

Anders Vinjar

NICEM - Norwegian Section of ICEM  |  P.O.box 1137 - Blindern
Tlf:  +47-22857973                 |  0317 Oslo
Fax:  +47-22857974                 |  Norway

Date: Fri,  6 Jun 97 09:35:38 PDT
From: bil (To: cmdist)
To: cmdist
Subject: cmn/snd/clm news

Gerard Assayag donated some code to display CMN output
directly on the Mac (see wcmn).  I've merged in Jacques Duthen's
changes, and added some support for double meters.
A new file in cmn, rqq.lisp, makes it easier to
display fancy irregular beat subdivisions. Also a
new function, color -- there's an example in cmn.html.

CLM runs in clisp in FreeBSD now -- thanks to
Borja Marcos.

Grouped mixes in Snd work to some extent (I haven't completed
the browser, but most things work).  Various bugs related
to expressions and region definition fixed.


Sender: root@westnet.com
Date: Tue, 08 Jul 1997 20:32:23 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Graphical display of CM note params?
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi, I was wondering if anyone has done anything to be able to
graphically display event parameters in Common Music threads.

I have in mind something like a crude piano roll notation, or possibly a
better system  where a number of variables can be displayed at once,
coded into various graphic attributes. Yes, a more elaborate system that
allows editing would be nice, but failing that, just a simple crude
graph might be useful. I was thinking of using something like gnuplot,
and writing a lisp function to dump a thread in a suitable format and
run gnuplot on it. But I think that this type of plot is probably not
easily done with gnuplot. For example, it would be nice to be able to
show different parameters by using stems of various lengths and colors
and angles. So I think that a statistics visualisation package would be
better.

The other alternative that I would consider, would be to load lisp2wish,
and  use the tk approach. 

Actually, I realize that my request is really independent of Common
Music; since a general approach would be load ascii data,  which could
just have easily been generated from MIDI files, or Keykit, or whatever.

So, is there anything ready to use in this area? 

LArry -  lt@westnet.com  --  Patterson, NY USA  --

X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <33C2DC16.6C9F09D9@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Wed, 9 Jul 1997 09:12:07 -0600
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Graphical display of CM note params?
Cc: cmdist@ccrma.Stanford.EDU

>I have in mind something like a crude piano roll notation, or possibly a
>better system  where a number of variables can be displayed at once,

i think tobias kunze started something like your second choice on the mac
but gave up on it once he got his sgi. it showed 5 "dimensions" of data,
using x,y,z,color and intensity. his old code assumed midi but of couse
such an editor could be made totally generic.

cm has a gui for its macintosh port including a thread/event editor, an
envelope editor, and (in the next release) a network editor a la max and an
html help facility. the basic problem with interface code that it is not
part of the common lisp standard so it is not portable. however, if gnuplot
is good enough for your purposes, then dumping cm data to such a formatted
file is very easy to do -- that is one of the things the system is designed
for and you could probably implement such an interface in about an hour's
time by defining it as a cm syntax as i did for cmn, csound, clm ... look
at any of the easy syntax implementation files like csound.lisp or
rtmix.lisp or cmn.lisp.  But this solution wont allow you to use a gui to
effect changes in data, for that you really need a windowing system inside
lisp. i am investigating CLX in ACL/Linux, if i can use it that might be a
good solution for all unix ports since clx runs in most lisps. another
solution might be to use the future ACL 5.0 release that will provide an
identical lisp/gui api across all platforms (if i understand the rumors
correctly) but of course that would force you to purchase their lisp.


From: Philip Lewis <lewispsc@leland.Stanford.EDU>
Subject: CM on Mac
To: cmdist@ccrma.Stanford.EDU
Date: Wed, 9 Jul 1997 08:30:33 -0700 (PDT)
X-Mailer: ELM [version 2.4 PL25]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Is a continuing interest in cm on the Mac going to mean keeping up
with the upgrades to MCL? A subscription is rather expensive, but
becomes much more so at the end of this week.

Philip Lewis


Date: Wed,  9 Jul 97 09:09:45 PDT
From: bil (To: cmdist)
To: cmdist
Subject: realtime (midI!) in clm

It's a bit premature I suppose, but I can't resist:
there's a new version of clm on the ccrma ftp site,
xclm.tar.gz that has support for realtime controls
and readback, including midi; the controls can affect
both lisp and the clm instruments; there are examples
of things like controlling compex FM with sliders
while watching the output waveform and an fft thereof,
or controlling an on-going "compositional algorithm".
Currently only works on the SGI in ACL, but I'm
in the process of extending it to other setups.
This new clm (which will soon(?) replace the old one)
is not backwards compatible with the old version --
you'll need to recompile all your instruments.  This
is first such change in about 2 years, so I hope
it's not an intolerable burden.  Other changes are
listed in the clm news section of initmus.lisp.


From: Philip Lewis <lewispsc@leland.Stanford.EDU>
Subject: Re: CM on Mac (fwd)
To: cmdist@ccrma.Stanford.EDU
Date: Wed, 9 Jul 1997 15:47:31 -0700 (PDT)

Forwarded message:
>From taube@uiuc.edu Wed Jul  9 08:50:16 1997
Date: Wed, 9 Jul 1997 10:54:30 -0600
To: Philip Lewis <lewispsc@leland.Stanford.EDU>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM on Mac

>Is a continuing interest in cm on the Mac going to mean keeping up
>with the upgrades to MCL? A subscription is rather expensive, but
>becomes much more so at the end of this week.
>
>Philip Lewis

cm will remain on the mac as long as there is a mac and ive already got cm
running in mcl 4.1.  i may buy an mcl distribution license so that i can
put cm images on several macs here for teaching; i believe the same license
would allow others to download the cm app for free. this image would run a
compiled version of the cm kernel but would not have the the mcl
development environment (aka the compiler) available to the user so the app
wouldnt be suitable for working with clm.


Date: Thu, 10 Jul 97 06:02:53 PDT
From: bil (To: cmdist)
To: cmdist
Subject: Re: CM on Mac (fwd)

On the compiler (MCL) and clm, I believe that
its macro expansion is smart enough that clm
doesn't actually require the lisp compiler --
that requirement came about back in the 56000
days when I needed the compiler in acl 3.1.20
and perhaps gcl (I forget) to force the instrument
building macros to be fully expanded.
The C compiler, however, would still be needed.

X-Sender: taube@ux1.cso.uiuc.edu
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Thu, 10 Jul 1997 09:48:05 -0600
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM on Mac (fwd)

>From: bil@ccrma.Stanford.EDU (Bill Schottstaedt)
>On the compiler (MCL) and clm, I believe that
>its macro expansion is smart enough that clm

thats great! my clm image currently complains if i load a .ins file -- it
would be really nice if an instrumnt source file could be loaded and clm
would auto generate/compile the c code if it needed to otherise just load
the shared library along with the lisp instrument wrapper!

>From: Philip Lewis <lewispsc@leland.Stanford.EDU>
>Is a continuing interest in cm on the Mac going to mean keeping up
>with the upgrades to MCL? A subscription is rather expensive, but

I realize I didnt answer this correctly. The software will always support
the current MCL 4.0.  Earlier versions of MCL may or may not work.


Sender: dplace@shore.net
Date: Thu, 10 Jul 1997 11:42:16 -0400
From: David Place <dplace@entuit.com>
Organization: Enhanced Intuition, Inc.
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.30 i486)
To: Common Music <cmdist@ccrma.Stanford.EDU>
Subject: DACs for computer music workstation

Hi,

Please forgive if this is a FAQ.  I would like to 
configure a new computer to be well set up for
computer music using CLM.  It will be a pc running
linux. I am having some difficulty deciding about
audio output.  On my current computer, I have a 
Sound Blaster 16 which is quite noisy.  The DACs
seem to pick up a lot of RFI from the processor.
What would you use to get clean audio output?  Shouldn't
the DACs be shielded from RFI?

Thanks in advance.
-- 
David F. Place
President, Enhanced Intuition, Inc.
mailto:dplace@entuit.com


X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <33C502D8.2D474AA6@entuit.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Thu, 10 Jul 1997 11:14:25 -0600
To: David Place <dplace@entuit.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: DACs for computer music workstation
Cc: cmdist@ccrma.Stanford.EDU

I just struggled with sound cards on my new dell running linux. (I have a
AWE-32 (SoundBlaster) and it is also very noisy...)  The _easiest_ way to
configure your machine is to download free trial OSS drivers from
http://www.4front-tech.com. Installation is a snap -- if you like them then
you pay $30 to get a full license.  4Front supports a host of soundcards so
you can reconfigure things if you purchase a better card. There are also
free versions of the OSS drivers, look on their page for links to OSS/Free

Date: Sun, 13 Jul 1997 19:32:51 +0200
From: "Teruyoshi. Kamiya" <terossi@iua.upf.es>
Reply-To: terossi@iua.upf.es
Organization: Orta.
X-Mailer: Mozilla 3.01Gold [ja] (Macintosh; I; PPC)
Mime-Version: 1.0
To: taube@uiuc.edu
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: CM on Mac
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit

> From: Rick Taube <taube@uiuc.edu>

> I realize I didnt answer this correctly. The software will always support
> the current MCL 4.0.  Earlier versions of MCL may or may not work.

It sounds MCL 3.2 or a coming native 68x MCL is no longer supported.
Is there any hope for non-power-mac-cm-follower like me ?

Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sun, 13 Jul 1997 14:51:39 -0600
To: terossi@iua.upf.es
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: CM on Mac
Cc: cmdist@ccrma.Stanford.EDU


>It sounds MCL 3.2 or a coming native 68x MCL is no longer supported.
>Is there any hope for non-power-mac-cm-follower like me ?

yes, 3.2 is really the same release as 4.0 (just non-ppc) so CM will
continue to run in it.



Sender: ludi@folkwang.uni-essen.de
Date: Sun, 13 Jul 1997 21:59:47 +0200
From: Ludger Bruemmer <ludi@folkwang.uni-essen.de>
X-Mailer: Mozilla 4.01b6C [en] (X11; I; IRIX 5.3 IP22)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: new xclm with gui controled realtime interaction
X-Priority: 3 (Normal)

Wow Bil,

I tried your examples with the new gui-controled realtime clm out and it
really sounds and looks great. What a new experience to clm users. Thats
a big step forward.

ludi

=================================================================
Ludger Bruemmer      Hohenzollernstr. 66      45128 Essen Germany
tel/fax ++ 49 201 787823  
http://www.folkwang.uni-essen.de/~ludi               
                                 ludi@folkwang.uni-essen.de
==================================================================

From: letz@rd.grame.fr
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
X-Mailer: Eudora F1.5.1
Date: Wed, 16 Jul 1997 12:40:37 +0100
To: cmdist@ccrma.Stanford.EDU
Subject: Problems with CLM on PowerMac

Hi,

I have downloded and installed Common Lisp Music on a Powermac 7100/66
using MCL 4.1 and CodeWarrior Pro.

I have successfully recompiled the ClmLib shared library, the CLM lisp
image and some instruments. The CLM <---> CodeWarrior Pro communication
works correctly.

When i try to use some intruments using the WITH-SOUND macro i get somtimes
the following error:

Error: FLOATING-POINT-OVERFLOW detected
>        performing / on (6.283185307179586 1.0610087896E-314)
> While executing: CCL::%DOUBLE-FLOAT/-2!

or CLM crash and nothing happens?

Any idea?

Thanks

Stephane Letz

GRAME, 9 rue du Garet, 69001 Lyon, France
tel : +33 4 72 07 37 00, fax :  +33 4 72 07 37 01
Web : http://www.grame.fr



Date: Wed, 16 Jul 97 05:53:11 PDT
From: bil (To: letz@rd.grame.fr)
To: letz@rd.grame.fr
Subject: Re: Problems with CLM on PowerMac
Cc: cmdist

My vague recollection is that this bug (the floating
point overflow) is caused by PPCExceptionEnabler --
this file is in the system init files and needs to
be removed (it's not compatible with MCL 4.1).


From: letz@rd.grame.fr
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
X-Mailer: Eudora F1.5.1
Date: Thu, 17 Jul 1997 13:20:30 +0100
To: cmdist@ccrma.Stanford.EDU, bil@ccrma.Stanford.EDU
Subject: Problems with snd-duration

Hi,

I've tried to re-compile and use some Common Lisp Music instruments defined
in the CLM tutorial at:
http://ccrma-www.stanford.edu/CCRMA/Software/clm/compmus/compmus-tutorials.h
tml

but some (for example the  "simple-readin")  do not work anymore because
the "CLM-GET-DURATION" function is not defined anymore.

I've found that the "CLM-GET-DURATION" must be replaced by the new
"SND-DURATION"
i have modified the instrument source and re-compiled but then the
instrument does not work correcly and my machine crash.

How must the modification must be done? is it enough to replace
"CLM-GET-DURATION" by
"SND-DURATION"? Are the new source of these inytruments available somewhere?

Another question : Can instruments be contolled in real-time on a PowerMac?

Thanks

Stephane Letz

PS: CLM is very fun to use!

(I use MCL 4.1 and CW Pro on a PowerMac 9600 604/200Mhz )

GRAME, 9 rue du Garet, 69001 Lyon, France
tel : +33 4 72 07 37 00, fax :  +33 4 72 07 37 01
Web : http://www.grame.fr



Date: Thu, 17 Jul 97 06:04:59 PDT
From: bil (To: letz@rd.grame.fr)
To: letz@rd.grame.fr
Subject: Re: Problems with snd-duration
Cc: cmdist

simple-readin doesn't crash for me, but I bet the problem
is in the line:

(if two-chans (outb i out-sig-b) (outb i out-sig-a))

which should be:

(if two-chans (outb i out-sig-b))

CLM has changed a lot since Nicky wrote that tutorial,
so I should work through it and update it.  I think
most of the instruments can also be found in the clm
documentation (clm.html) or in the example instruments
in clm.tar.gz -- I test these before every "release"
so they're up-to-date.


Date: Thu, 17 Jul 1997 19:01:49 +0300 (EEST)
In-Reply-To: <9707161253.AA29088@ ccrma.Stanford.EDU >
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: Victor Sovetov <victor@comcon.kiev.ua>
Subject: Problems with cmn on PowerMac

Hi!

I have problems with compiling cmn om PowerMac (trial version of MCL 4.1).
Please, help me, if you can!

--victOr

Date: Sat, 19 Jul 1997 19:50:05 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: piano.lisp troubles
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I'm tried to use the physically-modelled piano instrument included with
the CLM distribution, but I couldn't
get it to work correctly.

I am trying to run it from CM, and in case it matters, the CLM version I'm
using is not the recently announced one, but the one that had been on the
site before it.

The problem is that what ever parameters I use, and how ever many notes I
play,  I seem to always get a single note which seems to always use the
same parameters regardless of what I specify. I'm running on Linux.

Also, it seems like the print method isn't quite working right.

Here's a short log:


Number of ps to create: (<cr>=*) 3
Slots and values: 
New object position: (<cr>=T1) 

Stella [T1]: list
T1:
     1. #<(P#<Printer Error @ #x8773d7a> 
     2. #<(P#<Printer Error @ #x8773eaa> 
     3. #<(P#<Printer Error @ #x8773fca> 

Stella [T1]: set * rhythm 3

Stella [T1]: set * dur 3

Stella [T1]: list
T1:
     1. #<(P#<Printer Error @ #x8773d7a> 
     2. #<(P#<Printer Error @ #x8773eaa> 
     3. #<(P#<Printer Error @ #x8773fca> 

Stella [T1]: run
Run objects: (<cr>=T1) 
Start time offset:(<cr>=None) 

Stella [T1]: list
T1:
     1. #<(P :START 0)> 
     2. #<(P :START 3)> 
     3. #<(P :START 6)> 

Stella [T1]: set * keynum (+ 60.0 @)

Stella [T1]: list
T1:
     1. #<(P :START 0 :KEYNUM 60.0)> 
     2. #<(P :START 3 :KEYNUM 61.0)> 
     3. #<(P :START 6 :KEYNUM 62.0)> 

Stella [T1]: open test.snd
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 1
Srate: 22050.0
Reverb: None
 0.000...


Also, a more general CM/CLM question: Whatever instruments I load while in
CM, I always have to do a "make-instance" before I can create instances in
threads. Otherwise, I get a message about the class not being finalized
(or something like that). Is this normal?



--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Sun, 20 Jul 1997 00:18:26 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM/CLM: dealing with list/array parameters?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


I've got another question relating to the use of CLM instruments from
within CM.

Often CLM definstrument arguments are lists or arrays (envelope data, for
example). If this data is specified either directly from CM, using "set x
some-env-param '( ....", or by setting a global and naming that global in
the set comand, then the "list" command dumps the entire list or array,
which is not what I want for long sequences. This is especially true for
the case where all instances of a given parameter in a thread are the same
sequence.
 
I think that what I would like to be able to do, is to define global
sequences and be able to use their (quoted?) symbol name in the
instrument, which
would be both "list"ed only as the symbol name and not its contents, and
also evaluated at mix time by the instrument and not at set time.

I think that I need to modify the instruments' code to do this, correct?
If what I'm suggesting makes sense, then what is an appropriate lisp
utterance to make this work? I think what I would want to do for
sequence
arguments is this: , either use the argument as is if it is already a
sequence, or, if a symbol, evaluate it, assuming the symbol refers to a
sequence.

I realize that this is more of a general lisp question, since I'm sure
this kind of thing comes up again and again.  Also, I may be barking up
the wrong tree as to what I think I want to do.

So I'd like to hear from you guys!

Larry



--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sat, 19 Jul 1997 22:56:26 -0700
In-Reply-To: Larry Troxler <lt@westnet.com>
        "CM/CLM: dealing with list/array parameters?" (Jul 20, 12:18am)
References: <Pine.SUN.3.96.970720000056.16320A-100000@westnet.com>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: CM/CLM: dealing with list/array parameters?
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


if i understand right, you'll have to pass a symbol to your instrument
and delay its evaluation, for instance:

 (defins foo (start dur &key (env '*default-env*))
   (etypecase env
     (symbol (if (symbol-value env)
                 (setf env (symbol-value env))
               (progn
                 (warn "foo: env parameter ~a does not have a value. ~
                        reverting to *default-env*")
	         (setf env *default-env*))))
     (list ))		; do nothing
   ...)

this works of course only for global symbols, but I guess you wouldn't
want to look at random local bindings anyway.

Hope that helps,

-Tobias


Date: Sun, 20 Jul 97 10:21:25 -0700
From: <hkt@ccrma.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Subject: Re: CM/CLM: dealing with list/array parameters?
Cc: cmdist@ccrma.Stanford.EDU

>the set comand, then the "list" command dumps the entire list or array,
>which is not what I want for long sequences. This is especially true f

CM uses the Common Lisp generic function PRINT-OBJECT to print slot values when an object is "listed".  The default PRINT-OBJECT does basic slot value printing without any special case code for arrays and so on. But you can specify your own PRINT-OBJECT methods for your instrument classes.  CM has a macro FORMATTING-SLOTS that may be useful in this context, it documented in the dictionary.

hope this helps.

Date: Sun, 20 Jul 97 10:28:28 -0700
From: <hkt@ccrma.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Subject: Re: piano.lisp troubles
Cc: cmdist@ccrma.Stanford.EDU

>The problem is that what ever parameters I use, and how ever many notes I
>play,  I seem to always get a single note which seems to always use the

this seems like a bug to me but i cant really tell from your description.
please send me a simple test case;.

    1. #<(P#<Printer Error @ #x8773d7a>

this is definately a bug!

>I always have to do a "make-instance" before I can create instances in
>threads. Otherwise, I get a message about the class not being finalized
>(or something like that). Is this normal?

it only happens in acl's clos implementation, i believe i have already fixed this in the upcoming release.

Date: Sun, 20 Jul 1997 20:13:27 +0200
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 2.0 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Re: CM/CLM: dealing with list/array parameters?
References: <9707201721.AA05130@cmn20.Stanford.EDU>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

hkt@ccrma.Stanford.EDU wrote:
> 
> >the set comand, then the "list" command dumps the entire list 
> >or array, which is not what I want for long sequences. 
> 
> CM uses the Common Lisp generic function PRINT-OBJECT to print
> slot values when an object is "listed".  The default PRINT-OBJECT
> does basic slot value printing without any special case code for
> arrays and so on. But you can specify your own PRINT-OBJECT methods 
> for your instrument classes.  CM has a macro FORMATTING-SLOTS that
> may be useful in this context, it is documented in the dictionary.
> 
> hope this helps.

Maybe you could try the simpler:
(setq *print-length* 10)
and see if it responds to your question.
hth                                                          [jack]
-- 
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

Date: Mon, 21 Jul 1997 22:01:47 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM note subclass that sprouts algos?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


Well, hopefully the following code and comments will make it clear what I
would like to do.  Basically, I have a function that sprouts an algorithm,
and rather than need to call this function from a "mute", I would like to
actually make a subclass of note, with slots corresponding to the function
args, that when scheduled, calls the functionto kick of
the algo for each 
note instance. Is this desirable, possible, etc.. ?

- - - - -

 ;; I did this because (random 0) crashes on Linux ACL! Why??
(defun zrand (x) (if (zerop x) 0 (random x)))

;;; Splat, although implemented as an algorithm, is something that I would
;;; like to treat conceptually as an instrument that I can insert in 
;;; threads, etc, using stella, using the function args as slots. How?
(defun splat (s-time spec density amp-spread start-spread f1 f1-spread f2
f2-spread f-shape r-spread)  
  (let ((a 0.3))
    (sprout  
     (algorithm
      nil
      badd  ;; a modified version of "badd" in the CLM dist., actually
      (start s-time
       length density  ; Xemacs indents this wrong, thinking "start" is a
func
       fuzz 100
       pvibamp 0
       rvibamp r-spread
       partials spec
       freq-env-base f-shape)
      (setf rhythm (zrand start-spread))
      (setf dur 6)
      (setf ampfun (list 0 0  2 1  3 1 5 0))
      (setf frequency f1)
      (setf amplitude a)
      (setf a (* a amp-spread))
      (let ((f-final (+ (- ( / f2 f1) 1) (clm-random f2-spread))))
	(setf freqfun (list 0 (clm-random f1-spread) 
			    2 f-final 5 f-final)))
      ))))

   
;;; This a testbed algo that tries out a variety of parameters for
;;; my "splat" instrument. Now, if I can make "splat" a true note class,
;;; that when run/mixed,  calls (splat) to sprout an algorithm, then I
;;; could do things like make this a generator to save output, ormanipulate
;;; splat parameters in threads via stella, etc.
(mute 
 m1 (length 20 rhythm 9)
 (let ((pset (item (items (b3 c4) (items (b3 c4) (b4 c5) (b2 c3) (f4 e4)
(c4 c5) in heap) in sequence))))
 (splat 
  time					;start
  (item (items (1 1) (items (1 1 2 0.2 3 0.4) (1 1) (1 1 1.5 1 2.5 1) ( 1
1) (1 1) in heap) in sequence)) ;spec
  (item (items 1 (items 3 6 10 20  in heap) in sequence)) ;density
  (item (items 0.5 (items 0.7 0.3 0.1 in heap) in sequence)) ; amp-spread
  (item (items 0 (items 0 0 0 0.2 1 in heap) in sequence)) ; start-spread
  (pitch (first pset))				; f1
  (item (items 0 (items 0 0 0.03 0.1 1.0 in heap) in sequence)) ; spread
  (pitch (second pset))				;f2
  (item (items 0 (items 0 0 0 0.03 0.1 1.0 in heap) in sequence)) ; spread
  (item (items 1 1 0.4 0.7 1.6 in heap)) ; freq env shape
  (item (items 0 (items 0 0 0 0.01 0.1 in heap) in sequence)) ;r-spread
  )
 ))
 
--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Sender: root@westnet.com
Date: Fri, 25 Jul 1997 21:42:40 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: CM: formatting-slots vs. (defobject .. :parameters)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I am currently looking through the CM code, to try to figure out how to
implement my idea of an object that when run, will use its slots as
parameters to a function call, that will, when scheduled, call this
function which will typically sprout an algorithm. In other words, this
would sort of be a "meta-instrument". Well, I've already mentioned this
on the list before. I think that what I need to do, is to inherit this
class from rhythmic-element, or possibly "note", and have it's
write-event method call the function that will sprout the algorithm.

In the course of trying this approach, I found that I have some
questions in general, regarding implementing the print-object methods
for classes inherited from rhythmic-element or note:

1) There is a macro, "formatting-slots", (which Rick or Tobias brough to
my attention), that seems to be a nice workhorse for easily generating
print methods. But, this does not seem to be actually used much in the
existing note subclasses. I am assuming that this is because this macro
was written after most of the note subclasses were already in place. Is
this assumption correct?

2) I am not sure how the :parameters feature of defobject is used.
Again, it seems that some note subclasses use this, and some do not.
Again, I assume that this is simply an order-of-development issue. Is
this right? Also, I'm not quite sure I understand the intended
distinction between a class slot, and a class slot that is also defined
as a parameter. The only actual use of this I see, is in the
print-object methods of the classes that use parameter lists. Only slots
that are also parameters get printed. Is this the only current/intended
distinction?

3) How does the formatting-slots macro, and the parameter hash table,
inter-relate. It seems to me that their usage is currently orthoganal,
in the sense that formatting-slots doesn't know about parameters, but
just prints all the slots.

Assuming my above assumptions are correct, how about:

a) A macro like formatting-slots, that instead of printing all the
slots, prints only the defined parameters.

b) What about some kind of default print-object method somewhere in the
class heirarchy? If I use defobject to inherit from 
"rhythmic-element", for example, then print-object only prints the
address of the object and not the slot values. I think it would be more
usefull to print all of the slot values (or parameters?) by default.
 

-- Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

Date: Wed, 30 Jul 1997 20:43:19 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: exponential curves in CLM?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

How can I generate simple exponential curves in CLM? By this I mean
something like y = A + B * exp( -t/tau).  

I was hoping that the :base
parameter for envelopes would do this, but from some quick experiments, I
suspect that this doesn't result in exponential segments, but
rather power
segments of the form y = A + B * t ^ n. (I also think this is the case,
because if not, I don't see where the time-constant could be specified).
The documentation for the env generator is very unclear on this
(hint-hint).


I know I can use the "one-pole" filter for this (for example, feeding a
step-wise envelope in to the one-pole), if I do the math myself and
compute the coefficients based on the desired time-constant and sampling
rate.

But I'd first like to ask if I'm missing something, since I'm a bit
surprised if something like this isn't already available?
Otherwise, what is the common way of approximating exponential amplitude
decays?

Regards

Larry
 
 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Thu, 31 Jul 97 06:30:29 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: exponential curves in CLM?
Cc: cmdist

exp(n) is e^n, where e is 2.718 or thereabouts.

Date: Fri,  1 Aug 97 08:07:10 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: exponential curves in CLM?
Cc: cmdist

Perhaps this instrument will make it more obvious what
the exponential envelope segments are doing:

(definstrument expins (dur frq amp)
  (let* ((nd (floor (* dur sampling-rate)))
         (o1 (make-oscil frq))
	 (o2 (make-oscil frq))
	 (j nd)
	 (maxdiff 0.0)
         (zv (make-env '(0 1 1 0) :base 2.718)))
    (run* (maxdiff)
     (loop for i from 0 to nd do
       (let* ((vala (* amp (env zv) (oscil o1)))
	      (valb (* (/ amp (- 2.718 1.0)) (- (exp (/ j nd)) 1.0) (oscil o2)))
	      (valc (abs (- valb vala))))
       (outa i vala)
       (outb i valb)
       (if (> valc maxdiff) (setf maxdiff valc))
       (decf j))))
    (print maxdiff)))

#|
(with-sound (:channels 2 :statistics t) (expins 1.0 440.0 .5))
8.189678e-5 test.snd: 
  Duration: 1.0001, Last begin time: 0.0000
  Compute time: 0.338, Compute ratio: 0.34
  OutA max amp: 0.499 (near 0.001 secs)
  OutB max amp: 0.499 (near 0.001 secs)
|#


Sender: root@westnet.com
Date: Wed, 06 Aug 1997 23:24:14 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: Bill Schottstaedt <bil@ccrma.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: exponential curves in CLM?
References: <9708011507.AA01409@ ccrma.Stanford.EDU >
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Yep, just as I suspected, it doesn't seem like make-env can be used  to
get a natural ringing, eponential ( e^-kt ) decay. What your code does
is something different. You can see this if you plot the output in snd.
The shape is obviously wrong - it doesn't approach zero slope as it
approaches zero, and it has more curvature towards the end of the decay,
rather then towards the begginning.


My idea of feeding the env output to a one-pole filter has the drawback
that it will wreck the attack of the envelope, if it is at all fast. I
guess what I really want is some way to follow the rising slopes of the
envelope exactly, but applying the exponential decay to the decaying
slope.

Any ideas on how this is accomplished, or am I not communicating or
understanding clearly? A naturally decaying envelope seems like such a
common thing, I think I might still be misunderstanding something. 


Bill Schottstaedt wrote:
> 
> Perhaps this instrument will make it more obvious what
> the exponential envelope segments are doing:
> 
> (definstrument expins (dur frq amp)
>   (let* ((nd (floor (* dur sampling-rate)))
>          (o1 (make-oscil frq))
>          (o2 (make-oscil frq))
>          (j nd)
>          (maxdiff 0.0)
>          (zv (make-env '(0 1 1 0) :base 2.718)))
>     (run* (maxdiff)
>      (loop for i from 0 to nd do
>        (let* ((vala (* amp (env zv) (oscil o1)))
>               (valb (* (/ amp (- 2.718 1.0)) (- (exp (/ j nd)) 1.0) (oscil o2)))
>               (valc (abs (- valb vala))))
>        (outa i vala)
>        (outb i valb)
>        (if (> valc maxdiff) (setf maxdiff valc))
>        (decf j))))
>     (print maxdiff)))
> 
> #|
> (with-sound (:channels 2 :statistics t) (expins 1.0 440.0 .5))
> 8.189678e-5 test.snd:
> 
>   Duration: 1.0001, Last begin time: 0.0000
>   Compute time: 0.338, Compute ratio: 0.34
>   OutA max amp: 0.499 (near 0.001 secs)
>   OutB max amp: 0.499 (near 0.001 secs)
> |#

--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

Date: Fri,  8 Aug 97 05:53:32 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: exponential curves in CLM?
Cc: cmdist

you can get as close as you like to a given exponential (i.e.
thinking in terms of e^(-kt)) by fiddling with the base:

(definstrument expins (dur k m)
  (let* ((nd (floor (* dur sampling-rate)))
	 (j 0)
	 (maxdiff 0.0)
         (zv (make-env (list 0 1 1 (exp (- k))) :base m)))
    (run* (maxdiff)
     (loop for i from 0 to nd do
       (let* ((vala (env zv))
	      (valb (exp (* (- k) (/ j nd))))
	      (valc (abs (- valb vala))))
       (outa i vala)
       (outb i valb)
       (if (> valc maxdiff) (setf maxdiff valc))
       (incf j))))
    (print maxdiff)))

;;; (with-sound (:channels 2) (expins 1 .5 1.65))
;;; 7.2419643e-5
;;; or
;;; (with-sound (:channels 2) (expins 1 5 148))
;;; 1.3118982e-4
;;;
;;; that is, let the envelope "base" be (exp k)



Sender: root@westnet.com
Date: Sat, 09 Aug 1997 22:32:17 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Problem with CM "archive"
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I got some strange results when attempting to use the stella "archive"
command.  What follows is my note class definition, a stella listing,
and the resulting archive file, which to me doesn't seem right.

----> The instrument (CLM): 

(definstrument expand-sound (beg dur file &optional (orig-beg 0.0)
(exp-amt 1.0) (ohop 0.02) (acc 1) (len .08) (sca 0.6))
  (let* ((f (open-input file))
         (st (floor (* beg sampling-rate)))
         (new-dur (or dur (- (snd-duration f) orig-beg)))
         (two-chans (and (stereo f) (stereo *current-output-file*)))
         (exA (make-expand :file f :start-time orig-beg
:expansion-amount
exp-amt
                           :output-hop ohop :accuracy acc
:segment-length len
                           :segment-scaler sca))
         (exB (if two-chans (make-expand :file f :start-time orig-beg
:expansion-amount exp-amt
                                         :output-hop ohop :accuracy acc
:segment-length len 
                                         :segment-scaler sca :channel
:B)))
         (nd (+ st (floor (* sampling-rate new-dur)))))
    (run
     (loop for i from st to nd do
       (outa i (expand exA))
       (if two-chans (outb i (expand exB)))))
    (close-input f)))

<------


----> Some instances that I want to archive 

stella [Top-Level]: go t1

Focus:     T1
Type:     Thread
Status:   Normal
Objects:  4
Start:    unset

Stella [T1]: list
T1:
     1. #<(EXPAND-SOUND 0.05 60 "/p2/usr/local/cm/sound/fx34.wav" 3.0 10
0.001 1 0.05 0.2)> 
     2. #<(EXPAND-SOUND 0.05 60 "/p2/usr/local/cm/sound/fx34.wav" 3.0 10
0.001 1 0.05 0.2)> 
     3. #<(EXPAND-SOUND 0.05 60 "/p2/usr/local/cm/sound/fx34.wav" 3.0 10
0.001 1 0.05 0.2)> 
     4. #<(EXPAND-SOUND 0.05 60 "/p2/usr/local/cm/sound/fx34.wav" 3.0 10
0.001 1 0.05 0.2)> 

Stella [T1]: show 1

Object:    #<(Expand-Sound 0.05 60 "/P2/Usr/Local/Cm/Sound/Fx34.Wav" 3.0
10 0.001 1 0.05 0.2)>
Type:     Expand-Sound
Status:   Normal
Position: 1 in T1
Slots:
          Container  #<THREAD: T1>
          Flags      0
          Time       0
          Rhythm     0.05
          Instrument unset
          Sca        0.2
          Len        0.05
          Acc        1
          Ohop       0.001
          Exp-Amt    10
          Orig-Beg   3.0
          File       "/p2/usr/local/cm/sound/fx34.wav"
          Dur        60

<----------

----> And this is what ended up in the archive file :

((LAMBDA (%CONTAINER%)
   (ADD-OBJECTS
      (LIST (MAKE-OBJECT 'EXPAND-SOUND 'RHYTHM 0.05 NIL 0.2 :LEN 0.05
NIL 1
                         NIL 0.001 NIL 10 NIL 3.0 :FILE
                         "/p2/usr/local/cm/sound/fx34.wav" NIL 60)
            (MAKE-OBJECT 'EXPAND-SOUND 'RHYTHM 0.05 NIL 0.2 :LEN 0.05
NIL 1
                         NIL 0.001 NIL 10 NIL 3.0 :FILE
                         "/p2/usr/local/cm/sound/fx34.wav" NIL 60)
            (MAKE-OBJECT 'EXPAND-SOUND 'RHYTHM 0.05 NIL 0.2 :LEN 0.05
NIL 1
                         NIL 0.001 NIL 10 NIL 3.0 :FILE
                         "/p2/usr/local/cm/sound/fx34.wav" NIL 60)
            (MAKE-OBJECT 'EXPAND-SOUND 'RHYTHM 0.05 NIL 0.2 :LEN 0.05
NIL 1
                         NIL 0.001 NIL 10 NIL 3.0 :FILE
                         "/p2/usr/local/cm/sound/fx34.wav" NIL 60))
      %CONTAINER% NIL :COPY-FIRST
     NIL)
   %CONTAINER%)
 (MAKE-OBJECT '(THREAD T1) 'ID 'T1))

< ----------


What's with all the NILs ???

Larry

 

--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

Date: Tue, 12 Aug 1997 14:57:04 -0700 (PDT)
From: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: Problem with CM "archive"
In-Reply-To: <33ED2831.70EF5387@westnet.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


> What follows is my note class definition, a stella listing,
> and the resulting archive file, which to me doesn't seem right.

i don't see a defobject, but assume that's where something's
wrong.

-Tobias

Date: Tue, 12 Aug 1997 23:02:35 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM-struct access problem
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


Any idea what is going wrong with the following instrument (test.lisp)?

(definstrument test (start dur)
  (let ((f (make-array 3)))
    (declare (type (array smpflt) f))
    (loop for i below 3 do
	  (setf (aref f i) (make-one-pole 0.9 -0.1)))
    (run
     (loop for i below 3 do
	   (setf (smpflt-y1 (aref f i)) 1.0)))))


This gives my a gethash error - here's what happens :


Allegro CL 4.3 [Linux/X86; R1] (12/11/96 1:33)
Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA.  All Rights
Reserved.

;; Starting socket daemon and emacs-lisp interface...
;; Optimization settings: safety 1, space 1, speed 1, debug 2.
;; For a complete description of all compiler switches given the current
;; optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).

[changing package from "COMMON-LISP-USER" to "COMMON-MUSIC"]
CM(1): :cl test.lisp
;;; Compiling file test.lisp
; Writing "/p2/usr/local/cm/clm_lnxacl_TEST.c"
; Compiling "/p2/usr/local/cm/clm_lnxacl_TEST.c"
; Creating shared object file "/p2/usr/local/cm/clm_lnxacl_TEST.so"
; Compiling (:INTERNAL (:TOP-LEVEL-FORM "test.lisp" 1) 0)
; Compiling TEST
; Compiling   (:INTERNAL TEST 0)
; Compiling   (:INTERNAL TEST 1)
; Compiling   (FLET TEST CLM::LOAD-IO_C)
; Compiling   (FLET TEST CLM::LOAD-REAL-ARRAY_C)
; Compiling   (:INTERNAL TEST 2)
; Compiling   (:INTERNAL TEST 3)
;  Note: Closure (:INTERNAL TEST 2) will be stack allocated.
;  Note: Closure (FLET TEST CLM::LOAD-REAL-ARRAY_C) will be stack
allocated.
;  Note: Closure (:INTERNAL TEST 0) will be stack allocated.
; Compiling TEST0
;;; Writing fasl file test.fasl
Warning: No IN-PACKAGE form seen in test.lisp.  (Allegro Presto will be
         ineffective when loading a file having no IN-PACKAGE form.)
;;; Fasl write complete
Warning: While compiling these undefined functions were referenced:
         |clm_lnxacl_test2|.
; Fast loading test.fasl
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_TEST.so.
 0: (MAKE-HASH-TABLE :TEST #<Function EQUAL> :REHASH-THRESHOLD 0.65)
 0: returned #<EQUAL hash-table with 0 entries @ #x8aadb52>
CM(2): (stella)
Hang on a second...

Type ? for help.

Stella [Top-Level]: new thread t1
New object position: (<cr>=Top-Level) 

Stella [Top-Level]: go t1

Focus:     T1
Type:     Thread
Status:   Normal
Objects:  0
Start:    unset

Stella [T1]: (make-instance 'test)
#<(TEST unset unset)>
Stella [T1]: new test 1
Slots and values: rhythm 1 dur 1
New object position: (<cr>=T1) 

Stella [T1]: open test.snd
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 1
Srate: 22050.0
Reverb: None
 0.000...
Error: GETHASH: `NIL' is not of the expected type `HASH-TABLE'
  [condition type: TYPE-ERROR]

Restart actions (select using :continue):
 0: abort current note.
 1: Return to Top-Level.
 2: Exit Top-Level.
[1] CM(3): :zoom
Evaluation stack:

   (ERROR TYPE-ERROR :DATUM ...)
 ->(GETHASH SMPFLT NIL)
   (CLM::ALLOCATE-ANY_C
      #<smpflt: a0: 0.9, a1: NIL, a2: NIL, b1: -0.1, b2: NIL, x1: 0.0, x2:
0.0, y1: 0.0, y2: 0.0>
      (27 3) ...)
   (CLM::ALLOCATE-ANY_C
      #(#<smpflt: a0: 0.9, a1: NIL, a2: NIL, b1: -0.1, b2: NIL, x1: 0.0,
x2: 0.0, y1: 0.0, y2: 0.0>
        #<smpflt: a0: 0.9, a1: NIL, a2: NIL, b1: -0.1, b2: NIL, x1: 0.0,
x2: 0.0, y1: 0.0, y2: 0.0>
        #<smpflt: a0: 0.9, a1: NIL, a2: NIL, b1: -0.1, b2: NIL, x1: 0.0,
x2: 0.0, y1: 0.0, y2: 0.0>)
      (27 3) ...)
   (TEST :UNKNOWN :UNKNOWN)
   ((METHOD WRITE-EVENT (CLM-NOTE CLM-SOUND-FILE)) :UNKNOWN :UNKNOWN)
   ((METHOD WRITE-EVENT (CONTAINER EVENT-STREAM)) #<SCORE: Scratch-Score>
                                                  #<File: "test.snd">)
   ((METHOD WRITE-EVENT :AROUND (MERGE EVENT-STREAM)) #<SCORE:
Scratch-Score>
                                                      #<File: "test.snd">)
   [... SYS::GSGC-SET-PROTECT ]
   (WRITE-EVENT :UNKNOWN :UNKNOWN)

... more older frames ...
[1] CM(4): 



--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --

Date: Wed, 13 Aug 97 07:02:37 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: CLM-struct access problem
Cc: cmdist

You've hit a clm bug that I think is fixed in the
current version of clm.  I managed to wipe out my
change-log files for the last several months, so
I can't provide any details.

But hold off on copying the new clm -- I just decided
to change that smpflt stuff (it still has leftovers
from the 56000 days).


Date: Wed, 13 Aug 97 09:49:08 -0700
From: <hkt@ccrma.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Subject: Re: Problem with CM "archive"
Cc: cmdist@ccrma.Stanford.EDU

>I got some strange results when attempting to use the stella "archive"
>command.  What follows is my note class definition, a stella listing,

i tested with your definstrument and archiving works fine in the upcoming release. there are a number of cm/clm improvements, for example the ability to create clm objects that have no corresponding instrument, ie "wrappers" for use with generic clm instruments) i hope to be able to make this release within the next 10 days.

Date: Wed, 13 Aug 1997 13:22:29 -0500
From: Bob Falesch <raf@interaccess.com>
Reply-To: raf@interaccess.com
X-Mailer: Mozilla 4.01 [en] (WinNT; I)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Chicago users?
X-Priority: 3 (Normal)
References: <9708131649.AA12691@cmn1.Stanford.EDU>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Greetings all;

Are there any CM  users in the Chicago area?

Regards,
  --Bob Falesch


Date: Thu, 14 Aug 97 07:06:30 PDT
From: bil (To: cmdist)
To: cmdist
Subject: noisy soundcards in linux, etc

There were some questions earlier about soundcards in
Linux related mainly to the background noise; I recently
got a linux system going with a Soundblaster 64 and
after goofing around with the sound drivers, found
that I could reduce the noise a lot by turning off
the various "mixer" inputs, and turning the various
"outputs" up to full volume -- for some reason OSS
defaults in this regard look like random numbers.
See the new clm functions mic-volume and line-volume,
and the smarter volume (and in snd, the function
clear-inputs).  Also the function describe-soundcard.
I'd be very interested in others' experience with
these settings.

Other changes since my last general news report:
power-envs in clm (a suggestion of Anders Vinjar),
much work on the linux sound stuff (dax, record, etc),
pause/continue playback in Snd.


Date: Thu, 14 Aug 1997 20:56:42 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Setting up new CLM for Linux/WAV
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hmm, seems like there's some differences in the new CLM resulting in my
defaults.lisp customizations not working anymore, and I was wondering if
you might have a quick answer.

Here's what happens (hopefully it won't be too confusing to follow).
The main problem is that CLM says it can't write 16-bit linear to a RIFF
sound file. And I'd like to ask, why the #$%#$!  not!!! :-)
It had no problems doing so before ;-)

here we go (the following session has been post-edited with comments):

:Starting image `/p2/usr/cm/cm'
  with no arguments
  in directory `/LOC/'
  on machine `localhost'.

Allegro CL 4.3 [Linux/X86; R1] (12/11/96 1:33)
Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA.  All Rights
Reserved.

;; Starting socket daemon and emacs-lisp interface...
;; Optimization settings: safety 1, space 1, speed 1, debug 2.
;; For a complete description of all compiler switches given the current
;; optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).

[changing package from "COMMON-LISP-USER" to "COMMON-MUSIC"]
CM(1): :cl lt
; Fast loading lt.fasl
Warning: *SOUND-PLAYER*, :VARIABLE was defined in ./defaults.lisp and is
now
         being defined in /p2/usr/local/cm/lt.lisp
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_RC-TEST.so.
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_EXPINS.so.
CM(2): ;; "lt.lisp" does some customizations, which I repeat below.
;; the following are the clm overrides I'm using:
(defvar *sound-player* 
    #'(lambda (nam &rest rest)
	(declare (ignore rest))
	(excl:run-shell-command
	 (concatenate 'string "wavplay " nam))))

(setq file-buffer-size (* 1024 1024))
(setq *clm-trace* nil)

(setf default-sound-file-name "test.wav")
;; actually I end up using test.snd because of CM confusion - see below.
(setf default-sound-file-type RIFF-sound-file)

Warning: *SOUND-PLAYER*, :VARIABLE was defined in /p2/usr/local/cm/lt.lisp
and
         is now being defined at the top level
*SOUND-PLAYER*
CM(3): CM(3): 1048576
CM(4): NIL
CM(5): CM(5): "test.wav"
CM(6): 2
CM(7): CM(7): (stella)
Hang on a second...

Type ? for help.

Stella [Top-Level]: open test.snd
Stream: #<File: "test.snd">
Stella [Top-Level]: open test.wav
Error: Can't determine stream class for "test.wav".

;; ^ That's why I use test.snd even though I want a wav file.
;; Maybe Rick knows what the problem is here?

Restart actions (select using :continue):
 0: Return to Top-Level.
 1: Exit Top-Level.
[1] CM(8): :tl

Stella [Top-Level]: open test.snd
Stream: #<File: "test.snd">
Stella [Top-Level]: ;; I don't know why CM doesn't know about WAV files,
;; but that's why I've been using test.snd, even though it actually
;; gets written as a WAV (RIFF) file. This worked ok with the previous
;; CLM.
Stella [Top-Level]: cl my-badd ; Just some arbitrary instrument
; Fast loading /p2/usr/local/cm/my-badd.fasl
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_BADD.so.

Stella [Top-Level]: new badd 1
Slots and values:  ;; irrelevant
New object position: (<cr>=Pasteboard) top-level

Stella [Top-Level]: list
Top-Level:
     1. #<(BADD 1 1 440 0.2)> 

Stella [Top-Level]: mix
Mix objects: 
Mix objects: top-level
Start time offset:(<cr>=None) 
CLM/RIFF unsupported sound data format type: 1
Warning: CLM can't write 16-bit linear data into a RIFF sound file
;;;; ^^^ BUT YOU COULD BEFORE!!!^^^
File: test.snd
Channels: 1
Srate: 22050.0
Reverb: None

;;; and then the lisp session either hangs or returns to the prompt.


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Fri, 15 Aug 97 04:49:12 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: Setting up new CLM for Linux/WAV
Cc: cmdist

You want snd-16-linear-little-endian for RIFF output.
Something must have changed in your init files, because
this part of CLM hasn't changed (and the error is correct --
there's a little used RIFX format, but in wave/RIFF there
is no provision for big endian shorts).

Date: Sun, 17 Aug 1997 11:50:57 -0500
From: Charles Shehadi <gotham@write.org>
Reply-To: gotham@write.org
X-Mailer: Mozilla 4.01 (Macintosh; I; PPC)
Mime-Version: 1.0
To: cmdist <cmdist@ccrma.Stanford.EDU>
Subject: changing only velocity
X-Priority: 3 (Normal)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello all:

Once you've sent a note to the synthesizer...

(midi-write-message (make-note-on 1 pitch velocity))

is there any way to change the velocity without creating a new note-on?

I'd like to have a note get progressively louder over a period of time.  I
tried sending alot of new note-on messages with larger values for velocity,
but I get an attack for each of the new notes, and it doesn't sound smooth.

Any help would be appreciated.

-Charlie

Also... is there any way to change the attack and decay settings for an
instrument in general midi?

Date: Sun, 17 Aug 1997 14:43:16 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: Charles Shehadi <gotham@write.org>
Cc: cmdist <cmdist@ccrma.Stanford.EDU>
Subject: Re: changing only velocity
In-Reply-To: <33F72BF0.6953063D@write.org>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Sun, 17 Aug 1997, Charles Shehadi wrote:

> Hello all:
> 
> Once you've sent a note to the synthesizer...
> 
> (midi-write-message (make-note-on 1 pitch velocity))
> 
> is there any way to change the velocity without creating a new note-on?

No. This is the way the MIDI spec works. Velocity is part of the MIDI
note-on message.  

What you want to send is key aftertouch messages (also called polyphonic
aftertouch or key pressure). Or channel aftertouch, if your synth doesn't
do anything with poly aftertouch.

Larry

> 
> Also... is there any way to change the attack and decay settings for an
> instrument in general midi?
> 

I don't know if general MIDI has assigned controllers for attack and
decay, but I really don't think it would.

But maybe your synth has controllers or sys-ex messages assigned for this.
Look in the manual.

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Sun, 17 Aug 1997 14:01:17 -0700 (PDT)
From: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Cc: Charles Shehadi <gotham@write.org>, cmdist <cmdist@ccrma.Stanford.EDU>
Subject: Re: changing only velocity
In-Reply-To: <Pine.SUN.3.96.970817143855.3270A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


> What you want to send is key aftertouch messages (also called polyphonic
> aftertouch or key pressure). Or channel aftertouch, if your synth doesn't
> do anything with poly aftertouch.

or, as a last resort channel volume control messages (or
expression, or ...), although they affect the whole channel, mind
you.


> I don't know if general MIDI has assigned controllers for attack and
> decay, but I really don't think it would.

it hasn't.


Date: Sun, 17 Aug 1997 17:10:54 -0500
From: Charles Shehadi <gotham@write.org>
Reply-To: gotham@write.org
X-Mailer: Mozilla 4.01 (Macintosh; I; PPC)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Re: changing only velocity
X-Priority: 3 (Normal)
References: <Pine.SUN.3.96.970817143855.3270A-100000@westnet.com>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Larry:

thanks for answering...

To Larry, Rick, Tobias and anyone else:

I saw you posted an email message a while back asking if anyone had any code
for graphically visualizing cm data.

I've got similar interests, but I come from a background in visual arts...I'm
getting a masters at the School of Visual Arts in New York.  I'm not a
composer, but, using Common Music, I'm developing a program where visual
artists can draw with a pressure sensitive digitizing tablet (or mouse) and
get musical feedback from their drawings.  

The drawing space is set up as an x - y axis where y is pitch and x is time. 
You can vary the volume of your tones by changing the thickness of the lines,
and you change the instrument by choosing a color.

You can either "perform" in real-time, painting "Jackson Pollack" style by
building up layers of brush strokes, or you can "compose" by creating lines
and playing them back later, either left-to-right, or in whatever order you like.

You can copy your lines/melodies by cutting and pasting, transpose them by
dragging them, scale, rotate, flip vertically/horizontally, etc. with a few
clicks of a mouse.

I guess it's the opposite of what you're looking for, but I thought I'd start
a conversation going.  Right now it's more of an "experience" for visual
artists than a serious tool for composition, but I'd like to develop it
further.  If composers would use a system like this, I'd like to add features
that would make it more useful for them.

Would anyone be interested in using a system like this?  (is anyone in New York?)

-Charlie

Sender: lud@folkwang.uni-essen.de
Date: Mon, 18 Aug 1997 22:33:44 +0200
From: Ludger Bruemmer <ludi@folkwang.uni-essen.de>
X-Mailer: Mozilla 4.01b6C [en] (X11; I; IRIX 5.3 IP22)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: acl 4.3.1
X-Priority: 3 (Normal)
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit

Hi Bil

I tried to compile clm with the new acl 4.3.1 and it died with this
script.
Should I (we) better continue to work with the 4.3 or is it just a minor
problem?

As well I thought: what do you think about to publish the text of the
*clm-news* variable in a text file on the ftp site, so that if one wants
to get the new source, it would possible to check if the improvements of
clm concerns the used plattform or contain desired aspects?


ludi



;;; Writing fasl file /snd/local/clm/initmus.fasl
;;; Fasl write complete
;   Fast loading /snd/local/clm/initmus.fasl
;;; Compiling file /snd/local/clm/defaults.lisp
;;; Writing fasl file /snd/local/clm/defaults.fasl
;;; Fasl write complete
;   Fast loading /snd/local/clm/defaults.fasl
;   Foreign loading /snd/local/clm/libclm.so.
Error: loading library #p"/snd/local/clm/libclm.so" caused the
       following error:

        2917:/usr/local/bin/cl: rld: Fatal Error: unresolvable symbol in
/snd/local/clm/libclm.so: lisp_call

Restart actions (select using :continue):
 0: retry the load of /snd/local/clm/libclm.so
 1: skip loading /snd/local/clm/libclm.so
 2: retry the load of /snd/local/clm/all.lisp
 3: skip loading /snd/local/clm/all.lisp
[1] USER(4): :zo
Evaluation stack:

   (ERROR "loading library ~s caused the following error:~%  ~a"
          #p"/snd/local/clm/libclm.so" ...)
 ->(FF::DLFCN-LOAD-SHARED-OBJECT-FILE #p"/snd/local/clm/libclm.so")
   (LOAD "/snd/local/clm/libclm.so")
   (EVAL (LOAD #))
   (LOAD "/snd/local/clm/all.lisp")
   (TPL:TOP-LEVEL-READ-EVAL-PRINT-LOOP)
   (TPL:START-INTERACTIVE-TOP-LEVEL
      #<BIDIRECTIONAL-TERMINAL-STREAM [initial terminal io] fd 0/1 @
        #x10081152>
      #<Function TOP-LEVEL-READ-EVAL-PRINT-LOOP> ...)
[1] USER(5): 
-- 
_________________________________________________________
|===================================\====================|
|  Ludger Brümmer                    \                   |
|  Hohenzollernstr. 66                \                  |
|  45128 Essen - Germany               \                 |
|  tel&fax: +49 (0)201 787823           \                |
|  e-mail: ludi@folkwang.uni-essen.de    \               |
|  http://www.folkwang.uni-essen.de/~ludi \              |
|__________________________________________\_____________|
============================================\============

Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: fft-gain
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 19 Aug 1997 15:03:26 +0200
Lines: 8
X-Mailer: Gnus v5.3/Emacs 19.31


I wonder what the rules of thumb are for scaling input & output to the
fft routine in CLM.  My friend here tells me that this scaling normally
is taken care of inside the routines - whether in the fft or in the
inverse-fft.  Any guidelines?


Anders Vinjar

Date: Tue, 19 Aug 1997 21:20:57 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: piano.ins problems in CM (again)
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Ok, you may remember that I reported problems with using the piano.ins
in the CLM distribution, on Linux ACL with CM and CLM loaded.

I have now tried this with the current CLM in pub/lisp, and I still have
the problem. However, I made one discovery: While mixing to a .snd file
directly (in CM) doesn't work (just plays a single note with all the wrong
parameters); If I mix to a CLM score ("test.clm"), then everything sounds
ok. (*)

I just thought I'd throw this out, in case Rick or someone else can easily
guess what the problem is. Otherwise, I think I'm getting familiar enough
with this that I can problem debug it on my own. So, there is no need to
spend a lot of time, unless you want to :-)

(*) Well, everything sounds _almost_ ok. I don't hear the contribution of
the tip jar which is sitting on the piano. Sometimes, when there are drink
spills on the piano, the tip jar is able to slide around and sometimes
vibrates audibly. I think that with about 10 more parameters, we should be
able to model this :-)

Regards

Larry

P.S. I almost forgot: Here's a CM session log:
==============================================================
Starting image `/p2/usr/cm/cm'
  with no arguments
  in directory `/LOC/'
  on machine `localhost'.

Allegro CL 4.3 [Linux/X86; R1] (12/11/96 1:33)
Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA.  All Rights
Reserved.

;; Starting socket daemon and emacs-lisp interface...
;; Optimization settings: safety 1, space 1, speed 1, debug 2.
;; For a complete description of all compiler switches given the current
;; optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).

[changing package from "COMMON-LISP-USER" to "COMMON-MUSIC"]
CM(1): :cl lt
; Fast loading lt.fasl
Warning: *SOUND-PLAYER*, :VARIABLE was defined in ./defaults.lisp and is
now
         being defined in lt.lisp
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_RC-TEST.so.
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_EXPINS.so.
CM(2): ;; ^^ load some customizations, etc.

CM(2): :cl my-piano
; Fast loading my-piano.fasl
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_P.so.
CM(3): ;; ^^ really just a copy of clm/piano.ins.

CM(3): (stella)
Hang on a second...

Type ? for help.

Stella [Top-Level]: (make-instance 'p) ; to get around ACL bug.

#<(P#<Printer Error @ #x8a6932a>
Stella [Top-Level]: "^^ THere's one problem :-)"
"^^ THere's one problem :-)"
Stella [Top-Level]: new thread t1 *top-level*

Stella [Top-Level]: go t1

Focus:     T1
Type:     Thread
Status:   Normal
Objects:  0
Start:    unset

Stella [T1]: new p 2
Slots and values: rhythm 1 duration 1.1
New object position: (<cr>=T1) 

Stella [T1]: set 1 keynum 50

Stella [T1]: set 2 keynum 52

Stella [T1]: show 1

Object:    #<(P#<Printer Error @ #X8a6b412>
Type:     P
Status:   Normal
Position: 1 in T1
Slots:
          Container                     #<THREAD: T1>
          Flags                         0
          Time                          unset
          Rhythm                        1
          Instrument                    unset
          Unacordagain-Table            NIL
          Unacordagain                  NIL
          Drypedalresonancefactor-Table NIL
          Drypedalresonancefactor       NIL
          Soundboardcutofft60-Table     NIL
          Soundboardcutofft60           NIL
          Pedalenvelopet60-Table        NIL
          Pedalenvelopet60              NIL
          Pedalresonancepole-Table      NIL
          Pedalresonancepole            NIL
          Sustainpedallevel-Table       NIL
          Sustainpedallevel             NIL
          Drytapampt60-Table            NIL
          Drytapampt60                  NIL
          Drytapfiltcoefcurrent-Table   NIL
          Drytapfiltcoefcurrent         NIL
          Drytapfiltcoeftarget-Table    NIL
          Drytapfiltcoeftarget          NIL
          Drytapfiltcoeft60-Table       NIL
          Drytapfiltcoeft60             NIL
          Releaseloopgain-Table         NIL
          Releaseloopgain               NIL
          Singlestringpole-Table        NIL
          Singlestringpole              NIL
          Singlestringzero-Table        NIL
          Singlestringzero              NIL
          Singlestringdecayrate-Table   NIL
          Singlestringdecayrate         NIL
          Stiffnesscoefficient-Table    NIL
          Stiffnesscoefficient          NIL
          Detuning3-Table               NIL
          Detuning3                     NIL
          Detuning2-Table               NIL
          Detuning2                     NIL
          Strikeposition-Table          NIL
          Strikeposition                NIL
          Softgain-Table                NIL
          Softgain                      NIL
          Loudgain-Table                NIL
          Loudgain                      NIL
          Softpole-Table                NIL
          Softpole                      NIL
          Loudpole-Table                NIL
          Loudpole                      NIL
          Singlestringdecayratefactor   NIL
          Strikepositioninvfac          NIL
          Longitudinalmode              NIL
          Pedalpresencefactor           NIL
          Stiffnessfactor-Table         NIL
          Stiffnessfactor               NIL
          Detuningfactor-Table          NIL
          Detuningfactor                NIL
          Amp                           NIL
          Release-Time-Margin           NIL
          Pedal-Down                    NIL
          Strike-Velocity               NIL
          Keynum                        50
          Duration                      1.1

Stella [T1]: show 2

Object:    #<(P#<Printer Error @ #X8a6b532>
Type:     P
Status:   Normal
Position: 2 in T1
Slots:
          Container                     #<THREAD: T1>
          Flags                         0
          Time                          unset
          Rhythm                        1
          Instrument                    unset
          Unacordagain-Table            NIL
          Unacordagain                  NIL
          Drypedalresonancefactor-Table NIL
          Drypedalresonancefactor       NIL
          Soundboardcutofft60-Table     NIL
          Soundboardcutofft60           NIL
          Pedalenvelopet60-Table        NIL
          Pedalenvelopet60              NIL
          Pedalresonancepole-Table      NIL
          Pedalresonancepole            NIL
          Sustainpedallevel-Table       NIL
          Sustainpedallevel             NIL
          Drytapampt60-Table            NIL
          Drytapampt60                  NIL
          Drytapfiltcoefcurrent-Table   NIL
          Drytapfiltcoefcurrent         NIL
          Drytapfiltcoeftarget-Table    NIL
          Drytapfiltcoeftarget          NIL
          Drytapfiltcoeft60-Table       NIL
          Drytapfiltcoeft60             NIL
          Releaseloopgain-Table         NIL
          Releaseloopgain               NIL
          Singlestringpole-Table        NIL
          Singlestringpole              NIL
          Singlestringzero-Table        NIL
          Singlestringzero              NIL
          Singlestringdecayrate-Table   NIL
          Singlestringdecayrate         NIL
          Stiffnesscoefficient-Table    NIL
          Stiffnesscoefficient          NIL
          Detuning3-Table               NIL
          Detuning3                     NIL
          Detuning2-Table               NIL
          Detuning2                     NIL
          Strikeposition-Table          NIL
          Strikeposition                NIL
          Softgain-Table                NIL
          Softgain                      NIL
          Loudgain-Table                NIL
          Loudgain                      NIL
          Softpole-Table                NIL
          Softpole                      NIL
          Loudpole-Table                NIL
          Loudpole                      NIL
          Singlestringdecayratefactor   NIL
          Strikepositioninvfac          NIL
          Longitudinalmode              NIL
          Pedalpresencefactor           NIL
          Stiffnessfactor-Table         NIL
          Stiffnessfactor               NIL
          Detuningfactor-Table          NIL
          Detuningfactor                NIL
          Amp                           NIL
          Release-Time-Margin           NIL
          Pedal-Down                    NIL
          Strike-Velocity               NIL
          Keynum                        52
          Duration                      1.1

Stella [T1]: open test.snd srate 44100 channels 2
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 2
Srate: 44100.0
Reverb: None

Stella [T1]: " only heard one note, which doesn't sound right anyway"
" only heard one note, which doesn't sound right anyway"
Stella [T1]: open test.clm
Stream: #<File: "test.clm">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
Play file test.clm? (<cr>=Yes) 
File: /p2/usr/local/cm/test.clm
Channels: 1
Srate: 22050.0
Reverb: None
; Loading ./test.clm

Stella [T1]: (cat "test.clm")
;;; Common Music output: 19-Aug-97 19:43:19
(P :START 0 :DURATION 1.1 :KEYNUM 50)
(P :START 1 :DURATION 1.1 :KEYNUM 52)
0
Stella [T1]: " ^^ Doing it this way, I hear both notes and it sounds like
a piano, even!"
" ^^ Doing it this way, I hear both notes and it sounds like
a piano, even!"
Stella [T1]: 
--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Tue, 19 Aug 1997 18:38:12 -0700 (PDT)
From: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: piano.ins problems in CM (again)
In-Reply-To: <Pine.SUN.3.96.970819210416.21927A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


I've reported the problem 'couple of times and finally given up.

It is absolutely necessary for a clm instrument to have a
standard, non-keyword/optional, etc. <start> parameter as their
first argument, if it is to work with cm.  cm relies on passing
time information by position.

Thus, rewrite

  (definstrument (p :language :c :c-options "-c -O3") 
    (&key
     (start 0.0) 
  ...)

as

  (definstrument (p :language :c :c-options "-c -O3") 
    start
    (&key
  ..)


-Tobias

Date: Tue, 19 Aug 1997 22:04:39 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: typo in piano.ins fix?
In-Reply-To: <Pine.SGI.3.96.970819183110.9610C-100000@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Thanks, Tobias! It looks like I was lucky and caught you on-line!
Now it works, except for a slight detail:

On Tue, 19 Aug 1997, Tobias Kunze wrote:
> Thus, rewrite
> 
>   (definstrument (p :language :c :c-options "-c -O3") 
>     (&key
>      (start 0.0) 
>   ...)
> 
> as
> 
>   (definstrument (p :language :c :c-options "-c -O3") 
>     start
>     (&key
>   ..)
> 
> 
> -Tobias

Now I have a chance to correct an expert :-)

I think you misplaced a parenthesis. IMHO it should be:

(def....
 (start
  &key
..)


Regards

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Tue, 19 Aug 1997 19:18:55 -0700 (PDT)
From: Tim Thompson <tjt@geoplex.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Music Languages BOF at USENIX conference



Hello,
    I'm organizing a Musical Languages BOF (Birds of a Feather) session at
the USENIX Conference on Domain-Specific Languages in Santa Barbara
on October 15-17.  (see http://www.usenix.org/events/dsl97/dsl97.html
for info on the conference).

I'd like to see if there's any musical language work (CLM, CM, or anything
equally interesting) from Stanford that could be covered at the BOF.
Ideally it would be involve someone who is already going to the conference
or will go once they hear about it.  The conference program chair
(Chris Ramming) is excited about the BOF, and would like to concentrate on
the language aspects of the music languages, though we should have fun
with music at the same time.  Some equipment will be provided for demos.

Please let me know if you have any interest in or suggestions for the BOF,
or if there's someone else you think might be interested in participating.

    ...Tim Thompson...AT&T Labs/San Jose/CA...tjt@geoplex.com...


X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SGI.3.96.970819183110.9610C-100000@ulysses.stanford.edu>
References: <Pine.SUN.3.96.970819210416.21927A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Wed, 20 Aug 1997 09:07:03 -0600
To: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: piano.ins problems in CM (again)
Cc: cmdist@ccrma.Stanford.EDU

>I've reported the problem 'couple of times and finally given up.
>
>It is absolutely necessary for a clm instrument to have a
>standard, non-keyword/optional, etc. <start> parameter as their


no, the clm instrument's <start> parameter is only by default the first
parameter, you can specify some other parameter (or no parmaeter) using the
:time-parameter option to definstrument. i dont know if this capability is
in your version of cm or not (i just got back and havn't had time to build
the system here, try or searching for "time-parameter" in the clm.lisp.)
-- it certainly is working in the upcoming release and is documented in the
dictionary




Date: Fri, 22 Aug 1997 22:29:39 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM: A possible obscure problem with (thread) vs. List command 
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


It seems that if you use the "thread" macro specifying the name of the
thread as a string instead of a symbol, everything seems to work, except
that the stella "list" command fails with the invalid reference message.

It took my a while to figure out why this was happening, since the call to
"thread" never complained. 

So, I don't know if it's supposed to be legal to specify the thread name
as a string. But if legal, than maybe something's wrong in the
"parseref"
function (it tries to find a symbol with the same print-name as the
string, and there is none). 

If not legal, then maybe "thread" should complain.


The third possibility, of course, is that I don't understand something
:-)

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.970822222059.2751A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sat, 23 Aug 1997 08:41:50 -0600
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM: A possible obscure problem with (thread) vs. List command
Cc: cmdist@ccrma.Stanford.EDU


>So, I don't know if it's supposed to be legal to specify the thread name
>as a string. But if legal, than maybe something's wrong in the
>"parseref"
>function (it tries to find a symbol with the same print-name as the
>string, and there is none).
>

object names should be symbols - the hash table uses eq for comparisons.



Date: Mon, 25 Aug 1997 20:32:56 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Strange problem with Linux/ACL and prompt changing to ":tl"
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I know this isn't a specific CM/CLM question, but I wonder it someone
might have an easy answer for a weird problem I'm having in Linux/ACL.

Sometimes, after typing a command into stella, instead of the expected
output, I get ":tl", which then gets interpreted as the stella TLIST
command. For example:

~~~
Stella [Midi-Piano]: help expr
:tl
Tlist objects: (<cr>=Midi-Piano) ^
~~~~

This must have something to do with the way I'm interacting with the ACL
top-level through Xemacs, but I have absolutely no idea as to the specific
cause.

Any ideas?

Larry



--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 27 Aug 1997 22:04:59 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM stereo-flute gives zero output
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Does the stereo-flute instrument in "flute.ins" in the CLM distribution
work? 

When I try it, the instrument runs for the proper duration but give zero
amplitude output. Maybe this is CM related? Here's the Stella script:

==============================================================
Starting image `/p2/usr/cm/cm'
  with no arguments
  in directory `/LOC/'
  on machine `localhost'.

Allegro CL 4.3 [Linux/X86; R1] (12/11/96 1:33)
Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA.  All Rights
Reserved.

;; Starting socket daemon and emacs-lisp interface...
;; Optimization settings: safety 1, space 1, speed 1, debug 2.
;; For a complete description of all compiler switches given the current
;; optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).

[changing package from "COMMON-LISP-USER" to "COMMON-MUSIC"]
CM(1): (stella)
Hang on a second...

Type ? for help.

Stella [Top-Level]: cl lt
; Fast loading /p2/usr/local/cm/lt.fasl
Warning: *SOUND-PLAYER*, :VARIABLE was defined in ./defaults.lisp and is
now
         being defined in /p2/usr/local/cm/lt.lisp
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_RC-TEST.so.

Stella [Top-Level]: " ^^ customizes some CLM defaults"
" ^^ customizes some CLM defaults"
Stella [Top-Level]: cl /CLM/flute.ins
; Fast loading /CLM/flute.fasl
;   Foreign loading /CLM/clm_lnxacl_STEREO-FLUTE.so.

Stella [Top-Level]: new thread floot
New object position: (<cr>=Top-Level) 

Stella [Top-Level]: go floot

Focus:     Floot
Type:     Thread
Status:   Normal
Objects:  0
Start:    unset

Stella [Floot]: (make-instance 'stereo-flute)
#<(STEREO-FLUTE unset unset unset unset)>
Stella [Floot]: new stereo-flute 1
Slots and values: rhythm 1 dur 1 freq 440. flow 0.55
New object position: (<cr>=Floot) 

Stella [Floot]: list
Floot:
     1. #<(STEREO-FLUTE 1 1 440 0.55)> 

Stella [Floot]: open test.snd srate 44100 channels 2 statistics t
Stream: #<File: "test.snd">
Stella [Floot]: mix
Mix objects: (<cr>=Floot) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 2
Srate: 44100.0
Reverb: None
test.snd: 
  Duration: 1.0001, Last begin time: 0.0000
  Compute time: 1.899, Compute ratio: 1.90
  OutA max amp: 0.000 (near 0.000 secs)
  OutB max amp: 0.000 (near 0.000 secs)

Stella [Floot]: 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Thu, 28 Aug 97 05:54:44 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: CLM stereo-flute gives zero output
Cc: cmdist

The problem is probably that your version of the
flute does not initialize the variable current-
difference to 0.  Doug Fulton fixed this about
a week ago (it's in the current clm along with
a couple other minor bug fixes):

  (let* ((current-excitation 0.0)
	 (current-difference 0.0)
	 (current-flow 0.0)
	 (out-sig 0.0)

Sender: root@westnet.com
Date: Thu, 28 Aug 1997 19:27:26 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: CLM "scaled-to" problems (from Stella)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

(First, please let me know if it's better to privately email the
authors, instead of reporting problems/questions to this list)
  
I'm attempting to use the "scaled-to" option in CLM "with-snd", by way
of the Stella "open" command. I've run into two problems. 

First, something gets screwed up with the file format when I specify the
scaled-to option, as you can see from the attached trace. (It works fine
if I don't specify scaled-to). 

Second, (And this might not be related to scaled-to), If I then perform
a new Stella "open" command, this time not using scaled-to, I get the
same problem, as if the scaled-to option is still in effect. This is
shown in the latter part of the attached trace. 

Relavent customizations that I use (on Linux/ACL) are these:  

(setf default-sound-file-type RIFF-sound-file)
(setq default-sound-file-data-format snd-16-linear-little-endian)


... and here is the trace:

Stella [T1]: open test.snd srate 44100 channels 2 statistics t
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 2
Srate: 44100.0
Reverb: None

test.snd: 
  Duration: 1.0001, Last begin time: 0.0000
  Compute time: 0.585, Compute ratio: 0.58
  OutA max amp: 0.557 (near 0.632 secs)
  OutB max amp: 0.557 (near 0.634 secs)

*** ADDED NOTE: everything worked fine as you can see ***

Stella [T1]: open test.snd srate 44100 channels 2 statistics t scaled-to
0.3
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
CLM/RIFF unsupported sound data format type: 5
Warning: CLM can't write 32-bit linear data into a RIFF sound file
File: test.snd
Channels: 2
Srate: 44100.0
Reverb: None
test.snd.temp: 
  Duration: 2.0001, Last begin time: 0.0000
  Compute time: 0.721, Compute ratio: 0.36
  OutA max amp (pre-scaled): 0.000 (near 0.136 secs)
  OutB max amp (pre-scaled): 1.000 (near 0.125 secs)

*** ADDED NOTE: Now something went very wrong. ***

Stella [T1]: open test.snd srate 44100 channels 2 statistics t
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
CLM/RIFF unsupported sound data format type: 5
Warning: CLM can't write 32-bit linear data into a RIFF sound file
File: test.snd
Channels: 2
Srate: 44100.0
Reverb: None
test.snd.temp: 
  Duration: 2.0001, Last begin time: 0.0000
  Compute time: 0.656, Compute ratio: 0.33
  OutA max amp (pre-scaled): 0.000 (near 0.138 secs)
  OutB max amp (pre-scaled): 1.000 (near 0.125 secs)

*** ADDED NOTE: Problem #2, re-opened test.snd without  "scaled-to",
                still gives the same result! ***

--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

Date: Thu, 28 Aug 1997 17:54:31 -0700 (PDT)
From: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: CLM "scaled-to" problems (from Stella)
In-Reply-To: <3406095E.771EF9D4@westnet.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


re your 2nd problem: options you give to the open command do 
not reset anything that's not given.  i.e., 

  > open xxx play t
  ...
  > open xxx timescale .5

does not re-set play to nil. As a result, if you re-open the 
same stream object, make sure you specify scaled-to nil or 
whatever the default is.

Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Mon, 1 Sep 1997 08:44:26 -0600
To: Mari <mbmasuda@colby.edu>
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: CLM for Mac difficulty
Cc: cmdist@ccrma.Stanford.EDU

Hi, this problem has nothing to do with the version of code warrior you are
using.  I'm not sure exactly what the problem is; the launch application OS
call simply fails sometimes and ive not tracked it down.  At any rate one
"fix" is simple --  launch code warrior before you start mcl. That way the
launch call finds the actual process.

In a week or so I'll package up a premade codewarrior 12 project folder for
clm. Then there will be two choices: codewarrior 9 or codewarrior 12.

>format change with the introduction of Pro Release 1.  Do you think
>something in the cw.lisp file needs to be changed?  I don't know anything
>about C and I don't want to cause you a lot of trouble, but I would like
>to be able to use CLM with the latest version of Code Warrior because I
>use Code Warrior's Java compiler for my computer science classes.  If you
>can help me out I would really appreciate it!  Here is the Listener output
>from MCL:



Date: Mon, 1 Sep 1997 19:25:10 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: MIDI import bug? / midifile-print doc bug
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi, I'd just like to report that it seems like the CM MIDI file import
command gets the timebase wrong; A file with a division of 120 gets
imported as if the division was 24; that is to say, I need to "scale
rhythm 24/120 duration 24/120" to get things to come out right.

Also, there seems to be a minor discrepancy in the dictionary entry for
midifile-print:  the ":tracks" keyword is really spelled ":track" in the
code.

Regards

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Tue,  2 Sep 97 06:09:53 PDT
From: bil (To: cmdist)
To: cmdist
Subject: snd news

Snd now has a record window, complete with old-timey
glowing meters.  Works best (where it works at all)
on the Indy.  If anyone running linux can do audio
input and is willing to fire it up, I'd be very
interested in what happens -- due to ^$%#*@ hardware
troubles, I haven't yet gotten any sound in.


Date: Tue, 2 Sep 1997 16:40:40 -0700 (PDT)
From: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: MIDI import bug? / midifile-print doc bug
In-Reply-To: <Pine.SUN.3.96.970901191936.14996A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


> Hi, I'd just like to report that it seems like the CM MIDI file import
> command gets the timebase wrong; A file with a division of 120 gets
> imported as if the division was 24; that is to say, I need to "scale
> rhythm 24/120 duration 24/120" to get things to come out right.

Not for me: 

  |  > (midifile-print "c-major.midi")
  |  
  |  File: /usr/people/tkunze/c-major.midi 
  |  Format: 0
  |  Tracks: 1
  |  Division: 120
  |  
  |  Track 0, length 84
  |  0 #<NoteOn: 0, 0, 60, 64>
  |  120 #<NoteOff: 0, 0, 60, 127>
  |  0 #<NoteOn: 0, 0, 62, 64>
  |  60 #<NoteOff: 0, 0, 62, 127>
  |  0 #<NoteOn: 0, 0, 64, 64>
  |  60 #<NoteOff: 0, 0, 64, 127>
  |  0 #<NoteOn: 0, 0, 65, 64>
  |  60 #<NoteOff: 0, 0, 65, 127>
  |  0 #<NoteOn: 0, 0, 67, 64>
  |  60 #<NoteOff: 0, 0, 67, 127>
  |  0 #<NoteOn: 0, 0, 69, 64>
  |  60 #<NoteOff: 0, 0, 69, 127>
  |  0 #<NoteOn: 0, 0, 71, 64>
  |  60 #<NoteOff: 0, 0, 71, 127>
  |  0 #<NoteOn: 0, 0, 72, 64>
  |  240 #<NoteOff: 0, 0, 72, 127>
  |  
  |  > (stella)
  |  Hang on a second...
  |  
  |  Type ? for help.
  |  
  |  Stella [Top-Level]: import c-major.midi
  |  
  |  Stella [Top-Level]: list 1
  |  From-C-Major:
  |       1. #<MIDI-NOTE | C4| 0.500| 0.500| 0.504| 0|> 
  |       2. #<MIDI-NOTE | D4| 0.250| 0.250| 0.504| 0|> 
  |       3. #<MIDI-NOTE | E4| 0.250| 0.250| 0.504| 0|> 
  |       4. #<MIDI-NOTE | F4| 0.250| 0.250| 0.504| 0|> 
  |       5. #<MIDI-NOTE | G4| 0.250| 0.250| 0.504| 0|> 
  |       6. #<MIDI-NOTE | A4| 0.250| 0.250| 0.504| 0|> 
  |       7. #<MIDI-NOTE | B4| 0.250| 0.250| 0.504| 0|> 
  |       8. #<MIDI-NOTE | C5| 1.000| 1.000| 0.504| 0|> 
  |  
  |  Stella [Top-Level]: 


Maybe you wrote the file with a tempo of 24bpm but without
writing out a corresponding tempo-change message ;)

-Tobias



Date: Tue, 2 Sep 1997 17:44:13 -0700 (PDT)
From: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
To: Larry Troxler <lt@westnet.com>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: MIDI import bug?
In-Reply-To: <Pine.SUN.3.96.970902195036.13722D-101000@westnet.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


i see.  Your problem seems to be that the tempo/timing
information is in track 0 (a "conductor" track?  I don't have my 
documentation at hand) whereas your data is stored in track 1.  

Now, when you instruct cm to "import foo.midi track 1", it is 
obviously not going to parse the time track and thus resetting
divisions, tempo, etc. to default values. 

The safest solution would be to always write format 0 files, 
especially if your format 1 file would have only one data track
anyway, like your example does.  

My $.02, 

-Tobias



Date: Tue, 2 Sep 1997 22:14:08 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: Tobias Kunze <tkunze@ulysses.Stanford.EDU>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: MIDI import bug?
In-Reply-To: <Pine.SGI.3.96.970902173727.28333A-100000@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Tue, 2 Sep 1997, Tobias Kunze wrote:

> 
> i see.  Your problem seems to be that the tempo/timing
> information is in track 0 (a "conductor" track?  I don't have my 
> documentation at hand) whereas your data is stored in track 1.  
> 
Yes, it seems to be a convention that the first track is used as a
conductor track. I remember having a discussion a while back as to whether
this was some kind of official standard, but I don't remember what the
verdict was.

But I think that if by timing, you mean ticks-per-second, I had thought
that this was in the file header, and not in each track. Even
"midifile-print" thinks this way, as it prints out the timebase before the
individual track data.


 > Now, when you instruct cm to "import foo.midi track 1", it is 
> obviously not going to parse the time track and thus resetting
> divisions, tempo, etc. to default values. 

Yes, after I sent you the file, I realized that the tempo event would not
have been seen. However, see my above comments about the timebase.

As to how the math works out for this
particular case, I'm too
lazy to figure it out.  I'll assume that my problem is that the import
command looks for a MIDI file tempo event, and if it doesn't see it,
defaults the tempo to some really slow value.


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.970902220028.21144A-100000@westnet.com>
References: <Pine.SGI.3.96.970902173727.28333A-100000@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Wed, 3 Sep 1997 08:47:42 -0600
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: MIDI import bug?
Cc: cmdist@ccrma.Stanford.EDU


> I'll assume that my problem is that the import
>command looks for a MIDI file tempo event, and if it doesn't see it,
>defaults the tempo to some really slow value.

cm should default to the standard midi values of quarter=120, divisions=96
for both reading and writing midi files. avoid level 1 midi files; in
particular cm does not parse track 0 as a "tempo map" to be applied to the
other tracks. But you can still get multiple threads from a level 0 file
based on channel information --  I have a function somewhere in the example
folder that does just that. tempo information is a bit problematic in the
sense that a user could want either time values in the data to be adjusted
by the internal tempo factors in the file (which is what cm does) or to
import the tempo events themselves, ie to establish tempo map to be applied
to subsequent output.



Date: Thu, 4 Sep 1997 20:14:55 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Problem with using macro in CLM run
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Sorry, this will be a bit long, and it's probablysome problem on
my part,
but I just wanted to check that it's not a problem with CLM.

In the following code, when I call my exp-glide macro inside run, the
compilation fails with:

; Writing "/p2/usr/local/cm/clm_lnxacl_BUGAPHONE.c"
; While compiling (:TOP-LEVEL-FORM "inses.lisp" 1389):
Error: CLM's DSP library cannot handle EXCL::.INV-S-AREF in
       (EXCL::.INV-S-AREF #:G16594 #:G16592 #:G16593)

However, if I macroexpand-1 the call from top-level, and paste it in the
code, everything works. Here's the code:

;;; Bugaphone:
;;; A buggy additive synthesis instrument, using exponential slopes
between
;;; successive spectra. Hopefully the name will change ...

;;; Glide the setf-form "var" exponentially with time-constant "tau" 
;;; from its curent value towards "target". 
;;; tau=0 results in immediate var=target.
(defmacro exp-glide (var tau target)
  `(incf 
    ,var 
    (* 
     (- ,target ,var) 
     (/ 1.0 (max 1.0 (* ,tau sampling-rate))))))

;;; The "spec" parameter to this instrument is a list of "slices" of
;;; the form:
;;;  ( <seconds to compute on this slice>
;;;  ( {<target amp for nth partial> <tau for exp slope rate to target
amp>}*))
;;; 
;;; Or, it can also be a function that computes such a form, in which case
;;; it is passed the event's duration, frequency, amplitude, and whatever
;;; other args are passed in as the "args" parameter.
;;; 

;;; Using macros in case I want to change the above structure.
(defmacro slice-dur (slice)
  `(nth 0  ,slice))
(defmacro slice-target-n (slice n)
  `(nth (* 2 ,n) (nth 1 ,slice)))
(defmacro slice-tau-n (slice n)
  `(nth (1+ (* 2 ,n)) (nth 1 ,slice)))


;;; start = start time in seconds
;;; d = duration in seconds
;;; f = A Common Music note, degree, or pitch
;;; a = overall amplitude scaler.
;;; spec = List of slices as described above, or function to compute same.
;;; args = additional args to pass to spec function.
(definstrument bugaphone (start d f a &key spec args)
  (let*
      ((beg (floor (* start sampling-rate)))
       (end (+ beg (floor (* d sampling-rate))))
       (f (pitch f))			; should really conditionallize 
					; this here using features
					; (for non-CM people)
       ;; Allow spec to be either a direct spec list, a symbol for
       ;; such a list, or a function that computes one.
       (spec 
	(cond ((consp spec) spec)
	      ((symbolp spec) (symbol-value spec))
	      ((functionp spec) 
	       (apply spec d f a args))))
       (n-slices (length spec)) 
       (n-harmonics (/ (length (second (first spec))) 2)) ; All slices
should
					; specify the same # of harmonics!
       (cur-slice-number -1)		; will get bumped to zero pronto
       (cur-slice-sample-count  0)	; samples left for current slice
       (oscs (make-array n-harmonics))
       (amps (make-array n-harmonics :initial-element 0.0))
       (durs (make-array n-slices))
       (taus (make-array (list n-slices n-harmonics)))
       (targets (make-array (list n-slices n-harmonics))))
       
    ;; Set up oscils and copy stuff from spec lists into arrays for run
    (loop for harmonic below n-harmonics do
	  (setf (aref oscs harmonic) (make-oscil (* (1+ harmonic) (pitch
f)))))
    (loop for slice below n-slices do
	  (setf (aref durs slice) (slice-dur (nth slice spec)))
	  (loop for harmonic below n-harmonics do
		(setf (aref taus slice harmonic)
		  (slice-tau-n (nth slice spec) harmonic))
		(setf (aref targets slice harmonic)
		  (slice-target-n (nth slice spec) harmonic))))
    ;; for debugging
    (print durs)
    (print taus)
    (print targets)

    (run
     (loop for samp from beg to end do
	   ;; "cur-slice-sample-count" tracks the time spent
	   ;; on each slice.
	   (when (zerop cur-slice-sample-count)
	     (incf cur-slice-number)
	     (setf cur-slice-sample-count 
	       (max 1 (* (aref durs cur-slice-number) sampling-rate)))
	     (print (aref taus cur-slice-number 0))) ; <- debugging

	   (decf cur-slice-sample-count) ; tick-tock

	   (loop for harmonic below n-harmonics do
		 ;; This macro call chokes the CLM DSP compiler!!
		 (exp-glide (aref amps harmonic) 
			    (aref taus cur-slice-number harmonic)
			    (aref targets cur-slice-number harmonic))
		 
		 ;; but the following, pasted from macroexpand-1
		 ;; at top-level, works!!
;;;		 (INCF (AREF AMPS HARMONIC)
;;;		       (* (- (AREF TARGETS CUR-SLICE-NUMBER HARMONIC)
(AREF AMPS HARMONIC))
;;;			  (/ 1.0 (MAX 1.0 (* (AREF TAUS CUR-SLICE-NUMBER
HARMONIC) 22050)))))


		 (outa samp 
		       (* a 
			  (aref amps harmonic) 
			  (oscil (aref oscs harmonic)))))))))

(make-instance 'i1)			; Hack for CM


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Fri,  5 Sep 97 07:23:42 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: Problem with using macro in CLM run
Cc: cmdist

This is a problem in the run macro involving macroexpand.
I need to test the thing more fully, but I think the fix
is to change dsp-ize in run.lisp:

  (let ((xx #-gcl (macroexpand x outer-environment)
	    #+gcl (macroexpand-1 x outer-environment)
to:

  (let ((xx #-(or excl gcl) (macroexpand x outer-environment)
            #+(or excl gcl) (macroexpand-1 x outer-environment)

I thought I was already testing this!


Date: Tue, 9 Sep 1997 21:40:42 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM "phrase" mechanism 
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


I've got some probably confused questions about the CLM phrase mechanism.

First, is it true that in general, simply building on the "run*" mechanism
is not a replacement for phrases, because the latter doesn't take into
account concurrency, task-spawning, and out-of-time-order issues? It's not
clear to me under what circumstances "wait-for-phrase", for example, will
actually need to wait - I suppose this depends on whether "run" actually
launches a seperate thread, and whether the Lisp implementation is
multithreaded, etc. More to the point, when is the "wait-for-phrase"
mechanism actually needed? Only if events are called out of order? 

Next, the syntax of the use of phrases as described in the CLM manual,
seems a bit counter-intuitive to me, especially the second "pickup"
instrument example. I think this is because the handling of run-loop
phrase vars is completely different than the handling of vars outside the
run-loop, whereas I tend to think of that as a low-level implementation
distinction . Also, I think it may be a common case to have a number
of local
variables, each of which you would want to initialize to some value (as in
let), or use the current phrase value if a phrase is already in progress.

So, I'm thinking about something like the following:

ORIGINAL PICKUP EXAMPLE:

(definstrument pickup (phrase dur frq)
  (wait-for-phrase phrase)
  (let* ((s (or (phrase-value phrase 's)
                (make-oscil frq)))
         (amp (* .9 (or (phrase-value phrase 'amp) .5)))
         (start (or (phrase-value phrase nil) 0))
         (end (+ start (floor (* dur sampling-rate)))))
    (setf (phrase-value phrase nil) end)
    (run
      (loop for i from start below end do
        (outa i (* amp (oscil s)))))
    (end-run (phrase phrase 's 'amp))))

BRAINSTORMING, SUGGESTED SYNTAX:

(definstrument pickup (phrase dur frq)
  (using-phrase 
   phrase  ;; generates (wait-for-phrase phrase)

   ;; phrase vars. Like let, except that the initialization forms
   ;; are used only if the phrase is uninitialized. Otherwise,
   ;; the vars are assigned from the current phrase-values.
   ((s (make-oscil frq))
    (amp1 .5)
    (start 0))

   (let*
       ((amp (* .0 amp1))
	(end (+ start (floor (* dur sampling-rate)))))
     ;; Should be able to setf phrase-values regardless of whether
     ;; the vars are used in the run-loop :
     (setf (phrase-value phrase 'start) end) 
     (run
      (loop for i from start below end do
	    (outa i (* amp (oscil s)))))
     ;; The run loop above would magically know to resave 's and 'amp1
back into
     ;; the phrase, because of the var bindings specified as the
     ;; second arg to "using-phrase". Hence, no "end-run" needed.
    
     
      

 --  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA
--
  


Date: Wed, 10 Sep 97 07:07:26 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: CLM "phrase" mechanism 
Cc: cmdist

Thanks for the suggestions -- on first glance I like
them.  In the current CLM, there is no need for the
phrase mechanism -- it was originally intended for
multi-DSP implementations (i.e. the QP board), but
I removed all the 56000 support about a year ago.
In the near(?) future, however, I hope to add a
CLM-server/client feature to with-sound so that 
CLM can run on many hosts at once (this became
interesting when ethernet speeds increased by a
large factor).  The entire distinction between
run-time and lisp-level vars in CLM is unfortunate,
and actually unnecessary -- it grew out of 56000/NeXT
communication bottlenecks which are now irrelevant.
The whole section is ripe for revision!


Date: Thu, 18 Sep 1997 21:49:27 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Problems with def-clm-var
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


If I compile-load a file that contains a clm-def-var and an instrument
definition, then I find that I can not then look at the clm-var from the
top-level using the (clm-var) form - it seg-faults. However, looking at 
the clm-var before the instrument definition is loaded, works. For
example:

test3.lisp:

(def-clm-var ctr 0 "" :cleared)
(print (ctr))
(defpinstrument simp (beg end ind)
  (run 
   (loop for i from beg to end do
     (clm-print "s~D: ~D ~D" ind (ctr) (previous-ctr))
     (setf (ctr) (+ (ctr) 1))
     (outa i .01))))

..and the Lisp session:

Copyright (C) 1985-1996, Franz Inc., Berkeley, CA, USA.  All Rights
Reserved.

;; Starting socket daemon and emacs-lisp interface...
;; Optimization settings: safety 1, space 1, speed 1, debug 2.
;; For a complete description of all compiler switches given the current
;; optimization settings evaluate (EXPLAIN-COMPILER-SETTINGS).

[changing package from "COMMON-LISP-USER" to "COMMON-MUSIC"]
CM(1): :cl test3.lisp
;;; Compiling file test3.lisp
; Compiling |<load-CTR>|
; Compiling CTR
; Compiling PREVIOUS-CTR
; Compiling |setf-CTR|
; Compiling CLM::<CTR>
; Compiling CLM::|<previous-CTR>|
; Compiling CLM::|<setf-CTR>|
; Compiling (:INTERNAL (:TOP-LEVEL-FORM "test3.lisp" 0) 0)
; Compiling (:INTERNAL (:TOP-LEVEL-FORM "test3.lisp" 0) 0)
; Writing "/p2/usr/local/cm/clm_lnxacl_SIMP.c"
; Compiling "/p2/usr/local/cm/clm_lnxacl_SIMP.c"
; Creating shared object file "/p2/usr/local/cm/clm_lnxacl_SIMP.so"
; Compiling (:INTERNAL (:TOP-LEVEL-FORM "test3.lisp" 46) 0)
; Compiling SIMP
; Compiling   (:INTERNAL SIMP 0)
; Compiling   (:INTERNAL SIMP 1)
; Compiling   (FLET SIMP CLOSE-INPUT)
; Compiling   (FLET SIMP CLM-CLOSE-INPUT)
; Compiling   (FLET SIMP CLM::LOAD-IO_C)
; Compiling   (FLET SIMP CLM::LOAD-REAL-ARRAY_C)
; Compiling   (:INTERNAL SIMP 2)
; Compiling   (:INTERNAL SIMP 3)
;  Note: Closure (:INTERNAL SIMP 2) will be stack allocated.
;  Note: Closure (FLET SIMP CLM::LOAD-REAL-ARRAY_C) will be stack
allocated.
;  Note: Closure (:INTERNAL SIMP 0) will be stack allocated.
; Compiling SIMP0
;;; Writing fasl file test3.fasl
Warning: No IN-PACKAGE form seen in test3.lisp.  (Allegro Presto will be
         ineffective when loading a file having no IN-PACKAGE form.)
;;; Fasl write complete
Warning: While compiling these undefined functions were referenced:
         |clm_lnxacl_simp1|, |<load-CTR>|.
; Fast loading test3.fasl

0 
;   Foreign loading /p2/usr/local/cm/clm_lnxacl_SIMP.so.
CM(2): (ctr)
Error: Received signal number 11 (Segmentation violation)
  [condition type: SYNCHRONOUS-OPERATING-SYSTEM-SIGNAL]
[1] CM(3): 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Fri, 19 Sep 1997 23:07:59 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Unexplained run-loop behavior
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I'm really not having much luck with CLM tonight :-(

I've got these two instruments:

--------
(definstrument (grump :parallel t) (start)
  (let* ((beg (floor (* start sampling-rate)))
	 (end (1+ beg)))
    (run
     (loop for samp from beg below end do
	   (clm-print "~&~D~&" beg)
	   (outa samp 0.0)))))
(make-instance 'grump)

(definstrument (grump2 :parallel t) (start d)
  (let* ((beg (floor (* start sampling-rate)))
	 (end (+ 1 beg (floor (* d sampling-rate)))))
    (run
     (loop for samp from beg below end do
	   (clm-print "~&~D~&" beg)
	   (outa samp 0.0)))))
(make-instance 'grump2)

----------

The first instrument, I would expect to print its start time once.

Instead, nothing gets printed, and the output file size is about 69MB:

Stella [T1]: new grump 3
Slots and values: rhythm 0.001
New object position: (<cr>=T1) 

Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 1
Srate: 22050.0
Reverb: None
grump 0.000 grump 0.001 grump 0.002 test.snd: 
  Duration: 0.0002 (4 samples), Last begin time: 0.0020 (sample 44)
  Compute time: 0.103, Compute ratio: 567.79
  OutA max amp: 0.000 (near 0.000 secs)

Stella [T1]: 


    Pretty strange. I then thought that CLM perhaps needs to see a
   duration parameter, hence "grump2": 

Stella [T1]: new grump2 3
Slots and values: rhythm 0.001 d 0
New object position: (<cr>=T1) 

Stella [T1]: open test.snd statistics t verbose t
Stream: #<File: "test.snd">
Stella [T1]: mix
Mix objects: (<cr>=T1) 
Start time offset:(<cr>=None) 
File: test.snd
Channels: 1
Srate: 22050.0
Reverb: None
grump2 0.000 grump2 0.001 
0

0

<snip>

0

0
grump2 0.002 
0

22

0
<snip>

0

44
test.snd: 
  Duration: 0.0022 (49 samples), Last begin time: 0.0020 (sample 44)
  Compute time: 0.503, Compute ratio: 226.35
  OutA max amp: 0.000 (near 0.000 secs)

Stella [T1]

   Now, it seems like the run loop is being called not only on the
   instrument start times, but for each sample in between, with "beg" 
   bound to 0!

What's going on here?!?!?

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Mon, 22 Sep 97 07:35:19 PDT
From: bil (To: Larry Troxler <lt@westnet.com>)
To: Larry Troxler <lt@westnet.com>
Subject: Re: Unexplained run-loop behavior
Cc: cmdist

You're printing "beg" which is always 0 -- perhaps
you intend to print "samp".  I don't see the 69MB
output -- it says 4 samples, and appears to be that
at least on the SGI (running just CLM, not within CM).


On the earlier def-clm-var problem, I've added an
attempt to kludge around this (it's a Linux linker
bug), but it'll be a day or two before I make a
new clm.tar.gz.


Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: various Snd, oddities and bravery
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 25 Sep 1997 12:18:43 +0200
Lines: 36
X-Mailer: Gnus v5.3/Emacs 19.31

Bravery:

Im amidst in a recording session, and trying out the glorious record-ways
of snd.  What a panel!  Snds VU-meters ought to set a new standard on
software gear for these kind of things!  Clear, immediate info, bravo.

On a DAT, ive got 88 piano-tone samples i want to put into snd, and cut
the whole thing to bits & pieces in the editor, using searching and
something akin to 'audio-regexps', checking for contiguous growth in
samplevalues etc.

Digital in sets the input-mode to 4-channel-mode automatically.  Im not
quite sure why this happens, but my 'apanel flips to 4-chan-mode,
whenever I RESET Snds record-panel.  Actually this happens whenever i
start up Snds recording-panel.  Effectively this means i have to go to
'apanel' and 'off-click' 4-chan-mode everytime.  After that the recording
process does what it should.  Apart from that, DIGITAL IN on the SGI
seemingly works fine.


A few oddities:

   C-xC-x: x=x_max    ,or
   x=0.5*x_max

doesnt move the cursor, only returns the sample-value at point (it
seems), while

   C-XC-X: x=1024  does just that, moves the pointer to samplenr. 1024.

Still odder:

   C-s: x=0.5*x_max

Snd totally freaks out, starting blinking and finally
exploding in a Segmentation fault


Date: Thu, 25 Sep 97 06:37:02 PDT
From: bil (To: Anders Vinjar <anders.vinjar@notam.uio.no>)
To: Anders Vinjar <anders.vinjar@notam.uio.no>
Subject: Re: various Snd, oddities and bravery
Cc: cmdist

Thanks for the bug reports -- on x_max: somehow I
must have dozed off while typing because it was simply
omitted from the table of symbols in snd-snd.c;
get_snd_var needs:

    case 9:
      ap = cp->axis;
      return(ap->xmax);
      break;

which treats it as a float (seconds), so you'll want
an expression like C-x C-x x=x_max*srate.  (It was
an accident that Snd ended up with parallel lisp and
C syntaxes -- I suppose I should choose one or the
other).

On digital in: I wasn't sure how it actually worked on
the SGI; still haven't found a way to try it out here --
I need to borrow or buy a DAT recorder.

On the search seg fault: the expression x=0.5*x_max
was constantly resetting the search location to the
same sample, causing an infinite loop (since it also
evaluated to false). I need to separate the two notions.

On the VU meters: if you have XPM, (libXpm etc), see
the sgi makefile for a way to use it to get a slightly
better label (and a lock icon).


Sender: root@westnet.com
Date: Mon, 29 Sep 1997 19:49:01 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: archive problems (possibly w CLM?)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

A while back I asked about the misbehavior of CM archive, but I don't
remember what the answer was. To recap, it seems like the Stella archive
command sometimes isn't correct, in that reloading the output doesn't
restore all the object slots. Sometimes the slot names are stored as
keywords, other times as quoted symbols, and sometimes just NIL :-)

I just now had a case where a CLM instrument had a keyword arg with no
default value; the archive/script combo didn't properly reload this slot
until I changed the instrument to provide a default value for that slot.

Larry  
 
--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

Date: Tue, 30 Sep 1997 12:02:55 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: new Common Music release
Cc: taube@uiuc.edu

A new experimental release of Common Music is now available. The

release is stable but contains major new additions that will

not be finalized until some time in November. 

 

Binaries:

  MacOs   
ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/binaries/xcm-ppc.sea.bin

  Linux   
ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/binaries/xcm-linux.tar.gz

  Win95/NT
ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/binaries/xcm-win32.zip


Sources:

  MacOs    ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/xcm.sea.bin

  Unix     ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/xcm.tar.gz

  Win95/NT ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/xcm.zip


The highlights:


o Mindy, a new (graphic) facilty for working with interactive

  networks. A network consists of user-definable, typed nodes and
links.

  Networks can be run in forward or backward modes. Forward chaining

  is similar to the way Max works; backward (dependancy) mode is
similar

  to the way in which Lisp evaluates expressions.

  Mindy's grapic interface works only on the Macintosh. The kernel
should

  work in all ports. To learn more about Mindy see the files in

  cm/doc/tutorials/mindy and cm/doc/examples/networks.cm

  To see a pretty picture of Mindy, get:

       ftp://ftp-ccrma.stanford.edu/pub/Lisp/cm/automaton.gif


o A complete rewrite of the low-level MIDI syntax by Tobias Kunze.

  Major new functionality includes a cross-platform MIDI scheduler
(C++) 

  and the ability to read/write unlimited "logical" channels of MIDI

  data.

  On the Macintosh, CM is now an OMS client  This means that CM no

  longer uses the (unsupported) Apple MIDI Driver and Manager and that

  you MUST install OMS to use Midi with CM on the Mac. You can get OMS

  free of charge from

        http://www.opcode.com/downloads/oms/mac/

  The realtime portion of the new MIDI system currently works only on

  SGI and Macintosh. With any luck, Linux and Nextstep will be done in

  October.  Windows would be nice but I am not familiar enough with

  Microsoft's MIDI API. Porting the new MIDI system means writing
about

  six or seven interface functions to the native driver...

  any volunteers? :)


o Much improved CLM support, including the ablility to define note

  classes that automatically call clm instruments without themselves

  being definstruments. Many many bug fixes.


o Two new analysis/resynthesis functions for working with Markov. 

  markov-analyze analyzes the user's input sequences and computes the

  transition table for any order; this table can then be used by the

  Markov pattern to generate new material based on the chracteristics

  found in the original input data. See the dictionary for more
details.


o New on-line Help facility now uses Netscape, OmniWeb or Linx.

  Type Help Help in Stella or use the new Help item in the Common
Music

  Menu (Macintosh only).



Date: Tue, 30 Sep 1997 20:50:56 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: Rick Taube <taube@uiuc.edu>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: new Common Music release
In-Reply-To: <v03007800b0568c167682@[128.174.92.150]>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Wow. Like you said, the CLM support seems to be better; After a quick
trial, It seems I nolonger have
to (make-instance 'the-clm-class) before using it CM. And it looks like
"archive" might actually be working now . 

It even feels a bit "snappier", but this could be due to my CPU being a
bit excited over new code to chew on. Skeptics will of course look for
other possible answers (differences in building, not loading unused
syntaxes, etc), but these people tend to be those who think that a
person's CPU doesn't have its own individual personality. In my opinion,
if you boot your machine, and then ignore it while you feed the dog, fix
dinner, etc, you have no business complaining when your applications run
slow. IMHO, to run at optimum speed, your 'puter needs some attention.
At least wipe the case every now and then (they love this!) But I'm
getting off the subject here ...

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 1 Oct 1997 20:53:24 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: New CM Help missing API doc?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

According to changes.text, the old api.text is incorporated into the HTML.
But I don't see it anywhere (not in the dictionary, not linked to from
cm.html).  

Another nitpick. With *help-browser* set to nil, there seems to be a
problem selecting a specific help topic from a list of matches, if the
desired topic is a substring of the others:

 Stella [Top-Level]: help algo
CM help matching "algo":
algorithm, algorithm_.class., compile-algorithm, item_in_algorithms
Stella [Top-Level]: help algorithm
CM help matching "algorithm":
algorithm, algorithm_.class., compile-algorithm, item_in_algorithms

And a question/suggestion: Would it make sense to also have an Emacs/W3
browsing mode? Or would such a thing make more sense if implemented
entirely in Emacs, not using the CM help module?


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 1 Oct 1997 20:57:13 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Stella bugs in new CM
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

- The unmute command doesn't work - the mute flag doesn't go away (at
least according to the listing).

- The paste command is seriously ill. After copying one event to the
pasteboard, the paste command always prompts for a "New thread:".

Well, you *did* say this was experimental. I think I'm going back to the
old version for a while :-)

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 02 Oct 1997 11:09:44 +0200
In-Reply-To: Larry Troxler's message of Wed, 1 Oct 1997 20:53:24 -0400 (EDT)
Lines: 46
X-Mailer: Gnus v5.3/Emacs 19.31

  "lt" == Larry Troxler <lt@westnet.com> writes:
  lt> And a question/suggestion: Would it make sense to also have an
  lt> Emacs/W3 browsing mode?

This would need the 'gnuclient/gnuserv/gnudoit' utility for managing
'remote' emacses, and options on the command-line passed to the remote
emacs, orelse you would clutter your cpu & screen with multiple emacses.
I doubt if many people have access to this.  The code needed to get it
working in xcm/kernel/help.lisp would be straightforward.

F.ex:  (i havent tested this, dont have gnuclient etc. installed)

In Emacs you would need to load the library 'gnuserv.el', type
(gnuserv-start) and emacs is ready to receive.

In 'help.lisp':

(setq *help-browser* "w3")
(setq *help-browser-command* "emacs")

(defun open-url (url)
  (ecase *help-browser*
    (:w3
     (shell (format nil "ps ~a | grep emacs > /dev/null ; ~%~
                         sh <<END~%~
                         if [ $? -eq 0 ];then~%~a~%else~%~a~%fi~%~
                         END"
		    #+sgi "-eu $USER" #+linux "-c"
		    (format nil "gnudoit '(w3-open-local ~a)'" url)
		    (format nil "~a '(w3-open-local ~a)' &"
			    *help-browser-command* url))))
    (:netscape
     (shell (format nil "ps ~a | grep netscape > /dev/null ; ~%~
                         sh <<END~%~
                         if [ $? -eq 0 ];then~%~a~%else~%~a~%fi~%~
                         END"
		    #+sgi "-eu $USER" #+linux "-c"
		    (format nil "~a -remote 'OpenURL(~a)'"
			    *help-browser-command* url)
		    (format nil "~a '~a' &" *help-browser-command* url))))
    (:lynx
     (shell (format nil "setenv TERM vt100 ; ~a ~a"
		    *help-browser-command* url)))
    #+next
    (:omniweb
     (shell (format nil "~a '~a'" *help-browser-command* url)))))

Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: multipart/mixed; boundary="Multipart_Thu_Oct__2_11:26:09_1997-1"
Content-Transfer-Encoding: 7bit
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 02 Oct 1997 11:28:45 +0200
In-Reply-To: Larry Troxler's message of Wed, 1 Oct 1997 20:53:24 -0400 (EDT)
Lines: 955
X-Mailer: Gnus v5.3/Emacs 19.31

--Multipart_Thu_Oct__2_11:26:09_1997-1
Content-Type: text/plain; charset=US-ASCII

  "lt" == Larry Troxler <lt@westnet.com> writes:
  lt> And a question/suggestion: Would it make sense to also have an
  lt> Emacs/W3 browsing mode? Or would such a thing make more sense if
  lt> implemented entirely in Emacs, not using the CM help module?

I think I have the remainings of a wannabe CM-modus lying around, used in
a course i teached once.  It originally used w3 for lookup, with
help-menus built into emacs etc., but it seems as I redid it to use
'browse-url-netscape instead.  I dont know if much of this 'mode' works,
but there might be something in there to further building of one such.
Ill include it below, feel free to hack away and do whatever you want
with the results.


--Multipart_Thu_Oct__2_11:26:09_1997-1
Content-Type: application/octet-stream; type=emacs-lisp
Content-Disposition: attachment; filename="kurs-mode.el"
Content-Transfer-Encoding: quoted-printable

;;; -*- Mode: emacs-lisp ;Minor-mode: auto-fill -*-


;;; Denne fila lager en spesialisert emacs-omgivelse for arbeid med
;;; Common-Music.  =


(setq load-path (cons "/local/gnu/lib/emacs/site-lisp/w3" load-path))
(setq load-path
      (cons (expand-file-name "~andersvi/usr/gnu/emacs/lisp")
		  load-path))

(setq load-path (append load-path (list "~andersvi/usr/gnu/calc-2.02c")))=



(require 'cl)
;;(require 'title)
(require 'easymenu)
(require 'disp-table)
(require 'advice)
;;(require 'mouse-extras)                                           =

;;(require 'tinyxreg)


(load-library "loaddefs")		;innlasting av mye defaults
(require 'inf-lisp)
(load-library "ansi-doc")
;;(load-library "netscape")             ; lagt inn i denne fila.
(load-library "xf-load")

(if (not transient-mark-mode) (transient-mark-mode 1))

;;; litt spesialisering av taster, lisp-prompt osv.:

;;(setq initial-frame-alist
;;      '((top . -1) (left . -1) (width . 85)
;;	(height . 50) (background-color . "grey89")
;;	(font . "-sgi-screen-medium-r-normal--15-150-72-72-m-80-iso8859-1")
;;	(icon-type . t)))

(setq display-time-day-and-date t)
(display-time)
(setq line-number-mode t)
(put 'eval-expression 'disabled nil)
(setq lpr-command "/local/bin/ppr")

;; 8-bits tegn.
(require 'iso-insert)
(set-input-mode t nil '8bit)
(require 'iso-syntax)
(standard-display-european 1)

;;(global-set-key (quote [C-M-mouse-2]) (quote mouse-menu-choose-yank))
(global-set-key "=18=02" 'electric-buffer-list)

(require 'dired-x)
;; Set dired-x variabler her.  For eksempel:

(setq dired-guess-shell-alist-user
      (list (list "\\.aif[cf]$" "playaiff" "sfplay" "soundeditor" "sfinfo=
" "sfconvert")
	    (list "\\.snd$" "playaiff" "sfplay" "sfinfo" "soundeditor" "sfconver=
t")
	    (list "\\.e*ps" "ghostview" "sonataview" "ppr" "xv")))

(setq dired-listing-switches "-lo")
(setq dired-guess-shell-gnutar nil)
(setq dired-omit-files-p nil)
(setq dired-omit-files
    (concat dired-omit-files "\\|^\\..+$"))
(setq dired-x-hands-off-my-keys nil)
(dired-x-bind-find-file)

;;; Denne muliggj=F8r bakgrunnsjobber i dired f.eks.

(load-library "background")
(define-key dired-mode-map "&" 'dsg-dired-do-shell-command-bg)

(defun dsg-dired-do-shell-command-bg ()
  "Background shell commands for dired"
  (interactive)
  (unwind-protect
      (progn
	(fset 'dsg-real-shell-command (symbol-function 'shell-command))
	(fset 'shell-command (symbol-function 'background))
	(call-interactively 'dired-do-shell-command))
    (progn
      (fset 'shell-command (symbol-function 'dsg-real-shell-command))
      (fmakunbound 'dsg-real-shell-command)))
  nil) ; return nil to be consistent - not sure if really necessary

(global-set-key "=A6" (quote dsg-do-shell-command-bg))

(defun dsg-do-shell-command-bg ()
  "Background shell commands for dired"
  (interactive)
  (unwind-protect
      (progn
	(fset 'dsg-real-shell-command (symbol-function 'shell-command))
	(fset 'shell-command (symbol-function 'background))
	(call-interactively 'shell-command))
    (progn
      (fset 'shell-command (symbol-function 'dsg-real-shell-command))
      (fmakunbound 'dsg-real-shell-command)))
  nil) ; return nil to be consistent - not sure if really necessary


(defun my-dired-f-key (arg)
  "Kills previous dir buffer if dired-find-file entered new directory.
Else works like normal 'f'
"
  (interactive "P")
  (let ((ob (current-buffer)))		;original buffer
    (if (not arg)
	(dired-advertised-find-file)
      (save-excursion
	(dired-advertised-find-file)	;move to dir or load a file ?
	;;  What happened
	;;  a) where are we now, still in dired ?
	;;  b) user requested same dir, "."
	(if (or (null (string-match "dired" mode-name))
		(equal ob (current-buffer)))	=

	    nil
	  (set-buffer ob)
	  (kill-buffer ob))
	))))

(add-hook 'dired-mode-hook
     '(lambda ()
	(local-set-key "f" 'my-dired-f-key)))

(setq background-show nil)

(defun insert-anfoersels-tegn (arg)
  "Setter inn doble anfoersels-tegn paa samme maate som paranteser etc."
  (interactive "P")
  (if arg (setq arg (prefix-numeric-value arg))
    (setq arg 0))
  (or (eq arg 0) (skip-chars-forward " \t"))
  (insert ?\")
  (save-excursion
    (or (eq arg 0) (forward-sexp arg))
    (insert ?\"))
  (forward-sexp arg))

(define-key esc-map "\"" 'insert-anfoersels-tegn)

(global-set-key "=03=13" (quote shell))

;; Mere fleksible s=F8keoperasjoner.  Ned i underkataloger osv.

(autoload (function igrep) "igrep"                   =

   "*Run `grep' to match EXPRESSION in FILES..." t)  =

(autoload (function egrep) "igrep"                   =

   "*Run `egrep'..." t)                              =

(autoload (function fgrep) "igrep"                   =

   "*Run `fgrep'..." t)                              =

(autoload (function igrep-recursively) "igrep"       =

   "*Run `grep' recursively..." t)                   =

(autoload (function egrep-recursively) "igrep"       =

   "*Run `egrep' recursively..." t)                  =

(autoload (function fgrep-recursively) "igrep"       =

   "*Run `fgrep' recursively..." t)                  =



(autoload 'alarm	   "alarm" "pop-opp alarm til spesifisert tid" t)


;;;Calc autoloads

;;; Commands added by calc-private-autoloads on Mon Nov 28 12:03:09 1994.=

(autoload 'calc-dispatch	   "calc" "Calculator Options" t)
(autoload 'full-calc		   "calc" "Full-screen Calculator" t)
(autoload 'full-calc-keypad	   "calc" "Full-screen X Calculator" t)
(autoload 'calc-eval		   "calc" "Use Calculator from Lisp")
(autoload 'defmath		   "calc" nil t t)
(autoload 'calc			   "calc" "Calculator Mode" t)
(autoload 'quick-calc		   "calc" "Quick Calculator" t)
(autoload 'calc-keypad		   "calc" "X windows Calculator" t)
(autoload 'calc-embedded	   "calc" "Use Calc inside any buffer" t)
(autoload 'calc-embedded-activate  "calc" "Activate =3D>'s in buffer" t)
(autoload 'calc-grab-region	   "calc" "Grab region of Calc data" t)	=

(autoload 'calc-grab-rectangle	   "calc" "Grab rectangle of data" t)
(autoload 'edit-kbd-macro	   "macedit" "Edit Keyboard Macro" t)
(autoload 'edit-last-kbd-macro	   "macedit" "Edit Keyboard Macro" t)
(autoload 'read-kbd-macro	   "macedit" "Read Keyboard Macro" t)
(global-set-key "\e#" 'calc-dispatch)
;;; End of Calc autoloads.

(setq calc-info-filename "~andersvi/usr/gnu/calc-2.02c/calc.info")
(setq Info-directory-list (cons "~andersvi/usr/gnu/calc-2.02c/"
				Info-default-directory-list))


;;; HILIT kode:

(cond (nil;;(window-system
       (setq hilit-mode-enable-list  '();;'(lisp-mode inferior-lisp-mode)=

	     hilit-background-mode   'light
	     hilit-inhibit-hooks     nil
	     hilit-inhibit-rebinding nil)
	(hilit-set-mode-patterns
	 'browser-file-mode
	 '(("\\w*/" nil dired-directory)
	   ("\\w*\\\*" nil ForestGreen)
	   ("\\w*\\\@" nil dired-link)
	   ("\\w*\\\.gz\\>" nil VioletRed)
	   ("\\w*\\\.\\(lisp\\|c\\|el\\|tex\\)\\>" nil FireBrick)
	   ("\\w*\\\.\\(fasl\\|o\\|elc\\|dvi\\)\\>" nil SlateGray)
	   ("\\w*\\\.h\\>" nil Purple)))
	(add-hook 'browser-file-display-hook
	  (function (lambda ()
		      (hilit-highlight-region (point) (point-max) nil t))))
	(require 'hilit19)))



(defun find-ansi-doc ()
  "Find the documentation in the ansi draft on a particular function
or topic.   If there are several pieces of documentation then go through
them successively."
  (interactive)
  (let (x tem name lis first chap tmp-chap ans next)
    (or ansi-doc-alist
	(progn
	  (create-index-el-from-index-idx )
	  (load (concat ansi-doc-dir "/index.el"))))
    (setq name (completing-read "Dokumentasjon om: " ansi-doc-alist nil t=
))
    (progn  (setq ans nil)   (setq lis ansi-doc-alist)
	    (while lis
	      (cond ((equal (car  (car lis)) name)
		     (setq ans (append ans (cdr  (cdr (car lis)))))))
	      (setq lis (cdr lis))))
    (setq tem ans)
    (if (cdr tem) (setq first "First") (setq first ""))
    (print (car (car x)))
    (while tem
      (setq x (car tem))
      (setq chap (concat ansi-doc-dir
		  (downcase (format "/chap-%s.dvi"  (car x)))))
      (setq chap (maybe-gzip-to-tmp chap))
      (message "%s Doc in Chapter %s page %s)  .." first (car x) (cdr x))=

      (if (cdr tem) (setq first "Next") (setq next "Final"))
      (shell-command (concat "xdvi  -expert -xoffset .2 -yoffset -.2 "
			     " -paper 7.2x8.5 "
			     " -display "
			     (or x-display-name ":0")
			     "  -geometry -2-2 +" (+ (cdr x) 2)" "
			     chap
			     ;;" &"
			     ))
      (setq tem (cdr tem))))
  (message nil))


;;;;;;;;;;  Hjelpe tekster fra emacs: ;;;;;;;;;;;;;;

(defun cm-manual ()
  (interactive)
  (setq background-show nil)
  (unwind-protect
      (browse-url-netscape "http://www.notam.uio.no/internt/cm-sys/cm/doc=
/dict/Intro.html"))) =


(defun stella-manual ()
  (interactive)
  (setq background-show nil)
  (unwind-protect
      (browse-url-netscape "http://www.notam.uio.no/internt/cm-sys/cm/doc=
/tutorials/stella/toc.html")))

(defun clm-manual ()
  (interactive)
  (setq background-show nil)
  (unwind-protect
      (browse-url-netscape "http://www.notam.uio.no/internt/cm-sys/clm/cl=
m.html")))

(defun cmn-manual ()
  (interactive)
  (setq background-show nil)
  (unwind-protect
      (browse-url-netscape "http://www.notam.uio.no/internt/cm-sys/cmn/cm=
n.html")))

;;; sett inn div dokumentasjon i help-menyen

(define-key-after menu-bar-help-menu [Stella-dictionary]
  '("Stella innf=F8ring" . stella-manual) [Show Version])

(define-key-after menu-bar-help-menu [CM-dictionary]
  '("CM dokumentasjon" . cm-manual) [Stella-dictionary])

(define-key-after menu-bar-help-menu [CLM-dictionary]
  '("CLM dokumentasjon" . clm-manual) [CM-dictionary])

(define-key-after menu-bar-help-menu [CMN-dictionary]
  '("CMN dokumentasjon" . cmn-manual) [CLM-dictionary])

(define-key-after menu-bar-help-menu [CL-ANSI-dokumentasjon]
  '("Common Lisp dokumentasjon" . find-ansi-doc) [CMN-dictionary])

(define-key-after menu-bar-edit-menu [marker-alt]
  '("Marker hele bufferet" . mark-whole-buffer) 'clear)

(define-key-after menu-bar-edit-menu [finn-definisjon]
  '("Liste over definisjoner..." . imenu) 'search-fwd)

(defvar cm-help-file-dir "/hf/notam/u1/andersvi/cm-sys/nycm/acl/cm/stella=
/help/")

(load "/local/notam/kurs/lisp/sys/stella-help")
(pushnew "*Stella hjelp*" special-display-buffer-names)


;;; IMENU:

;;;; Load imenu index funksjon.  Man=F8vrer i et buffer ved hjelp av
;;;; menyer:

(load-library "imenu")

;;(autoload 'imenu "imenu" nil t)

;;(autoload 'imenu-add-to-menubar "imenu" nil t)

(global-set-key [M-S-down-mouse-3] (function imenu))


;;; tilpasset CM-arbeid

(defun imenu-cm--lisp-extract-index-name ()
  ;; Example of a candidate for `imenu-extract-index-name-function'.
  ;; This will generate a flat index of definitions in a lisp file.
  (save-match-data
    (and (looking-at
	  "(algo\\|(thre\\|(gene\\|(merg\\|(mute\\|(def")
	 (condition-case nil
	     (progn
	       (down-list 1)
	       (forward-sexp 2)
	       (let ((beg (point))
		     (end (progn (forward-sexp -1) (point))))
		 (buffer-substring beg end)))
	   (error nil)))))

(setf imenu-extract-index-name-function 'imenu-cm--lisp-extract-index-ind=
ex)

(defun imenu-cm--create-lisp-index ()
  ;; Example of a candidate for `imenu-create-index-function'.
  ;; It will generate a nested index of definitions.
  (let ((index-alist '())
	(index-funk-alist '())
	(index-var-alist '())
	(index-type-alist '())
	(index-unknown-alist '())
	(index-algo-alist '())
	(index-gen-alist '())
	(index-thread-alist '())
	(index-merge-alist '())
	(index-mute-alist '())
	(index-inst-alist '())
	prev-pos)
    (goto-char (point-max))
    (imenu-progress-message prev-pos 0)
    ;; Search for the function
    (while (beginning-of-defun)
      (imenu-progress-message prev-pos nil t)
      (save-match-data
	(and (looking-at
	      "(algo\\|(thre\\|(definst\\|(gene\\|(merg\\|(mute\\|(def\\|(set")
	     (save-excursion
	       (down-list 1)
	       (cond
		((looking-at "def\\(var\\|const\\)")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-var-alist))
		((looking-at "setf")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-var-alist))
		((looking-at "def\\(un\\|subst\\|macro\\|advice\\)")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-funk-alist))
		((looking-at "def\\(type\\|struct\\|class\\|ine-condition\\)")
 		 (forward-sexp 2)
 		 (if (=3D (char-after (1- (point))) ?\))
 		     (progn
 		       (forward-sexp -1)
 		       (down-list 1)
 		       (forward-sexp 1)))
 		 (push (imenu-example--name-and-position)
 		       index-type-alist))
		((looking-at "algorithm")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-algo-alist))
		((looking-at "generator")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-gen-alist))
		((looking-at "thread")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-thread-alist))
		((looking-at "merge")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-merge-alist))
		((looking-at "mute")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-mute-alist))
		((looking-at "definstrument")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-inst-alist))
		((looking-at "with-sound")
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-unknown-alist))
		(t
		 (forward-sexp 2)
		 (push (imenu-example--name-and-position)
		       index-unknown-alist)))))))
    (imenu-progress-message prev-pos 100)
    (and index-unknown-alist
	 (push (cons (imenu-create-submenu-name "Div...") index-unknown-alist)
	       index-alist))
    (and index-funk-alist
	 (push (cons (imenu-create-submenu-name "Funksjoner") index-funk-alist)
	       index-alist))
    (and index-var-alist
	 (push (cons (imenu-create-submenu-name "Variabler") index-var-alist)
	       index-alist))
    (and index-type-alist
 	 (push (cons (imenu-create-submenu-name "Typer") index-type-alist)
  	       index-alist))
    (and index-algo-alist
	 (push (cons (imenu-create-submenu-name "Algorithm") index-algo-alist)
	       index-alist))
    (and index-gen-alist
	 (push (cons (imenu-create-submenu-name "Generator") index-gen-alist)
	       index-alist))
    (and index-thread-alist
	 (push (cons (imenu-create-submenu-name "Thread") index-thread-alist)
	       index-alist))
    (and index-merge-alist
	 (push (cons (imenu-create-submenu-name "Merge") index-merge-alist)
	       index-alist))
    (and index-mute-alist
	 (push (cons (imenu-create-submenu-name "Mute") index-mute-alist)
	       index-alist))
    (and index-inst-alist
	 (push (cons (imenu-create-submenu-name "Instrumenter") index-inst-alist=
)
	       index-alist))
    index-alist))


(add-hook 'lisp-mode-hook
	  (function
	   (lambda ()
	     (setq imenu-create-index-function
		   'imenu-cm--create-lisp-index)
	     (setq imenu-extract-index-name-function
		   'imenu-cm--lisp-extract-index-name))))

(autoload 'follow-mode "follow"
  "Synchronize windows showing the same buffer, minor mode." t)

(autoload 'browse "filebrowser" "File and directory tree browser" t)
(global-set-key "=18=04" 'browse)
(define-key-after menu-bar-file-menu [browse-directory]
  '("Browse Directory..." . browse) 'dired)

(add-hook 'browser-file-display-hook
	  '(lambda ()
	     (set-background-color "brown")
	     (set-foreground-color "yellow2")))

(eval-after-load                                                         =
          =

 "filebrowser"
 '(browser-add-menu
   '(("[mM]akefile"                                                      =
            =

      ["Make"                    compile t])
     ("News"
      ["GNUS"                    gnus t])
     ("\\.tar$"
      ["Untar Archive"           (browser-shell "tar -xf %s") t]
      ["List Archive"            (browser-shell "tar -tvf %s") t])
     ("\\.\\(tar\\.gz\\|tar\\.[zZ]\\|tgz\\|taz\\)$"
      ["Untar Compressed Archive" (browser-shell "tar -zxf %s") t]
      ["List Compressed Archive" (browser-shell "tar -ztvf %s") t])
     ("Xdefaults\\|Xresources"
      ["Load X Resources"        (browser-shell "xrdb -merge %s") t])
     ("\\.\\(gif\\|jpg\\|xwd\\|xpm\\)$"
      ["View Image"              (browser-shell "xv %s &") t])
     ("\\.html$"
      ["Netscape"                (browser-shell "netscape -remote openURL=
(%s) &") t]))))


;;; OPPVRENGING AV URLER FOR CLMDOK OSV.

(defun browse-url-netscape (url &optional new-window)
  "Ask the Netscape WWW browser to load URL."
  (or (and
       (zerop
	(apply 'call-process "netscape" nil nil nil
	       (append;;browse-url-netscape-arguments
		(if new-window '("-noraise"))
		(list "-remote" =

		      (concat "openURL(" url =

			      (if new-window ",new-window")
			      ")")))))
       (message (concat "Sl=E5r opp URL " url)))
      (progn				; Netscape not running - start it
	(message "Starting Netscape...")
	(apply 'start-process "netscape" nil "netscape"
	       (append ;;browse-url-netscape-arguments
		(list url)))
	(message (concat "Sl=E5r opp URL " url)))))

(defun netscape-follow-url (event)
  (interactive "e")
  (let ((curwin (current-window-configuration)) url)
    (save-excursion
      (mouse-set-point event)
      ;; find url-at-point
      (require 'url)			;from w3
      (setq url (url-get-url-at-point)))
    (set-window-configuration curwin)
    (if url
        (progn
          (prin1 (concat "Open URL " url))
	  (browse-url-netscape url)
	  (call-process "netscape" nil 0 nil "-remote"
			(concat "openURL(" url ")"))
	  )
      (prin1 "No URL found at point"))))

(global-set-key [S-mouse-3] 'netscape-follow-url)



(cond (window-system (require 'framepop)))
(define-key global-map [f2] framepop-map)
(setq framepop-frame-parameters
   '((name . nil)
     (unsplittable . t)
     (menu-bar-lines . 0)
     (minibuffer . nil)
     (icon-type . t)
     (left . 1)
     (top . 0)
     (width . 77)
     (font . "-misc-fixed-medium-r-normal--14-130-75-75-c-70-iso8859-1")
     ;;(font . "9x15bold")
     (background-color . "antiquewhite3")
     (foreground-color . "black")))

(setq special-display-function 'framepop-special-display)
(pushnew "*Shell Command Output*" special-display-buffer-names)


(autoload 'mouse-drag-scroll-bar "my-mouse"
    "Change the width of a window by dragging on the scroll bar.")
(global-set-key [vertical-scroll-bar S-down-mouse-1]      =

                 'mouse-drag-scroll-bar)                   =

(global-set-key [vertical-line down-mouse-1]              =

                 'mouse-drag-scroll-bar)

(global-set-key [M-down-mouse-1] 'pasting-mouse-drag-secondary)   =

(global-set-key [M-S-down-mouse-1] 'moving-mouse-drag-secondary)  =

(global-set-key [down-mouse-2] 'mouse-drag-throw)                 =


(global-set-key "\C-x/"  'my-point-to-register)             =

(global-set-key "\C-x\\" 'my-point-remove-register)
(global-set-key "\C-cj";; like C-xj
		'(lambda () (interactive)                      =

		   (let ((event (list                          =

				 'mouse-1                      =

				 (list                         =

				  (selected-window)            =

				  1714                         =

				  (cons 200 30)                =

				  25033746                     =

				  ))))                         =

		     (setq EE event)                           =

		     ;;  Use fake event                        =

		     (my-point-mouse-jump-to-register event))))


;;; LISP ARBEID


(setq inferior-lisp-prompt
      "^[*[1-9]*[a-z]*]* *[A-Z]+([0-9]+): *\\|Stella \\[[-a-zA-Z0-9]+\\]:=
 \\|Edit: \\|new value: (<cr>=3DUnchanged)  \\|Lisp> ")

(global-set-key "=03=1A" (quote cm))

(setq inferior-lisp-program "/hf/notam/u1/andersvi/usr/bin/CM")

(add-hook 'inferior-lisp-mode-hook
	  '(lambda ()
	     (local-set-key (quote [up]) 'comint-previous-input)
	     (local-set-key (quote [down]) 'comint-next-input)
	     (local-set-key "\t" 'comint-dynamic-complete-filename)
	     (local-set-key "=01" 'comint-bol)
	     (setq comint-input-ring-size 300)
	     (auto-fill-mode 0)))

;;;;;;; INDENTERINGS-KODE:

(put 'algorithm 'lisp-indent-hook 3)
(put 'generator 'lisp-indent-hook 3)
(put 'mute 'lisp-indent-hook 'defun)
(put 'thread 'lisp-indent-hook 'defun)
(put 'merge 'lisp-indent-hook 'defun)
;(put 'object 'lisp-indent-hook '(like make-instance))
(put 'defobject 'lisp-indent-hook 'defun)
;(put 'make-object 'lisp-indent-hook '(like make-instance))
(put 'unless-chording 'lisp-indent-hook 0)
(put 'doitems 'lisp-indent-hook 1)
(put 'defscale 'lisp-indent-hook 'defun)
(put 'defmultiple-item 'lisp-indent-hook 'defun)
(put 'multiple-item-bind 'lisp-indent-hook 2)
(put 'formatting-slots 'lisp-indent-hook 1)
(put 'printing-random-thing 'lisp-indent-hook 1)
(put 'with-sound 'lisp-indent-hook 'defun)


(setq default-major-mode 'lisp-mode)

(add-hook 'lisp-mode-hook
	  (function
	   (lambda ()
	     (turn-on-auto-fill)
	     (local-set-key "=0D" (quote newline-and-indent))
	     (local-set-key "=03=1A" 'cm))))

(defun lisp-eval-buffer (&optional til-lisp)
  "Evaluer hele bufferet. Prefix-argument betyr g=E5 til lisp etterp=E5"
  (interactive "P")
  (unless (get-buffer "*inferior-lisp*") (cm))
  (comint-send-region (inferior-lisp-proc) (point-min) (point-max))
  (comint-send-string (inferior-lisp-proc) "\n")
  (if til-lisp (cm 1)))

(defun lisp-eval-buffer-til-lisp ()
  (interactive)
  (unless (get-buffer "*inferior-lisp*") (cm))
  (lisp-eval-buffer 1))

(defun til-lisp ()
  (interactive)
  (cm 1))


;;; s=F8rg for at en del hjelpe-funksjoner finner riktig 'package:

(setq lisp-arglist-command
      "(let ((fn '%s))
         (format t \"Arglist for ~a: ~a\" fn (excl::arglist fn))
         (values)) ") =


(setq lisp-describe-sym-command "(excl::describe '%s)")


;;; SETT I GANG LISP I EGET DEDIKERT VINDU:

(defvar cm-frame nil)

(defvar cm-framepars
  '((name . "Common Music")
    (unsplittable . t)
    (width . 80)
    (height . 30)
    (top . -1)
    (left . 1)
    (icon-type . t)
    (font . "-sgi-screen-medium-r-normal--15-150-72-72-m-80-iso8859-1")
    (border-color . "Black")
    (border-width . 20)
    (minibuffer . nil)
    (background-color . "DeepSkyBlue4")
    (foreground-color . "LightCyan1")
    (cursor-color . "yellow3")
    (mouse-color . "yellow1")
    (auto-raise . nil)
    ))

(defun cm (&optional til-lisp)
  (interactive "P")
  (unless (frame-live-p cm-frame)
    (setq cm-frame (make-frame cm-framepars))
    (set-face-foreground 'region "black" cm-frame)
    (set-face-background 'region "LightCyan3" cm-frame)
    (set-face-background 'modeline "black" cm-frame)
    (set-face-foreground 'modeline "yellow3" cm-frame)
    (set-window-buffer
     (frame-selected-window cm-frame) (start-lisp))
    (set-window-dedicated-p (frame-selected-window cm-frame) t)
    (progn (set-buffer inferior-lisp-buffer)
	   ;;(setq title-customized t)
	   (setq mode-line-format
		 '("   " "Common Music"
		   "   " global-mode-string "   %[("
		   mode-name mode-line-process minor-mode-alist
		   "%n" ")%]--"
		   (line-number-mode "L%l--") (-3 . "%p") "-%-"))))
  =

  (if (gaar-lisp)
      (when til-lisp =

	(progn (raise-frame cm-frame)
	       (set-mouse-position cm-frame 0 0)))
    (set-window-buffer
     (frame-selected-window cm-frame) (start-lisp))))

(defun gaar-lisp ()
  (get-buffer-process (if (eq major-mode 'inferior-lisp-mode)
				      (current-buffer)
				    inferior-lisp-buffer)))

(defun start-lisp ()
  (interactive)
  (if (not (comint-check-proc "*inferior-lisp*"))
      (progn (set-buffer (apply (function make-comint)
				"inferior-lisp" inferior-lisp-program nil))
	     (inferior-lisp-mode)))
  (setq inferior-lisp-buffer "*inferior-lisp*")
  (set-buffer inferior-lisp-buffer)
  (current-buffer))

(defun lisp-exit ()
  "Avslutt lisp.  Dette er ekstremt viktig p=E5 NoTAM forel=F8pig"
  (interactive)
  (when (get-buffer-process inferior-lisp-buffer)
    (comint-send-string (inferior-lisp-proc) "(excl::exit)\n"))
  (when (get-buffer "*inferior-lisp*")
    (kill-buffer "*inferior-lisp*")))


;;(defun lisp-reset ()
;;  "Reset lispen fra en hvilken som helst buffer i lisp-mode"
;;  (interactive)
;;  (when (get-buffer-process inferior-lisp-buffer)
;;    (comint-send-string (inferior-lisp-proc) "(excl::exit)\n"))
;;  (when (get-buffer "*inferior-lisp*")
;;    (kill-buffer "*inferior-lisp*")))


;;; lager rutine for =E5 sjekke om lisp er skrudd av f=F8r emacs avslutte=
s
(defun min-exit-emacs ()
  "Avslutt emacs, men sjekk for l=F8pende lisp-prosesser f=F8rst"
  (interactive)
  (if (not (get-buffer-process inferior-lisp-buffer))
      (save-buffers-kill-emacs)
    (lisp-exit)
    (save-buffers-kill-emacs)))

(define-key global-map [menu-bar file exit-emacs] 'undefined)
(define-key-after menu-bar-file-menu [avslutt-emacs]
  '("Quit" . min-exit-emacs) 'epatch)
(global-set-key "=18=03" (quote min-exit-emacs))

;;; diverse snarveier

(defun mixview (lydfil)
  (interactive "fmxv (filnavn) : ")
  "Sett i gang en mxv-jobb"
  (background (concat "mxv " lydfil)))

(defun rt ()
  (interactive)
  "f=E5 igang RT"
  (background "rt"))

(defun bredit ()
  (interactive)
  "f=E5 igang bredit"
  (background "bredit"))

(defun spill ()
  (interactive)
  "spill siste lyd med (dac)"
  (when (get-buffer-process inferior-lisp-buffer)
    (comint-send-string (inferior-lisp-proc) "(dac)\n")))




(add-hook 'inferior-lisp-mode-hook
	  (function
	   (lambda ()
	     (local-set-key "=03p" 'spill)
	     (local-set-key "=03m" 'mixview)
	     (local-set-key "=03r" 'rt)
	     (local-set-key "=03b" 'bredit))))

(add-hook 'lisp-mode-hook
	  (function
	   (lambda ()
	     (local-set-key "=03p" 'spill)
	     (local-set-key "=03m" 'mixview)
	     (local-set-key "=03r" 'rt)
	     (local-set-key "=03b" 'bredit))))


(add-hook 'dired-mode-hook
	  (function
	   (lambda ()
	     (local-set-key "=03p" 'spill)
	     (local-set-key "=03m" 'mixview)
	     (local-set-key "=03r" 'rt)
	     (local-set-key "=03b" 'bredit))))


;;; lag Lisp-meny i alle buffere:


(defconst tools-map-lisp-menu
  '("Lisp-Tools"
    ["CM"	        	cm t]
    ["Avslutt CM!"		lisp-exit t]
    ["MiXViews"                 mixview t]
    ["RT"                       rt t]
    ["bredit"                   bredit t]
    ["Spill siste lyd"          spill t]
    ["Quit"			min-exit-emacs t]))

(defconst lisp-mode-lisp-menu
  '("Common-Music"
    ["Start CM"	        	cm t]
    ["Avslutt CM!"		lisp-exit t]
    ["Evaluer uttrykk"	lisp-eval-defun t]
    ["Evaluer region"		lisp-eval-region t]
    ["Evaluer buffer"		lisp-eval-buffer t]
    ["Evaluer buffer - g=E5 lisp"	lisp-eval-buffer-til-lisp t]
    ["Load lisp-file"		lisp-load-file t]
    ["MiXViews"                 mixview t]
    ["RT"                       rt t]
    ["bredit"                   bredit t]
    ["Spill siste lyd"          spill t]
    ["Quit"			min-exit-emacs t]))


(easy-menu-define lisp-mode-lisp-menu lisp-mode-map
		  "Lisp mode operasjoner" lisp-mode-lisp-menu)

;(easy-menu-define lisp-mode-lisp-menu inferior-lisp-mode-map
;		  "Lisp mode operasjoner" lisp-mode-lisp-menu)


;;(defconst lisp-mode-complete-menu
;;  '("Filnavn"
;;    ["Fullf=F8r filnavn"		comint-dynamic-complete-filename t]
;;    ["Filnavn-listing" comint-dynamic-list-filename-completions t]
;;    ["Ekspander filnavn"	comint-replace-by-expanded-filename t]))

;;(easy-menu-define lisp-mode-complete lisp-mode-map
;;		  "Filnavn operasjoner" lisp-mode-complete-menu)

;;(easy-menu-define lisp-mode-complete inferior-lisp-mode-map
;;		  "Filnavn operasjoner" lisp-mode-complete-menu)
 =

;;(define-key inferior-lisp-mode-map [menu-bar completion] 'undefined)
;;(define-key inferior-lisp-mode-map [menu-bar signals] 'undefined)


(global-set-key (quote [f5]) (quote other-frame))


(global-set-key '[print] 'ps-spool-buffer-with-faces)
(global-set-key '[S-execute] 'ps-spool-region-with-faces)
(global-set-key '[C-print] 'ps-despool)

--Multipart_Thu_Oct__2_11:26:09_1997-1--

Date: Thu, 2 Oct 1997 14:48:55 -0500 (CDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971001205355.26659C-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Stella bugs in new CM
Cc: cmdist@ccrma.Stanford.EDU

>- The unmute command doesn't work - the mute flag doesn't go away (at


In stella.lisp, replace the current version of this defcommand with the
following:


(tl:defcommand "UNMUTE" unmute-cmd "Unmark objects as silent."
*commands*)



>- The paste command is seriously ill. After copying one event to the


in stella.lisp, replace the current paste-cmd definintion with the
following. notice that ive

changed the behavior to make it less confusing, the new behavior is


paste {place}*


where {place}* is an optional name or location to paste at. if you dont
specify {place}

or its not already a thread then a new container is created to hold the
pasted objects.


ill update the archives with the changes tomorrow morning.


----------------------------------------------------------------------------=
-------

(defcmd paste-cmd (input)

  (check-top-level)

  (unless (subobjectsp .pasteboard.)

    (tell-user "~:(~A~) is empty." (object-name .pasteboard.))

    (cmdreturn nil))

  (with-args (input :argchecking t :syntax "PASTE {place}*")

             ((str :reference))

    (let (pos name new? objects)

      (if str=20

        (progn =20

          (multiple-value-setq (pos name)

            (ask-position :prompt "Paste position: " :only-one
:reference

                          :include-containers :absolute-ok

                          :focus (focus-container )=20

                          :null-ok t :default str))

          (cond ((eq pos ':aborted)

                 (return-from paste-cmd nil))

                ((null pos)

                 (if (find-if #'alpha-char-p name)

                   (setf pos=20

                         (make-object (list 'thread=20

                                            (intern (string-upcase
name))))

                         new? t)

                   (cmderror "Not a position or name: ~S" name)))

                ((singleref? pos)

                 (let ((x (refobject pos)))

                   (when (typep x 'container)

                     (setf pos x))))

                ((rangeref? pos)

                 (let ((x (refcontainer pos)))

                   (remove-cmd-aux pos)

                   (setf pos=20

                         (if (>=3D (caar pos) (object-count x))=20

                           x (makeref x (caar pos))))))

                (t

                 (cmderror "Position not an index or range" ))))

        (progn

          (if (and (=3D (object-count .pasteboard.) 1)

                   (typep (first (container-objects .pasteboard.))

                          'id-mixin))

            (setf pos .top-level.)

            (setf pos (make-object 'thread)

                  new? t))))

      (setf objects

            (mapcar

             #'(lambda (o &aux (c (copy-object o)))

                 (when (typep c 'id-mixin)

                   (rename-object c (gentemp (format nil "~A-COPY-"

                                                     (object-name o)))

                                  (object-name c)))

                 c)

             (container-objects .pasteboard.)))

      (add-cmd-aux objects pos "Pasted")

      (when new? (update-top-level t)))))





From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Thu, 2 Oct 1997 17:12:26 -0700
In-Reply-To: Larry Troxler <lt@westnet.com>
        "New CM Help missing API doc?" (Oct  1,  8:53pm)
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


 | And a question/suggestion: Would it make sense to also have an Emacs/W3
 | browsing mode? Or would such a thing make more sense if implemented
 | entirely in Emacs, not using the CM help module?

afaik w3 can't be messaged from another process, which makes it
impossible to fire it up automatically.  let me know if there is
a way to call an emacs function from an inferior process!


Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com> <9710021712.ZM7287@ulysses.stanford.edu>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 03 Oct 1997 08:49:38 +0200
In-Reply-To: Tobias Kunze's message of Thu, 2 Oct 1997 17:12:26 -0700
Lines: 15
X-Mailer: Gnus v5.3/Emacs 19.31

  "t" == Tobias Kunze <tkunze@ulysses.Stanford.EDU> writes:
  t> afaik w3 can't be messaged from another process, which makes it
  t> impossible to fire it up automatically.  let me know if there is a
  t> way to call an emacs function from an inferior process!

You can get the gnuserv utility from

   ftp://notam.uio.no/pub/sgi/gnuserv-2.1alpha.tar.gz

It should be quite simple in use, and is an extension of the
'emacsclient' program which comes bundled AFAIK.  You type
(gnuserv-start) in emacs, and from a shell (or lisp) you can send
commands, files to open, URLs to browse etc, via the 'gnuclient or
'gnudoit commands.


Date: Fri, 3 Oct 1997 11:27:00 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: New CM Help missing API doc?
Cc: cmdist@ccrma.Stanford.EDU

forgot to reply to these questions in my previous post.


>According to changes.text, the old api.text is incorporated into the
HTML.

>But I don't see it anywhere (not in the dictionary, not linked to
from

>cm.html).  


Stella [Top-Level]: help Application+Program+Interface


or see the url:


file:/hd/lisp/rel/xcm/doc/dict/A.html#Application+Program+Interface



>Another nitpick. With *help-browser* set to nil, there seems to be a

>problem selecting a specific help topic from a list of matches, if
the

>desired topic is a substring of the others:


Stella [Top-Level]: help algorithm exact t






Date: Sat, 4 Oct 1997 09:27:16 -0700 (PDT)
From: Mari <masuda@sxt7.space.lockheed.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM locsig question
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


Hi,

I am new to CLM, so to get more familiar with it my professor gave me a 
granular synthesis instrument that sort of works, but not really, and 
asked me to fix it up as my first project.  I read the CLM documentation 
(clm.html) about locsig, and from that I gathered that locsig puts out a 
stereo signal.  When testing the instrument with different :degree 
arguments, I could not tell that any changes were taking place.  
However, I could hear a difference when changing the :distance and 
:reverb-amount arguments.  When I opened the output sound file with Tom 
Erbe's SoundHack, it said it was a mono file.  Is there something special 
I need to do to get a stereo signal?  Also, are valid :degree arguments 
for stereo output from 0 to 180 or 0 to 359?  I am using CLM on a Power 
Mac 7600/132 with MCL 4.1 and Codewarrior Pro 1.

Thanks a lot,
Mari

..................................
 Mari Masuda * mbmasuda@colby.edu  
 www.colby.edu/personal/mbmasuda/  
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^



Date: Sat, 4 Oct 1997 12:46:20 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: 
 <Pine.OSF.3.91.971004091048.13041B-100000@sxt7.space.lockheed.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Mari <masuda@sxt7.space.lockheed.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CLM locsig question
Cc: cmdist@ccrma.Stanford.EDU

use the :channels keyword argument to wiht-sound. The following example
will write test.snd in stereo at 44100 sampling rate.  stereo left-to-right
is defined as degree 0-90, ie think of it as the fromt segment of a
"quadraphonic" (4 speaker) space: 0-90-180-270, but clm is very forgiving
so probably does an appropiate modulus for the specified number of channels.

be sure to read the help on with-sound -- it has lots of other keyword
arguments

(with-sound (:output "test.snd" :channels 2 :srate 44100)
  (fm-violin 0 1 440 .1))



>Hi,
>
>I am new to CLM, so to get more familiar with it my professor gave me a
>granular synthesis instrument that sort of works, but not really, and
>asked me to fix it up as my first project.  I read the CLM documentation
>(clm.html) about locsig, and from that I gathered that locsig puts out a
>stereo signal.  When testing the instrument with different :degree
>arguments, I could not tell that any changes were taking place.
>However, I could hear a difference when changing the :distance and
>:reverb-amount arguments.  When I opened the output sound file with Tom
>Erbe's SoundHack, it said it was a mono file.  Is there something special
>I need to do to get a stereo signal?  Also, are valid :degree arguments
>for stereo output from 0 to 180 or 0 to 359?  I am using CLM on a Power
>Mac 7600/132 with MCL 4.1 and Codewarrior Pro 1.
>
>Thanks a lot,
>Mari
>
>..................................
> Mari Masuda * mbmasuda@colby.edu
> www.colby.edu/personal/mbmasuda/
>^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^




Date: Sat, 4 Oct 1997 09:48:49 -0700 (PDT)
From: Juan Pampin <juan@ccrma.Stanford.EDU>
X-Sender: juan@cmn19
Reply-To: Juan Pampin <juan@ccrma.Stanford.EDU>
To: Mari <masuda@sxt7.space.lockheed.com>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: CLM locsig question
In-Reply-To: <Pine.OSF.3.91.971004091048.13041B-100000@sxt7.space.lockheed.com>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi Mari,
you should use the :channels key in the with-sound parameters list to
change the output to stereo (or to whatever other number than 1). The call
to your instrument should look like this:

(with-sound (:channels 2)
  (your-instrument ... ))

The degree parameter accepts values between 0 an 90 degrees (you can
consider 0 as your left channel and 90 your right one being, 45 the
middle).
In order to get the reverb to work you should compile and load one of the
reverb instruments coming with the CLM distribution, for example nrev.ins.
Then you have to add the :reverb key in the with-sound parameters list as
well, and specify the name of the reverb instrument you are using:

(with-sound (:channels 2 :reverb nrev)
  (your-instrument ...)) 

You can take a look to the with-sound input in the documentation for more
details.

Enjoy!
JUAN


Date: Mon,  6 Oct 97 05:47:29 PDT
From: bil (To: cmdist)
To: cmdist
Subject: Re: CLM locsig question and other news

Also, if you want stereo output by default, set *clm-default-channels* 
to 2.

Snd now runs in Unixware2 and OpenServer5 thanks to Larry Plona.

I added "RPM" versions of the Snd binaries and sources to
the ccrma ftp site -- perhaps more convenient for Redhat Linux users.


Date: Thu, 9 Oct 1997 14:04:59 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: xcm-ppc.sea.bin update

I've placed an updated version of binaries/xcm-ppc.sea.bin and
xcm.sea.bin on ftp-ccrma.stanford.edu. The binary update adds an MCL
kernel patch to fix a macroexpansion problem in compilerless
application images.  Both updated archives also include support for
Cyberdog, an WWW browser from Apple that requires much less memory than
Netscape. Cyberdog is a good alternative to Netscape for people who
want to browse html documentation and use Lisp at the same time.  You
can get Cyberdog at http://cyberdog.apple.com/download.html.  To make
Cyberdog the default browser add (setf *help-browser* :cyberdog) to
your cminit.lisp file.  


Finally, I didn't explain in the orignal posting that the
xcm-ppc.sea.bin application is a fully functional MCL lisp image, it is
NOT an MCL demo version!   The application only lacks Digitool's
compiler and the inspect utility due to the software release agreement
-- the CM kernel is itself compiled and the system is very responsive. 
Since CLM does not need the Lisp compiler either I am going to add it
to the application sometime in the next few weeks, but of course you
would still need to purchase CodeWarrior if you want to compile
definstruments.


Date: Thu, 9 Oct 1997 17:08:24 -0400 (EDT)
From: Sean Ferguson <ferguson@sound.music.mcgill.ca>
To: Rick Taube <taube@uiuc.edu>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: xcm-ppc.sea.bin update
In-Reply-To: <v03007801b06285f060d7@[128.174.92.150]>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Is the Mac version ppc only, or is it a fat binary?

Sean Ferguson,
Owner of an antique NuBus 68K Mac...
                                    
     		      "I believe in an open mind, but not so open that 
      			 your brains fall out."
              		 	-Arthur Hays Sulzberger
               	 	       Publisher, The New York Times (1935-61)

Subject: Re: xcm-ppc.sea.bin update
Date: Fri, 10 Oct 97 11:47:31 +0200
X-Sender: fdahl@mail.ifnm.hdk-berlin.de
X-Mailer: Claris Emailer 1.1
From: orm finnendahl <fdahl@ifnm.hdk-berlin.de>
Cc: <cmdist@ccrma.Stanford.EDU>
Mime-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"

On October, 9th 1997 Rick Taube wrote:

> I've placed an updated version of binaries/xcm-ppc.sea.bin and
> xcm.sea.bin on ftp-ccrma.stanford.edu. The binary update adds an MCL
> kernel patch to fix a macroexpansion problem in compilerless
> application images.  Both updated archives also include support for
> Cyberdog, an WWW browser from Apple that requires much less memory than
> Netscape. Cyberdog is a good alternative to Netscape for people who
> want to browse html documentation and use Lisp at the same time.  You
> can get Cyberdog at http://cyberdog.apple.com/download.html.  To make
> Cyberdog the default browser add (setf *help-browser* :cyberdog) to
> your cminit.lisp file.  


I can't find the file "xcm-ppc.sea.bin" on the ccrma ftp server. 

The directory at "ftp://ccrma-ftp.stanford.edu/pub/Lisp/cm/"  reads out 
as follows: 

  automaton.gif        13 Kb    Tue Sep 30 15:51:00 1997 GIF Image
  binaries/                     Mon Sep 29 20:50:00 1997 Directory
  cm.README           660 bytes Fri Jul 19 00:00:00 1996 
  cm.sea.bin                    Mon Sep 29 15:59:00 1997 Symbolic link
  cm.tar.gz                     Mon Sep 29 15:59:00 1997 Symbolic link
  cm.zip                        Mon Sep 29 15:58:00 1997 Symbolic link
  old/                          Mon Sep 29 15:57:00 1997 Directory
  xcm.sea.bin         880 Kb    Thu Oct  9 16:47:00 1997 Macintosh 
StuffIt Archive
  xcm.tar.gz          732 Kb    Thu Oct  2 22:27:00 1997 GNU Zip 
Compressed Data
  xcm.zip             779 Kb    Fri Oct  3 12:57:00 1997 application/x-zip


I downloaded the file "xcm.sea.bin", but there was no hint for a fully 
functional lisp image in the documentation. I only found an installation 
guide for use with the lisp compiler. 

Can anybody help?

Orm

Date: Fri, 10 Oct 1997 09:42:59 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <199710100935.LAA30909@webern.ifnm.hdk-berlin.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: orm finnendahl <fdahl@ifnm.hdk-berlin.de>,
        Sean Ferguson <ferguson@sound.music.mcgill.ca>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: xcm-ppc.sea.bin update
Cc: cmdist@ccrma.Stanford.EDU

>I can't find the file "xcm-ppc.sea.bin" on the ccrma ftp server.

its in the cm/binaries subdirectory:
o   ftp://ftp-ccrma.stanford.edu/pub/Lisp/cm/binaries/xcm-ppc.sea.bin

there are two other binary images of possible interest in the same directory:
o   ftp://ftp-ccrma.stanford.edu/pub/Lisp/cm/binaries/xcm-linux.tar.gz
    a fully functional CLM and CM in ACL4.1/Linux (Intel), includes compiler
o   ftp://ftp-ccrma.stanford.edu/pub/Lisp/cm/binaries/xcm-win32.zip
    a fully functional CM in CLISP for NT and Win95, includes compiler
see the RELEASE file in the archives for more information.


>Is the Mac version ppc only, or is it a fat binary?

Sorry its currently for PPC only. It doesmt run on 68k machins because I
cant figure out how to load shared libraries on 68k macs in MCL. Despite
the fact that cm's MidiLib shared lib is complied fat and Apple's  CFM-68K
Runtime Enabler is installed I am unable to successfully load it. (The mac
keeps complaining about "MathLib" ...)  If anyone knows how to load shared
libs in MCL 3.2 I'd like to hear from you, if I could fix this then the
whole system including the new OMS interface would run on older macs too.
The only other fix would be for me to hack the system to omit MIDI real
time support on older macs; hopefully there is a better solution!

Date: Thu, 16 Oct 1997 21:42:08 -0400 (EDT)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM (thread) not back-compatible? (minor?)
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I'm not 100 % sure (confusion factor), but I think that the new version of
(thread) is not entirely compatible with the old one. However, this may
not matter, being a case of GIGO due to lack of understanding of how
symbols work.

The difference seems to be this:


(thread (make-symbol "X") nil) used to work,
but now it seems I need to use (thread (intern "X") nil).

In the first case the thread is created, by references to "X" in stella
result in complaints about a bad object reference. The same thing happened
before, when I thought I could use a string for that second arg to thread.

I suppose that I should have been using "intern" and not "make-symbol" all
along; nevertheless this is a case of code that worked before and doesn't
any more. (but then again, if raw ground beef doesn't kill you, that
doesn't mean it's safe to continue eating it - I'll assume that
"make-symbol" is raw in this case)

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Sender: root@fingerprint.sci.fi
Date: Fri, 17 Oct 1997 12:44:30 +0300
From: Matti Koskinen <mjkoskin@sci.fi>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.0 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: CMN with Linux AC4.3
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi

Has anybody succeeded in building common music notation with
Linux ACL4.3 on a system with 16 MB RAM?

I tried to build CMN first with the pb_cl (prebuilt image) and
while compiling cmn4.lisp and doing gc, acl crashes with segmentation
violation. It took over 20 MB's of swap in that point.

Then I built cl from the libraries using the default values and
tried again. While compiling cmn4.lisp it crashed again, this time
the swap used was only 16 MB.

Building CM and CLM goes ok.

If someone has succeeded, what are the values for cl's speed, safety
and optimization?

I'm using Linux 2.0.0

With the latest clisp, everything goes ok, but using size in scores
gives an error (It's a clisp bug, or property)

-matti

mjkoskin@sci.fi

Date: Fri, 17 Oct 1997 09:24:25 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971016213603.22217A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM (thread) not back-compatible? (minor?)
Cc: cmdist@ccrma.Stanford.EDU

>In the first case the thread is created, by references to "X" in
stella

>result in complaints about a bad object reference. The same thing
happened

>before, when I thought I could use a string for that second arg to
thread.

>


the name table does not compare strings, its an #'equal hashtable. im
suprised you example ever worked. if you want to gensym names you can
use NAME:



Stella [Top-Level]: (thread (name 'x t) () )

#<<THREAD: X10>


Stella [Top-Level]: show x10

Object:    X10

Type:     Thread

Status:   Normal

Objects:  0

Start:    unset


Stella [Top-Level]: 



Sender: root@westnet.com
Date: Fri, 17 Oct 1997 20:23:05 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
To: cmdist@ccrma.Stanford.EDU
Subject: CM: Print-representation of Rest 

Did rests always print like this? I seem to remember something a little
friendlier, but I could be mistaken...


Stella [Top-Level]: new thread t1
New object position: (<cr>=Top-Level) 

Stella [Top-Level]: go t1

Focus:     T1
Type:     Thread
Status:   Normal
Objects:  0
Start:    unset

Stella [T1]: new rest
Number of rests to create: (<cr>=*) 2
Slots and values: rhythm 1
New object position: (<cr>=T1) 

Stella [T1]: list
T1:
     1. #<REST 1#x88cfb32> 
     2. #<REST 1#x88cfc5a> 

--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --


Sender: root@westnet.com
Date: Fri, 17 Oct 1997 20:40:50 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
To: cmdist@ccrma.Stanford.EDU
Subject: Midi recorder for Linux/CM?

Hopefully it's not too annoying of me to be asking this once again, but
it would be nice to be able to find a Linux command-line MIDI file
recorder that could be integrated with Common Music. 

The only suggestions I've got was to work from the "mp" that is in the
CMU adagio distribution (Roger Dannenberg's Moxy-derived stuff). This
seems to be a bit overkill, but maybe I could start hunting through the
source.

At the risk of getting off the subject, it seems that in Linux, the only
way to get an acceptable MIDI recorder, is to use an authentic MPU-401
or clone, which supports intelligent mode using its own clock. This is
because the Linux clock gives only 10ms resolution, which most will
agree is not good enough for all MIDI applications. Also, the OSS
drivers, the last time I asked, do not support MIDI-thru, and in UART
mode, this needs to be done in software, I think!

So, this situation, I think is sadly ironic - what was easily handled by
the CPU years ago with 386 machines running DOS, now either has to be
done with horrible time slop, or by going back to MPU intelligent mode,
wasting ISA bus cycles on something the host CPU could handle much more
efficiently, if it were running a real-time OS.

Ooop, I guess that turned into a rant, didn't it? Maybe we need to put
our MIDI and sound cards on our old 486 boards, burn some kind of
deterministic handler into the BIOS sockets, and talk to them from our
Linux machines through ethernet. 

Any ideas as to what mailing lists or newsgroups I could more
appropriately bring this kind of subject  on, would be much appreciated.

... and in the mean time, back to the subject, oh yeah, which was  a
MIDI recorder for Linux/CM, any suggestions as to the easiest way to
come up with one, hopefully starting from existing sources, would be
welcome.
  
--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Fri, 17 Oct 1997 17:42:38 -0700
In-Reply-To: Larry Troxler <lt@westnet.com> "Midi recorder for Linux/CM?" (Oct 17,  8:40pm)
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: Midi recorder for Linux/CM?


Re integrating a command-line MIDI recorder into cm: i don't think
it will happen.  What we are close to having "happen" is the linux
port of the new midi library cm is using, which supports recording.
that is, you type `receive' in stella (or call the lisp hook) and
record with whatever function you want to map over the incoming
data.  it already works ok on macs and the sgi and should be close
to that on linux (although i realize that linux doesn't seem to be
the platform of choice when it comes to MIDI).

that does not serve your command-line needs, but it'll serve all your
midi needs in cm.



Date: Sat, 18 Oct 1997 00:17:51 -0400 (EDT)
From: Mari <mbmasuda@colby.edu>
To: cmdist@ccrma.Stanford.EDU
Subject: another CLM locsig question


Sorry if this is really dumb, but I don't understand why the following 
instrument doesn't work.  It compiles and loads all right, but when I try
to use it, all it does is make an output file of complete silence.  At 
least it makes the right number of seconds of silence...


( definstrument locsig-test ( start-time duration file
	
    &key
    ( degree 45 )
    ( distance 1 )
    ( reverb-amount .05 ))

    ( let*
        ( ( beg ( floor ( * start-time sampling-rate )))
        ( end ( floor ( * duration sampling-rate )))
        ( f ( open-input file ))
        ( loc ( make-locsig :degree degree 
                            :distance distance
                            :revscale reverb-amount )))

	
    ( run
        ( loop for i from beg to end do
            ( locsig loc i f )))

    ( close-input f )))
			


Thanks,
Mari

..................................
 Mari Masuda * mbmasuda@colby.edu
 www.colby.edu/personal/mbmasuda/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

In-Reply-To: <Pine.hpx.3.96.971018000919.28562A-100000@host-00.colby.edu>
X-Nextstep-Mailer: Mail 3.3 (Enhance 1.3)
From: Bill Schottstaedt <bil>
Date: Sat, 18 Oct 97 08:03:08 -0700
To: Mari <mbmasuda@colby.edu>
Subject: Re: another CLM locsig question
cc: cmdist

Locsig's third argument should be the floating point
value you want to output at the given sample, so in

( locsig loc i f )))

"f" is the file descriptor returned by open-input --
it is a sort of pointer to the file that you can
use with readin or ina to get particular samples.
The samples are then what is passed to locsig.
So

( locsig loc i (ina i f)))

might be closer to what you want.


Date: Sat, 18 Oct 1997 11:19:20 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.hpx.3.96.971018000919.28562A-100000@host-00.colby.edu>
To: Mari <mbmasuda@colby.edu>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: another CLM locsig question
Cc: cmdist@ccrma.Stanford.EDU

>    ( let*
>        ( ( beg ( floor ( * start-time sampling-rate )))
>        ( end ( floor ( * duration sampling-rate )))

I think you want that last line to read:

         ( end (+ beg ( floor ( * duration sampling-rate ))))


Date: Mon, 20 Oct 97 06:27:27 PDT
From: bil (To: cmdist)
To: cmdist
Subject: clm mac/sgi and cmn clisp changes

Rick Taube has provided new CodeWarrior clm projects
for cw9-11 and cw12.  See README.clm.  Tobias Kunze
has provided acl sgi irix 6.3 or later bug fixes.
I fixed (I hope) the clisp+pcl cmn problem mentioned
a couple days ago by Matti Koskinen.  And clm now
has fancier type checks to try to give a warning for
cases like Mari Masuda's locsig example.
Marco Trevisani provided CyberDog support on the Mac.


From: Philip Lewis <lewispsc@leland.Stanford.EDU>
Subject: CM+CLM on Powerbook?
To: cmdist@ccrma.Stanford.EDU
Date: Wed, 22 Oct 1997 11:43:33 -0700 (PDT)
X-Mailer: ELM [version 2.4 PL25]
Mime-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

I've been wondering about platforms on which to run Common Music and
CLM. Is there any reason why Rick Taube's version incorporating MCL
wouold not run on a Powerbook 1400, which has a PowerPC processor?

Philip Lewis

Date: Wed, 22 Oct 1997 15:11:31 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <199710221843.LAA03871@elaine8.Stanford.EDU>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Philip Lewis <lewispsc@leland.Stanford.EDU>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM+CLM on Powerbook?
Cc: cmdist@ccrma.Stanford.EDU

>I've been wondering about platforms on which to run Common Music and
>CLM. Is there any reason why Rick Taube's version incorporating MCL
>wouold not run on a Powerbook 1400, which has a PowerPC processor?

the current xcm-ppc.sea should run fine on a powerbook. if you are using it
with midi then you will need to get oms, too.  we are very close to geting
the mac version of clm to run in the (compilerless) image as well, i hope a
full-blown clm+cm for the mac will be running in a matter of days! (clm
will still require codewarrior to create definstruments.)

Date: Wed, 22 Oct 97 12:55:50 -0700
From: alford (Ronald E. Alford)
To: cmdist
Subject: my little problem...
Cc: alford, hkt, tkunze


Does "mix" when used with "with-sound" lack an ability to pass values to "nrev"?

>From the following input: 

 (with-sound (:channels 2 :srate 44100 :scaled-to .92 :reverb nrev :reverb-data (:reverb-factor 1.2 :lp-coeff .95 
                                       :amp-env (0 .7 99 .8 100 0.0)) :decay-time 1.9 :verbose t :statistics t)
     (mix "Erato_HD:A_child:musicbox.aiff"   :input-file-start-time 0      :duration 15.21       ;;keep
         :amp-env '(0 .1 10 .3 90 .1 100 0)  :ampAA .7                     :ampAB .8 
                                             :envAA '(0 0   .3 .25 .7 .05 .9 .05) 
                                             :envAB '(0 .05 .3 .05 .7 .25 .9 .1)                          :start-time 0))

I get this following output:

"The Muse HD:MCL 4.0:clm:test.aiff"
? fasmix Erato_HD:A_child:musicbox.aiff 0.000 
"(clm_nrev0 0
  83790
  #<BOGUS object @ #x435031E> #<BOGUS object @ #x435001E> 21130)" nrev 0.000 The Muse HD:MCL 4.0:clm:test.aifftemp: 
  Duration: 14.1138, Last begin time: 0.0000
  Compute time: 12.165, Compute ratio: 0.86
  OutA max amp (pre-scaled): 0.116 (near 5.176 secs)
  OutB max amp (pre-scaled): 0.123 (near 10.127 secs)
  RevA max amp (pre-scaled): 0.000 (near 0.000 secs)  <--------------- ???????
fasmix The Muse HD:MCL 4.0:clm:test.aifftemp 0.000 
"The Muse HD:MCL 4.0:clm:test.aiff"

This is on my Mac 8100 using MCL 4.0...

;;;;;;;;;;;;;;;;;;;;;; using your add-sound example, I have the following input:

(with-sound (:channels 2 :srate 44100 :scaled-to .89 :reverb nrev :reverb-data 
                                           (:reverb-factor 1.1 :lp-coeff .95 :amp-env (0 .7 99 .7 100 0.0)) 
                                            :decay-time 1.9 :verbose t :statistics t)
  (add-sound "Erato_HD:A_child:musicbox-pan.aiff" 0.0 14.11)) 

;;;;;;;;;;;;;;;;;;;;;;;; where nrev works!!

? 
"(clm_add_sound0 0
  622251
  #<BOGUS object @ #x43501CE> #<BOGUS object @ #x435001E> 16)" add-sound 0.000 
"(clm_nrev0 0
  706043
  #<BOGUS object @ #x435030E> #<BOGUS object @ #x435001E> 21130)" nrev 0.000 The Muse HD:MCL 4.0:clm:test.aifftemp: 
  Duration: 16.0101, Last begin time: 0.0000
  Compute time: 45.610, Compute ratio: 2.85
  OutA max amp (pre-scaled): 0.888 (near 7.707 secs)
  OutB max amp (pre-scaled): 0.971 (near 10.127 secs)
  RevA max amp (pre-scaled): 0.087 (near 5.176 secs)   <--------------- ???????
fasmix The Muse HD:MCL 4.0:clm:test.aifftemp 0.000 
"The Muse HD:MCL 4.0:clm:test.aiff"

Does that mean that:

1. There is a bug that I cannot locate (does this do the same thing in NextStep and Linux)?
2. I write a modified "mix" that can take output from ampAA and ampBB for input to nrev?
3. I don't understand the "mix" utilization?

My goal was to mix a multitude of sound files into a final, performable tape piece...

any suggestions about getting nrev working with mix???

ron

p. s. thanks


Date: Wed, 22 Oct 1997 17:18:09 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: alford@ccrma.Stanford.EDU (Ronald E. Alford)
From: Rick Taube <taube@uiuc.edu>
Subject: Re: my little problem...
Cc: cmdist@ccrma.Stanford.EDU

hi ron!

>Does "mix" when used with "with-sound" lack an ability to pass values to
>"nrev"?

no, open should allow a reverb-data option for sound files:

	open foo.snd reverb nrev reverb-data (...)

type 'help clm-sound-file' for a list of these options. oops i just did
that and notice that this list is incomplete -- mix really supports all or
almost all of the with-sound keyword options, for now consult the defclass
of snd-mixin in clm.lisp until i can update the docs. ill check tomorrow
and make sure that every with-sound keyword is supported. but anyway
reverb-data should work right now.

hey can you send me a cassette of girltalk? (nice idea/title!... )



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Wed, 22 Oct 1997 21:00:22 -0700
In-Reply-To: Anders Vinjar <anders.vinjar@notam.uio.no>
        "Re: New CM Help missing API doc?" (Oct  2, 11:28am)
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com> 
	<copu3f0fr8y.fsf@leon.uio.no>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Anders Vinjar <anders.vinjar@notam.uio.no>, cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


Ok, I got gnudoit etc. working in xemacs courtesy Anders Vinjar
and could add help support for w3 if anyone wants me to do so,
but it's pretty ugly and slow.

Does anyone kow of any any reason why there should be w3 support?

Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com> <copu3f0fr8y.fsf@leon.uio.no> <9710222100.ZM17827@ulysses.stanford.edu>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 23 Oct 1997 10:45:59 +0200
In-Reply-To: Tobias Kunze's message of Wed, 22 Oct 1997 21:00:22 -0700
Lines: 21
X-Mailer: Gnus v5.3/Emacs 19.31

 "tk" == Tobias Kunze <tkunze@ulysses.stanford.edu> writes:
  tk>  Ok, I got gnudoit etc. working in xemacs courtesy Anders Vinjar
  tk> and could add help support for w3 if anyone wants me to do so, but
  tk> it's pretty ugly and slow.
  tk> 
  tk> Does anyone kow of any any reason why there should be w3 support?

Theres no harm having it in.  Newer versions of Netscape are quite
scrappy on the SGIs around here, with severe memory leaks leaving hanging
networks and machines (almost approaching the state of bogus lisps!).

Sales talk aside - it seems as if emacs is used for as much as possible &
I would love not having to setup Netscape to browse manuals.  If there is
an option to choose w3 as help-browser with CM etc., I will get gnuserv &
friends setup right.

We can imagine a instrument-building/compiling/executing-mode for CLM and
CMN, an emacs-interface akin to Capella for CM, with listings,
subgroupings etc. ordered in various buffers specialised to local tasks.
This will make an environment compatible across platforms extending the
lisp-shells lying around.  Built-in help is a first step.

Sender: root@fingerprint.sci.fi
Date: Thu, 23 Oct 1997 10:58:25 +0300
From: Matti Koskinen <mjkoskin@sci.fi>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.0 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Help with CM+CMN+CLM
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi

I've succeeded in building xcm, clm and  cmn, but integrating these
gives problems. CLM can be loaded, when compiling XCM. I tried
the example fm.ins, but compiling it gives warnings of all clm
functions. I had to explicitly give e.g. clm::make-oscil and after that
it works.

Building CMN in XCM stops with with an error: CMN::SCORE is not a class.
Does this has something to do with PCL? (I'm using clisp+pcl in CMN.)

Any help appreciated

thanks

-matti

mjkoskin@sci.fi


Date: Thu, 23 Oct 97 06:28:52 PDT
From: bil (To: alford (Ronald E. Alford))
To: alford (Ronald E. Alford)
Subject: Re: my little problem...
Cc: cmdist

> Does "mix" when used with "with-sound" lack an 
> ability to pass values to "nrev"?

The clm mix function is just a sort of wrapper around
fasmix, so it doesn't handle the reverb output itself --
there's an example in clm's useful.lisp called
rfasmix that does this.

Date: Thu, 23 Oct 1997 09:07:46 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <344F03A1.760735B5@sci.fi>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Matti Koskinen <mjkoskin@sci.fi>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Help with CM+CMN+CLM
Cc: cmdist@ccrma.Stanford.EDU

>gives problems. CLM can be loaded, when compiling XCM. I tried
>the example fm.ins, but compiling it gives warnings of all clm
>functions. I had to explicitly give e.g. clm::make-oscil and after that

sounds to me as if you may have compiled cm's pkg.lisp before you loaded
clm. cm inherits many symbols from clm -- if clm is not around when
pkg.lisp is first compiled the packages wont work correctly together. the
easiest fix is to delete all existing cm .fasl files, then in your
make-cm-local.lisp file, set clm-directory to the the clm binary directory,
and add :clm to the list of syntaxes. then rebuild and you should see clm
get autoloaded before cm starts to compile any of its sources. if you have
linux/386, the easiest solution is to ftp
ccrma-ftp://pub/Lisp/cm/binaries/xcm-linux.tar.gz -- its a prebuilt image
with clm and cm together.


Date: Thu, 23 Oct 1997 09:53:54 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <cop201cx3y0.fsf@leon.uio.no>
References: Tobias Kunze's message of Wed, 22 Oct 1997 21:00:22 -0700
 <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
 <copu3f0fr8y.fsf@leon.uio.no> <9710222100.ZM17827@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Anders Vinjar <anders.vinjar@notam.uio.no>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: New CM Help missing API doc?
Cc: cmdist@ccrma.Stanford.EDU


>Theres no harm having it in.  Newer versions of Netscape are quite
>scrappy on the SGIs around here, with severe memory leaks leaving hanging
>networks and machines (almost approaching the state of bogus lisps!).

why not just use lynx for browsing cm and clm docs from lisp? it doenst
require much memory. I think all you need to do is something like:

	(setf *help-browser* :lynx)
	(setf *help-browser-command* "/whatever/lynx -foo")




Date: Thu, 23 Oct 1997 11:29:14 -0400 (EDT)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <cop201cx3y0.fsf@leon.uio.no>
References: Tobias Kunze's message of Wed, 22 Oct 1997 21:00:22 -0700
 <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
 <copu3f0fr8y.fsf@leon.uio.no> <9710222100.ZM17827@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Anders Vinjar <anders.vinjar@notam.uio.no>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: New CM Help missing API doc?
Cc: cmdist@ccrma.Stanford.EDU


>CMN, an emacs-interface akin to Capella for CM, with listings,
>subgroupings etc. ordered in various buffers specialised to local tasks.
>This will make an environment compatible across platforms extending the
>lisp-shells lying around.  Built-in help is a first step.

acutally, my solution to the same problem would be to embrace browsers and
flush emacs! In other words, have a single fast machine be a "lisp/cm/clm
server" and communicate with it via structured web browsers, plugins, etc.
This way, the lisp process wouldnt even have to be on the same machine, or
even continent!



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Thu, 23 Oct 1997 12:37:49 -0700
In-Reply-To: Rick Taube <taube@uiuc.edu>
        "Re: New CM Help missing API doc?" (Oct 23,  9:53am)
References: Tobias  Kunze's  message  of  Wed 
	22 Oct 1997 21:00:22 -0700 <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com> 
	<copu3f0fr8y.fsf@leon.uio.no> 
	<9710222100.ZM17827@ulysses.stanford.edu> 
	<v03007801b074c0237fc8@[128.174.92.150]>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Rick Taube <taube@uiuc.edu>, Anders Vinjar <anders.vinjar@notam.uio.no>
Subject: Re: New CM Help missing API doc?
Cc: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


Actually, I prefer

  (setf *help-browser* :lynx)
  (setf *help-browser-command*
        "xwsh -fn '-*-courier-medium-r-normal--12-*-*-*-m-70-iso8859-1'
-autofork -ut -e lynx")

Give it a try!  snazzy colors, 1000 times faster than w3, no logging
to utmp, etc...  It rocks!

:)

But no problem, i guess i can add w3.


 | why not just use lynx for browsing cm and clm docs from lisp? it doenst
 | require much memory. I think all you need to do is something like:
 |
 | 	(setf *help-browser* :lynx)
 | 	(setf *help-browser-command* "/whatever/lynx -foo")

Sender: root@westnet.com
Date: Thu, 23 Oct 1997 18:45:48 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: t@ulysses.Stanford.EDU
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com> 
		<copu3f0fr8y.fsf@leon.uio.no> <9710222100.ZM17827@ulysses.stanford.edu>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Tobias Kunze wrote:
> 
> Ok, I got gnudoit etc. working in xemacs courtesy Anders Vinjar
> and could add help support for w3 if anyone wants me to do so,
> but it's pretty ugly and slow.
> 
> Does anyone kow of any any reason why there should be w3 support?

I was the one who recently brought the subject up. The reason I asked is
that I had already been viewing the help (manually) with W3 in Xemacs on
my Linux system. I am very limited in screen space (14" monitor), and so
I found it a bit clumsy to deal with a seperate lynx or netscape window;
having the HTML in a seperate Emacs window (not a seperate X window) is
much more efficicient in terms of space, and I found that since I was
using Xemacs for the Lisp interface anyway, it was much more consistent
to do everything in Xemacs. 

I will probably get a 17" monitor soon, so it will be interesting to see
if I still like this approach.

W3 sure is slow, though.
  
One question, though, do you really need gnudoit, gnuserv, etc? With
Linux ACL, I thought there was a way do directly evaluate expressions in
the Emacs session. I suppose the reason not to do it this way is that
other Lisps wouldn't be able to do it? Or am I missing something?

Larry

--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --



Sender: root@westnet.com
Date: Thu, 23 Oct 1997 18:49:14 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: Rick Taube <taube@uiuc.edu>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: Tobias Kunze's message of Wed, 22 Oct 1997 21:00:22 -0700
	 <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
	 <copu3f0fr8y.fsf@leon.uio.no> <9710222100.ZM17827@ulysses.stanford.edu> <v03007801b074c0237fc8@[128.174.92.150]>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Rick Taube wrote:
> 
> >Theres no harm having it in.  Newer versions of Netscape are quite
> >scrappy on the SGIs around here, with severe memory leaks leaving hanging
> >networks and machines (almost approaching the state of bogus lisps!).
> 
> why not just use lynx for browsing cm and clm docs from lisp? it doenst
> require much memory. I think all you need to do is something like:
> 
>         (setf *help-browser* :lynx)
>         (setf *help-browser-command* "/whatever/lynx -foo")


THis is what happens when I try it:  

Stella [Top-Level]: (setf cm::*help-browser* :lynx)
:LYNX
Stella [Top-Level]: (setf cm::*help-browser-command* "lynx")
"lynx"
Stella [Top-Level]: help
/bin/bash: setenv: command not found
Error opening terminal: emacs.

Was this supposed to run lynx in an emacs shell-mode window, or would it
run Lynx in a seperate xterm window. If the former, that might be an
interesting alternative to W3, which is slow and overkill.

Larry


--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --



Sender: root@westnet.com
Date: Thu, 23 Oct 1997 18:51:47 -0400
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: Rick Taube <taube@uiuc.edu>
Cc: Anders Vinjar <anders.vinjar@notam.uio.no>, cmdist@ccrma.Stanford.EDU
Subject: Re: New CM Help missing API doc?
References: Tobias Kunze's message of Wed, 22 Oct 1997 21:00:22 -0700
	 <Pine.SUN.3.96.971001205225.26659B-100000@westnet.com>
	 <copu3f0fr8y.fsf@leon.uio.no> <9710222100.ZM17827@ulysses.stanford.edu> <v03007803b074d5da9b15@[128.174.92.150]>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Rick Taube wrote:
> 
> >CMN, an emacs-interface akin to Capella for CM, with listings,
> >subgroupings etc. ordered in various buffers specialised to local tasks.
> >This will make an environment compatible across platforms extending the
> >lisp-shells lying around.  Built-in help is a first step.
> 
> acutally, my solution to the same problem would be to embrace browsers and
> flush emacs! In other words, have a single fast machine be a "lisp/cm/clm
> server" and communicate with it via structured web browsers, plugins, etc.
> This way, the lisp process wouldnt even have to be on the same machine, or
> even continent!


Ok,  sounds good. If you can finish this by this weekend, I'll try it
out.

Sorry, couldn't resist :-)

--
 Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --


X-Sender: mrac@pop3.demon.co.uk
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sat, 25 Oct 1997 20:32:36 +0100
To: Rick Taube <taube@uiuc.edu>
From: Janusz Podrazik <podrazik@mrac.demon.co.uk>
Subject: CM/OMS/Divice
Cc: cmdist@ccrma.Stanford.EDU

I can make the MIDI system work.

I use Opcode Studio 5 with 4 devices, compatible setup is Emulate MIDI Time
Piece, which use more then 2 devices.

My Setup:

Master KBD is on 1 (Modem-Cabel 1)
K2000i on 2 (Printer-Cabel 2)
K2000ii on 3 (Printer-Cabel 3)
ProMix01 on 4 (Printer-Cabel 4)

The setup works is working fine with Igor OMS 1.0.

Any idea!?

	Janusz

;;;    ---------------


Registering with OMS...
Done.

#<Midi Driver: Open>


CM MIDI Info:

;;;    --------------- MIDI Aystem Info:

Configured MIDI Interfaces:
  ->  "K2000i"
  <-  "K2000i"
  <-  "K2000ii"
  ->  "K2000ii"
  <-  "Klavier"
  <-  "ProMix01"
  ->  "QuickTime Music"
  ->  "Studio 5\321Modem/Printer "
  <-  "Studio 5\321Modem/Printer "
  ->  "Studio Patches pgm chg"


0

;;;    --------------- MIDI Environment Info:

MaxLChannels:      64
MaxRoutes:         16
MaxConnections:    16
NrOfInterfaces:    10
MaxMappings:      400
       free:      366

--- Chanmap: lchan -> {(route, chan)}+ ---
  0 -> (  0,   0)
  1 -> (  0,   1)
  2 -> (  0,   2)
  3 -> (  0,   3)
  4 -> (  0,   4)
  5 -> (  0,   5)
  6 -> (  0,   6)
  7 -> (  0,   7)
  8 -> (  0,   8)
  9 -> (  0,   9)
 10 -> (  0,  10)
 11 -> (  0,  11)
 12 -> (  0,  12)
 13 -> (  0,  13)
 14 -> (  0,  14)
 15 -> (  0,  15)

--- InvChanmap: (route, chan) -> {lchan}+ ---
(  0,   0) ->   0
(  0,   1) ->   1
(  0,   2) ->   2
(  0,   3) ->   3
(  0,   4) ->   4
(  0,   5) ->   5
(  0,   6) ->   6
(  0,   7) ->   7
(  0,   8) ->   8
(  0,   9) ->   9
(  0,  10) ->  10
(  0,  11) ->  11
(  0,  12) ->  12
(  0,  13) ->  13
(  0,  14) ->  14
(  0,  15) ->  15

--- Routemap: route -> {conn}+ ---
  0 ->   0

--- InvRoutemap: conn -> {route}+ ---
  0 ->   0

--- Input and Output Interfaces: interface  (reference) ---
Inputs:
Outputs:

NIL

;;;    ---------------



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Sat, 25 Oct 1997 14:25:21 -0700
In-Reply-To: Janusz Podrazik <podrazik@mrac.demon.co.uk>
        "CM/OMS/Divice" (Oct 25,  8:32pm)
References: <v03110700b077f1980997@[158.152.85.184]>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Janusz Podrazik <podrazik@mrac.demon.co.uk>, Rick Taube <taube@uiuc.edu>
Subject: Re: CM/OMS/Divice
Cc: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


> I can make the MIDI system work.

I take it you mean "can't".  Anyway, you didn't make any connections,
that is MIDI gets routed through the different maps, but is not really
associated with any interfaces.  given your setup, try

  Stella: open midi connections '(("Klavier" "QuickTime Music"))

or whatever input/output you want.  This opens one connection to the
named interfaces.  if you want more, things are getting complicated,
undocumenmted and aren't quite tested yet:

   Stella: open midi connections '(("K2000i" "K2000i")
                                    ("Klavier" "QuickTime Music"))

associates connection 0 with "K2000i" (in and out) and connection 1
(input) with "Klavier" and (output) "QT Music".  of course, there is no
connection 1 yet, so you'll have to add one:

   Stella: (midi-add-routemap 1 1)

now route 1 goes to connection 1.  you need to add mappings to
the channel map, too (since by default, there are only 16 logical channels
and all go to route 0, which by default goes to connection 0.

   Stella: (midi-add-channelmap 15 1 0)

adds a mapping to logical channel 15 that lets it go to route 1, chan 0.
Note that you can multiplex channels.  if you say

  (midi-add-routemap 0 1)

all midi messages written to route 0 go both to connection 0 and 1, etc.

Don't abuse it yet, it's not really tested.



Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sat, 25 Oct 1997 19:48:39 -0600
To: Janusz Podrazik <podrazik@mrac.demon.co.uk>
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: CM/OMS/Divice
Cc: cmdist@ccrma.Stanford.EDU

>  Stella: open midi connections '(("Klavier" "QuickTime Music"))

instead of always specifying the connections when you use OPEN you can set
the *midi-default-connections* in your cminit.lisp file. then you just type
COMMAND-M to open Midi, as in earlier releases. I may have forgotten to
tell people to read the README.OMS file and I may also have forgotten to
include it in the source distribution (check in the cm/doc folder).  Ive
included it here for your convenience.



------------------------------README.OMS------------------------------

CM's OMS interface is new and currently undocumented. This file is provided
to help you get an initial OMS connection working in CM with the least amount
of trouble, by establishing a "default MIDI connection".

In OMS, its possible to have a number of routes for incoming and outgoing MIDI
messages. You can have lots of these connections active at one time. These
connections can also be specified dynamically in CM.  But you very likly have a
"typical" MIDI configuration that you use most of the time, for example
receiving
and sending data to your external synth.  In this case, its easiest to save this
configuration so that -- unless you specify otherwise -- it is automatically
established whenever you Open MIDI. A default connection for OMS will cause
CM to
behave as it did in previous releases when it used Apple's MIDI Manager.

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

Directions for installing a default MIDI connection:

o Get and install OMS, then design your OMS studio document.  You can download
  OMS from http://www.opcode.com/downloads/oms/mac/

o Start Common Music, select Open from the MIDI submenu of the Common Music
  main menu. After a second you should see a printout in the Listener like:

  Registering with OMS...
  Done.
  #<Midi Driver: Open>

o Once MIDI is open, select "MIDI System Info" from the MIDI submenu. This will
  print a list of available input and output interfaces according to your OMS
  Studio Setup document. Inputs are marked by a left-arrow "<-" and outputs are
  marked by a right-arrow "->". This is what the printout looks like on my Mac:

  Configured MIDI Interfaces:
    <-  "K2500"
    ->  "K2500"
    ->  "QuickTime Music"

o Open the cminit.lisp file located in the same folder as the CM application.
  If you built CM from sources you may have to create this file.

o Add the following form to the cminit.lisp file, replacing the <INPUT> and
<OUTPUT>
  placeholders with the actual string values from your MIDI System Info display.

  (setf *midi-default-connections* '(( <INPUT>  <OUTPUT> )))

  For example, this is what this form looks like in my cminit.lisp file:

  (setf *midi-default-connections* '(( "K2500"  "K2500"  )))

o Save the cminit.lisp file, then quit and restart Common Music and open
MIDI again.
  (You can open MIDI using the keyboard shortcut COMMAND-M instead of using the
  menu).

o Test MIDI output by hitting COMMAND-`  (` is the backquote key). You
should hear
  sound on your synth.

o Test MIDI input by starting Stella with COMMAND-= (the equal key), then
selecting
  "Receive..." in the MIDI menu, then selecting Print in the pop-up dialog,
then
   click on Start. As you play your keyboard you should see the incoming
messages
   printed in the Listener window.


OMS is very complex and the CM interface is new, so expect some problems while
the dust settles.

Known Bugs
-----------
1  The OPEN command displays an annoying warning if MIDI is opened more
than once.
   Ignore it.
2  There is a bug in the MIDI environment Info display that does not list
inputs.




Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: MIDI on Irix 5.3
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 27 Oct 1997 17:01:58 +0100
Lines: 13
X-Mailer: Gnus v5.3/Emacs 19.31


It seems as cm/midi/sgi/sgi-midi.c breaks somewhere on an Irix 5.3 here,
at least I cant load sgi-midi.so while building CM.

It breaks when trying to find mdRegister() which is not defined in 5.3.

Would any one of you have an old version of sgi-midi.c/sgi-midi.so
running on an Irix-5.3 lying around, orelse have the ability to help me
get cm/midi/sgi/* get running on this 5.3 platform?



-- Anders Vinjar - from a nice, clear & cold autumn here in Oslo

From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 27 Oct 1997 12:14:36 -0800
In-Reply-To: Anders Vinjar <anders.vinjar@notam.uio.no>
        "MIDI on Irix 5.3" (Oct 27,  5:01pm)
References: <copwwizmbyh.fsf@leon.uio.no>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Anders Vinjar <anders.vinjar@notam.uio.no>, cmdist@ccrma.Stanford.EDU
Subject: Re: MIDI on Irix 5.3
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


 | It seems as cm/midi/sgi/sgi-midi.c breaks somewhere on an Irix 5.3 here,
 | at least I cant load sgi-midi.so while building CM.

Friends don't let friends use 5.3 for MIDI.  sgi-midi.so is a 6.2 binary
and hence does not run on 5.3 as binaries are forward, but not backwards
compatible.  MIDI is terribly broken under 5.3.  However, if you really
want to try, get rid of the mdRegister and mdUnRegister calls.  But by
all means try to upgrade to 6.2

-- Tobias - from a nice, clear & warm summer here in California :)

Sender: root@fingerprint.sci.fi
Date: Wed, 29 Oct 1997 23:40:38 +0200
From: Matti Koskinen <mjkoskin@sci.fi>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.0 i586)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Questions (and more)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I've got on with Common Music, but when one problem is solved, others
rise...

First of all, I removed all the .fas-files in CM-directories and could
integrate CLM in XCM via compiling. Earlier CLM was loaded, but
definstrument couldn't find any CLM-definitions. CMN loads, but
then while compiling XCM's classes.lisp, an error is issued, and I think
it's this clisp-bug in defmethod, it's just like the one there used to
be in CMN. ACL don't swallow CMN, it crashes in gc with seg. violation.

I made an algorithm that uses the piano.ins but get only a big screech
in the end when playing the test.snd. If I mix to test.clm and then
replace :time with :start and play the file, it sounds as I expected.
Then a question: Why XCM writes :TIME in the clm-file, not :START which
is defined in the definstrument?

Also I began to convert csound-instruments to clm, and couldn't find
an example how time-varying filtering is actually done. In the docs
there is this flt-a, but how to use it? I made an array of formnts and
switch from one to another in the run-loop. It works somehow on clisp,
acl gives an error saying that 'formnt isn't a valid element-type for
make-array.

Last, but not least, is there anything to be done to prevent clicks
in Linux with SB16? Every player gives a big click in the beginning
and in the end, no matter what the sound-file contains.

Thanks

-matti

mjkoskin@sci.fi


Date: Thu, 30 Oct 97 07:20:28 PST
From: bil (To: Matti Koskinen <mjkoskin@sci.fi>)
To: Matti Koskinen <mjkoskin@sci.fi>
Subject: Re: Questions (and more)
Cc: cmdist

The piano.ins problem can be fixed, I think, by making
the first "start" argument a non-keyword argument.  I
put a note in the file about this awhile ago, but
I'll go ahead and change the instrument.

There's an example of time-varying filtering in addflt.ins,
and noi-attempt in ugex.ins, and comb-filters in zd.ins.

flt-a is an array of coefficients, so if you know what
you're doing you can simply set its elements via
envelopes or whatever.  The function make-filter-coefficients,
and various others in fltdes.lisp may be helpful
in this regard.

The type to use in make-array is 'frmnt -- "formnt" is
the name of the associated generator -- there's an example
in clm.html under the name "cross-synthesis".


Date: Mon, 3 Nov 1997 14:07:10 -0500 (GMT-0500)
From: Sean Ferguson <ferguson@jasper.music.mcgill.ca>
To: cmdist@ccrma.Stanford.EDU
Subject: finding prime form
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi.

I'm wondering if anyone might have an *efficient* lisp program for finding
the prime form of a given set.  I've written my own and it works fine, but
when given many chords (ie 10s of thousands) with many voices, it is
extremely slow. I've compiled it and run it on a 200 MHz SGI and it still
is very bad.

I'm a composer, not a programmer, so I'm afraid that perhaps I've written
a slow version.  I'm hoping that someone who is more skilled has written a
version that would run faster.

Please email me at ferguson@music.mcgill.ca

Note that because of network problems my return address may be incorrect.
Use the one I've given, please.

Thanks in advance,

Sean Ferguson



X-Authentication-Warning: cmn27.stanford.edu: aguiar owned process doing -bs
Date: Mon, 3 Nov 1997 11:49:32 -0800 (PST)
From: Celso Aguiar <aguiar@ccrma.Stanford.EDU>
X-Sender: aguiar@cmn27
To: ferguson@music.mcgill.ca
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: finding prime form
In-Reply-To: <Pine.NXT.3.94.971103135851.1875C-100000@jasper>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

I don't know what lisp version you're using but generally in this cases
the right thing to do is to write a C routine and call it via the foreign
function interface. That's actually what CLM does (please, Bil, correct
me if I'm wrong) in its run loop which is all compiled into C. I've done 
a lot of that and found it an extremely useful resource for sound
computation, for example. In your case it should probably take recoding 
just one function into C, wherever the bottle-neck is.

+-----------------------------------------------------+
| Celso Aguiar - aguiar@ccrma.stanford.edu            |
| http://www-ccrma.stanford.edu/~aguiar               |
| Center for Computer Research in Music and Acoustics |
| CCRMA - Stanford University                         |
+-----------------------------------------------------+

On Mon, 3 Nov 1997, Sean Ferguson wrote:

> Hi.
> 
> I'm wondering if anyone might have an *efficient* lisp program for finding
> the prime form of a given set.  I've written my own and it works fine, but
> when given many chords (ie 10s of thousands) with many voices, it is
> extremely slow. I've compiled it and run it on a 200 MHz SGI and it still
> is very bad.
> 
> I'm a composer, not a programmer, so I'm afraid that perhaps I've written
> a slow version.  I'm hoping that someone who is more skilled has written a
> version that would run faster.
> 
> Please email me at ferguson@music.mcgill.ca
> 
> Note that because of network problems my return address may be incorrect.
> Use the one I've given, please.
> 
> Thanks in advance,
> 
> Sean Ferguson
> 
> 
> 


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 3 Nov 1997 14:29:27 -0800
In-Reply-To: Celso Aguiar <aguiar@ccrma>
        "Re: finding prime form" (Nov  3, 11:49am)
References: <Pine.LNX.3.96.971103114139.28862A-100000@cmn27>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: ferguson@music.mcgill.ca
Subject: Re: finding prime form
Cc: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


i refuse to deal with (forte's) set theory and, hence, have no
idea what you mean by prime form.  surely not '(c4 c4), which
is the only musically meaningful definition of prime that comes
to my mind.

but sarcasm aside, if you'd give an example, i may have an algorithm
around somewhere.


> I'm wondering if anyone might have an *efficient* lisp program for finding
> the prime form of a given set.  I've written my own and it works fine, but
> when given many chords (ie 10s of thousands) with many voices, it is
> extremely slow. I've compiled it and run it on a 200 MHz SGI and it still
> is very bad.

Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Mon, 3 Nov 1997 18:07:34 -0600
To: ferguson@music.mcgill.ca
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: finding prime form
Cc: cmdist@ccrma.Stanford.EDU

"Set Slave" is a Common Lisp pakage called  that can return normal and
prime forms, as well as  many other set manipulations.. i dont have the
email for you here at home, ill try to post it tomorrow.

Date: Mon, 3 Nov 1997 20:18:07 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Delete events whithout altering start times (leaving hole)?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

This issue comes up for me all the time, and I have yet to figure out the
most straightforward way of dealing with it.

Almost every time, when I delete events from a thread (no, make that
*every* time), I want to preserve the start-times of the rest of the
events (probably by changing the rhythm of the previous event), so that
the end result would be equivalent to turning the deleted
events into rests, or like what would happen if you deleted events in a
MIDI sequencer.

I can think of a few awkward ways of accomplishing this, but I wonder if I
someone would offer the most straightforward way. 

Shouldn't there be some sort of Stella command to do this? I think it
would be very rare to *not* want the delete command to work this way.

Yes, the events can be muted instead of deleted, by how does this help? I
tried muting, and then running the result into a new thread, but the mutes
are carried over. Leaving muted events in the thread seems to screw up all
the mapping operations - the editing operations seem not to bypass muted
events.

Any help would be greatly appreciated. For me, this is the single worst
aspect of CM/Stella (using relative instead of absolute time). Other than
that, it's great :-)

Larry

 
 --  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 3 Nov 1997 17:39:45 -0800
In-Reply-To: Larry Troxler <lt@westnet.com>
        "Delete events whithout altering start times (leaving hole)?" (Nov  3,  8:18pm)
References: <Pine.SUN.3.96.971103200809.24585A-100000@westnet.com>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: Delete events whithout altering start times (leaving hole)?
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


why not change it into a rest?

 | Stella [Top-Level]: (thread foo ()
 | 		      (doitems (n (notes c4 d e f g))
 | 			(object midi-note note n rhythm 1)))
 | #<THREAD: Foo>
 | Stella [Top-Level]: tlist foo 0
 | Foo
 |     0.00    1. #<MIDI-NOTE | C4|     1|     1| 64| 0|>
 |     1.00    2. #<MIDI-NOTE | D4|     1|     1| 64| 0|>
 |     2.00    3. #<MIDI-NOTE | E4|     1|     1| 64| 0|>
 |     3.00    4. #<MIDI-NOTE | F4|     1|     1| 64| 0|>
 |     4.00    5. #<MIDI-NOTE | G4|     1|     1| 64| 0|>
 | Stella [Top-Level]: change foo[3] rest
 | Stella [Top-Level]: tlist foo 0
 | Foo
 |     0.00    1. #<MIDI-NOTE | C4|     1|     1| 64| 0|>
 |     1.00    2. #<MIDI-NOTE | D4|     1|     1| 64| 0|>
 |     2.00    3. #<REST 1#x10dad782>
 |     3.00    4. #<MIDI-NOTE | F4|     1|     1| 64| 0|>
 |     4.00    5. #<MIDI-NOTE | G4|     1|     1| 64| 0|>
 | Stella [Top-Level]:


 | Any help would be greatly appreciated. For me, this is the single worst
 | aspect of CM/Stella (using relative instead of absolute time). Other than
 | that, it's great :-)

absolute time is appropriate at times if you are dealing with chunks of
static data as sequencers do, but try writing a modest non-trivial algorithm
using absolute times...



Date: Mon, 3 Nov 1997 22:02:53 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: t@ulysses.Stanford.EDU
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: Delete events whithout altering start times (leaving hole)?
In-Reply-To: <9711031739.ZM9713@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Mon, 3 Nov 1997, Tobias Kunze wrote:

> 
> why not change it into a rest?
> 
>  | Stella [Top-Level]: (thread foo ()
>  | 		      (doitems (n (notes c4 d e f g))
>  | 			(object midi-note note n rhythm 1)))


Because this complicates all further mapping/editing operations.

> 
> absolute time is appropriate at times if you are dealing with chunks of
> static data as sequencers do, but try writing a modest non-trivial algorithm
> using absolute times...
> 
> 

Ok, I but I wasn't speaking of algorithms, but of threads of atomic
events. Isn't this when "Delete" or "remove" would most often be used?

Larry

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Mon, 3 Nov 1997 21:20:55 -0600
To: cmdist@ccrma.Stanford.EDU
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: Delete events whithout altering start times (leaving hole)?

> [...] For me, this is the single worst
> aspect of CM/Stella (using relative instead of absolute time). Other than
> that, it's great :-)

im not sure i understand -- you can use absolute times:

(thread foo ()
  (dotimes (i 5)
    (object midi-note START i note (between 30 90))))

Stella [Top-Level]: tlist foo 0
Foo
    0.00    1. #<MIDI-NOTE | 86|------|------| 64| 0|>
    1.00    2. #<MIDI-NOTE | 52|------|------| 64| 0|>
    2.00    3. #<MIDI-NOTE | 42|------|------| 64| 0|>
    3.00    4. #<MIDI-NOTE | 33|------|------| 64| 0|>
    4.00    5. #<MIDI-NOTE | 52|------|------| 64| 0|>

Stella [Top-Level]: del 1[4] expunge t

Stella [Top-Level]: tlist foo 0
Foo
    0.00    1. #<MIDI-NOTE | 86|------|------| 64| 0|>
    1.00    2. #<MIDI-NOTE | 52|------|------| 64| 0|>
    2.00    3. #<MIDI-NOTE | 42|------|------| 64| 0|>
    4.00    4. #<MIDI-NOTE | 52|------|------| 64| 0|>

Stella [Top-Level]:
---
if you already have relative rhythms and want to make them absolute, run
the object so the time values are set, then logior the +absolute+ bit:

run bar 0
del bar[...] expunge t
map bar set status (logior $status +absolute+)



Date: Tue, 4 Nov 1997 17:49:24 +0900
To: cmdist@ccrma.Stanford.EDU
From: cp09601@ms.geidai.ac.jp (Rodrigo Segnini)
Subject: Code Warrior and CLM
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
X-Mailer: Eudora-J(1.3.8.5-J13)

Hello everybody: 

So far I've been among the few running a 'LISP only' CLM on a 68K machine
but soon that will change for the actually supported version (PPC MCL +
Code Warrior). I am wondering if what comes in some developers magazines
and books called "Code Warrior Lite" is enough. 

Thanks for your answer.

r.s.


Date: Tue, 4 Nov 1997 12:21:37 +0100
From: Klaus Kessner <a0156@rs1.rrz.Uni-Koeln.DE>
To: lt@westnet.com
Subject: delete objects - maintain time
Cc: a0156@rrz.uni-koeln.de, cmdist@ccrma.Stanford.EDU

 
  > Almost every time, when I delete events from a thread (no, make that
  > *every* time), I want to preserve the start-times of the rest of the
  > events ...
 
dear Larry -- i dont know if i'm getting this right but didnt you ask
this question some time ago ???
 
on Sun, 1 Dec 1996 21:19:51 -0500 (EST) Larry Troxler wrote:
 
  > [...] I want the rhythm of the object being deleted to be
  > added to the rhythm of the object just before the deleted object, so that
  > after a RUN or MIX, the following start-times won't be changed. This is 
  > what you want when deleting "bad notes" , for example. [...]
 
 
Tobias replied 'change the notes to rests' and Rick came up with his
mute.lisp patch and #'flush-muted which will delete and expunge muted 
objects without changing times in the remaining objects -- which is what
you are looking for (?).
 
since i'm using the pre-xcm-version i'm not sure if flush-muted et al are 
incorporated in the current cm-version. (if not - i can send you mute.lisp).
 
 
Gruesse, Klaus.

Date: Tue, 4 Nov 1997 09:05:21 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <199711040849.RAA03400@u-ws-2.fa.geidai.ac.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: cp09601@ms.geidai.ac.jp (Rodrigo Segnini)
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Code Warrior and CLM
Cc: cmdist@ccrma.Stanford.EDU


>Code Warrior). I am wondering if what comes in some developers magazines
>and books called "Code Warrior Lite" is enough.

CLM's needs are rather modest -- basically, the Lite version would need to
open/make/close shared library projects under appleevent control. Send me a
url so I can download it or post the specs and I can give you a more
definitive answer.


Date: Tue, 4 Nov 1997 09:35:16 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: normal form

Set Slave was written by John Amuedo (JohnAmuedo@aol.com) as a masters
thesis, if I remember correctly. He has function(s) that do this. If you
can't get in touch with him let me know and ill write it for you.


X-Sender: trevi@panix.com
In-Reply-To: <v03007800b08494a35d02@[128.174.92.150]>
References: <199711040849.RAA03400@u-ws-2.fa.geidai.ac.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Tue, 4 Nov 1997 10:14:56 -0500
To: cmdist@ccrma.Stanford.EDU
From: marco trevisani <marco@woof.music.columbia.edu>
Subject: Re: Code Warrior and CLM

At 09:05 -0500 4-11-1997, Rick Taube wrote:
>>Code Warrior). I am wondering if what comes in some developers magazines
>>and books called "Code Warrior Lite" is enough.

It could be. What you're not allowed to do with the lite version is to
create new projects, but you can play with existing examples projects,
fully working. Using it in clm you dont have to make you're own project, so
it could work.
The only thing to find out is: when a project compiles a new  instrument it
updates the project with the new name of that instrument. Will be this
considered as new project? I dont think so, but who knows what they think
at metrowerks....best is to give a try.

link for downloading is

http://www.metrowerks.com/products/cw/lite/


marco

-------------------------------
 marco Trevisani
  Music Technology Program
  New York University
  e-mail: marco@galt.mrl.nyu.edu
--------------------------------



Sender: root@westnet.com
Date: Tue, 04 Nov 1997 21:55:58 -0500
From: Larry Troxler <lt@westnet.com>
X-Mailer: Mozilla 3.01 (X11; I; Linux 2.0.27 i586)
Mime-Version: 1.0
To: Klaus Kessner <a0156@rs1.rrz.Uni-Koeln.DE>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: delete objects - maintain time
References: <199711041121.MAA97865@rs1.rrz.Uni-Koeln.DE>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Klaus Kessner wrote:
> 
> 
>   > Almost every time, when I delete events from a thread (no, make that
>   > *every* time), I want to preserve the start-times of the rest of the
>   > events ...
> 
> dear Larry -- i dont know if i'm getting this right but didnt you ask
> this question some time ago ???
> 
Yes, mea culpa. I wrote the note last night in a moment of frustration,
hoping that there was some more straightforward method in the new CM.
Since this is what I want to be the default behavior (or settable by
some sort of switch), I will probably add a new Stella command to my
installation to do this, I guess what what would be simplest is for my
purposes is to add a command like delete, but one which adjusts the
rhythm of the previous object. Then I have to worry about undelete, etc.
Whatever, I'll think it through. Using absolute mode is possible too,
but I have to think whether there will be cases where I would want to
convert the result back to relative mode, in which case I would still
need to adjust the rhythms at that stage anyway.

I suppose this is a matter of figuring out how I really want this to
work, and then encapsulating it as a new command.
   

> 
> since i'm using the pre-xcm-version i'm not sure if flush-muted et al are
> incorporated in the current cm-version. (if not - i can send you mute.lisp).
> 

I don't think Rick put that code into the distribution, I think I still
have it somewhere.

Larry


--  Larry Troxler --  lt@westnet.com  --  Patterson, NY USA  --

Date: Wed, 5 Nov 1997 11:55:33 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu (Unverified)
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: Rick Taube <taube@uiuc.edu>
Subject: best normal form

here is a function that returns the Best Normal Form of some specified
notes.


? (normal-form '( f4 e4 ef5 bf4))

(DS5 E5 F5 AS5)

(0 1 2 7)


-----


(defun normal-form (notes)

  (flet ((ints (l &aux (f (first l)))

           (loop for i in l collect (- i f))))

    (let ((length (length notes))

          (width most-positive-fixnum)

          (names? (and notes (symbolp (first notes))))

          norml ints)

      

      ;; coerce to degrees ordered low to high

      (setf notes (sort (if names? (mapcar #'degree notes) notes)

                        #'<<))

      

      ;; reduce to one octave, resort if necessary

      (loop with resort? = nil

            with f = (first notes)

            for i below length

            for d = (- (elt notes i) f)

            do 

            (unless (<< d 12)

              (setf (elt notes i) (+ f (mod d 12))

                    resort? t))

            finally 

            (when resort? (setf notes (sort notes #'<<))))

      

      ;; find the best normal form, ie the rotation with the

      ;; smallest span between the first and last notes and

      ;; the smallest total interval content.

      (loop with f and l and d

            repeat length

            do

            (setf f (first notes) l (first (last notes)) d (- l f))

            (cond ((<< d width) 

                   (setf width d norml notes ints (ints notes)))

                  ((and (= d width)

                        (<< (apply #'+ (ints notes))

                           (apply #'+ ints)))

                   (setf norml notes ints (ints notes))))

            ;; traspose first note above last and append

            (loop while (<< f l) do (incf f 12))

            (setf notes

                  (loop for x in (cdr notes)

                        collect x into r

                        finally (return (append r (list f)))))) 

      ;; returns notes in best normal order and interval set.

      (values (if names? (mapcar #'note norml) norml)

              ints))))





Date: Wed, 5 Nov 1997 13:59:54 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <199711051047.LAA20953@mailer.zkm.de>
Mime-Version: 1.0
Content-Type: text/enriched; charset="us-ascii"
To: Sean Ferguson <ferguson@jasper.music.mcgill.ca>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Icma-Talk Digest #23 on 5 November 1997
Cc: cmdist@ccrma.Stanford.EDU

>Surprisingly (to me, at least) the generation of all chords is pretty

>fast.  But the filtering is unbelievably slow.  I've posted to the
common

>music newsgroup to see if anyone has a faster prime-form program than

>mine, but I believe the result will still be relatively slow.



? (time (dotimes (i 1000) (prime-form '( f4 e4 ef5 bf4))))

(DOTIMES (I 1000) (PRIME-FORM '(F4 E4 EF5 BF4))) took 1,999
milliseconds (1.999 seconds) to run.



500 solutions a second doesnt strike me as unbelievably slow for
totally unoptimized code so perhaps you could tell me what you consider
reasonable -- right now the function is spending most of the time
cobbling up lists, which can be done once and then destructivly
modified.


but to do your solution method you apparently need the prime form, not
the best normal.  given what i posted eariler here is a function that
produces prime form, again totally unoptimized so there is lots of room
for improvement:


(defun prime-form (notes)

  ;; return either best normal form or its inversion, whichever

  ;; has the smallest interval content.

  (flet ((invert-normal (n l)

           (loop for f = (first n)

                 for j in l collect (transpose f (- j)))))

    (let (n1 n2 i1 i2)

      (multiple-value-setq (n1 i1) (normal-form notes))

      (multiple-value-setq (n2 i2) (normal-form (invert-normal n1
i1)))

      (if (<< (apply #'+ i2) (apply #'+ i1))

        (values n2 i2)

        (values n1 i1)))))



From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Wed, 5 Nov 1997 14:27:30 -0800
In-Reply-To: Rick Taube <taube@uiuc.edu>
        "Re: Icma-Talk Digest #23 on 5 November 1997" (Nov  5,  1:59pm)
References: <v03007804b0862a37fc9d@[128.174.92.150]>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Rick Taube <taube@uiuc.edu>,
        Sean Ferguson <ferguson@jasper.music.mcgill.ca>
Subject: prime-form fun
Cc: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


I still don't know what a prime form is good for, but this seems
like fun and, while still unoptimized, probably an order of
magnitude faster (albeit less elegant):


   (decode-prime-form (encode-prime-form '(f4 e4 ef5 bf4)))
   => (0 1 2 7)

   (= (encode-prime-form '(g4 b4 af5 df6)) (encode-prime-form '(fs3 c4 g4
bf4)))
   => T

   (time
    (dotimes (i 1000)
      (decode-prime-form (encode-prime-form '(f4 e4 ef5 bf4)))))
   ; cpu time (non-gc) 270 msec user, 0 msec system
   ; cpu time (gc)     0 msec user, 0 msec system
   ; cpu time (total)  270 msec user, 0 msec system
   ; real time  354 msec
   ; space allocation:
   ;  15,004 cons cells, 0 symbols, 32 other bytes

------^^^^^^
argh. 15,004 cons cells...

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

(defun encode-prime-form (notes)
  (let ((x 0))
    (map nil #'(lambda (n)
                 (setf x (logior x (ash 1 (mod (degree n) 12))))) notes)
    (loop repeat 12
	  for y = x then (logand (logior (ldb (byte 1 11) y) (ash y 1)) 4095)
	  minimize y)))

(defun decode-prime-form (prime)
  (loop for i below 12
	  when (= (ldb (byte 1 i) prime) 1)
	  collect i))



Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: Delete events whithout altering start times (leaving hole)?
References: <v02130501b08444ddb1e9@[130.126.25.88]>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 06 Nov 1997 10:11:47 +0100
In-Reply-To: taube@ux1.cso.uiuc.edu's message of Mon, 3 Nov 1997 21:20:55 -0600
Lines: 3
X-Mailer: Gnus v5.3/Emacs 19.31

I just discovered the possibility to open threads to run output into.
This might be worth documenting, ie. with an example aligned with the
others documenting 'open in the dict. ?

Date: Fri, 7 Nov 1997 03:42:52 -0500 (EST)
From: JohnAmuedo@aol.com
To: ferguson@jasper.music.mcgill.ca, tkunze@ulysses.Stanford.EDU,
        taube@uiuc.edu, aguiar@ccrma.Stanford.EDU, cmdist@ccrma.Stanford.EDU
Subject: Computing prime forms...
Mime-Version: 1.0
Content-Type: multipart/mixed;
	boundary="PART.BOUNDARY.0.21454.mrin47.878892170"


--PART.BOUNDARY.0.21454.mrin47.878892170
Content-ID: <0_21454_878892170@mrin47.411>
Content-type: text/plain


Hi Sean,

Just got your email regarding computing prime forms.  If you're classifying
pitch collections that are invariant under transposition only (such most 
"tonal" chords and many "atonal" pitch collections), you probably don't
want to be computing the prime form at all, but rather the Zero-Normal Form
(ZNF).  I derived some concise integer labels for Zero-Normal Forms called
Decimal-Normal Forms (DNF's) in my master's thesis, "Computational
Description of Extended Tonality" (1996).

At Rick Taube's suggestion, I cleaned up the code in the thesis and
summarized 
the essential definitions and algorithms for computing the ZNF and DNF in a 
short paper, which I have attached to this email message.  The paper is
titled "Computing the Decimal-Normal Form -- A Concise Nomenclature for
T[n]-Types."  It was presented earlier this year at the 1997 West Coast Music

Theory Conference in Santa Barbara.

The function Binary-Normal-and-Transp decribed on p. 2 of this paper 
computes the Binary-Normal Form and Normal-Transposition of a pitch 
in a straightforward manner:

(defun Binary-Normal-and-Transp (pitch-seq)
  (let* ((binary-codes 
          (mapcar #'(lambda (transp) (BINARY-CODE
                                      (PROPER-SET
                                       (MOD-12
                                        (SUB pitch-seq transp)))))
                  (NUMBERS 12)))
         (min-code (MINIMUM binary-codes)))
    (values min-code (position min-code binary-codes))))

An optimized version of this function appears on p. 202 of my masters
thesis:

(defun FAST-BITWISE-BINARY-NORMAL-and-TRANSP (pitch-set)
  (let* ((binary-code (BINARY-CODE (PROPER-SET (MOD-12 pitch-set))))
         (minimum-code 4096)
         (minimum-index)
         (rotated-code))
    (dotimes (index 12)
      (setf rotated-code
            (logand 4095
                    (ash
                     (logior (* binary-code 4096) binary-code)
                     (* -1 index))))
      (if (< rotated-code minimum-code)
        (progn
          (setf minimum-code rotated-code)
          (setf minimum-index index))))
        (values minimum-code minimum-index)))

FAST-BITWISE-BINARY-NORMAL-and-TRANSP benchmarks at about three 
times the speed of Binary-Normal-and-Transp, if speed is of concern to
you.

The thesis derives these and other definitions of musical set theory from a
computational point of view.  The thesis also discusses some limitations of
the prime form, and proposes some solutions to these problems.  I'm happy 
to send you a copy of the thesis for the cost of duplication ($25), plus 
shipping via whatever medium is most convenient for you.  Please let me 
know if I can be of further help.  

Good luck with your work!

Cheers,

John Amuedo 

3267 Butler Ave.
Los Angeles, CA  90066
(310) 397-8094



--PART.BOUNDARY.0.21454.mrin47.878892170
Content-type: multipart/appledouble;
	boundary="ad-PART.BOUNDARY.0.21454.mrin47.878892170"


--ad-PART.BOUNDARY.0.21454.mrin47.878892170
Content-ID: <0_21454_878892170@mrin47.412>
Content-type: application/applefile;
	name="UCSB Theory Conf. 1997";
	X-Mac-Creator="4d535744";
	X-Mac-Type="5736424e"
Content-Transfer-Encoding: base64

AAUWBwACAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAJAAAAVgAAACAAAAAIAAAAdgAAABAAAAAD
AAAAhgAAABYAAAACAAAAnAAAAR4AAAABAAABugAA9gBXNkJOTVNXRAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAALCIIH6wiCB+ewO9oLCIIH5VQ1NCIFRoZW9yeSBDb25mLiAxOTk3AAABAAAA
AQAAAAAAAAAAHgAAFi0XQ2FjaGVfMDAxNDllNWIuRXhwbG9yZXIAAAAAFlVDU0IgVGhlb3J5
IENvbmYuIDE5OTd5AgACAFc2Qk4CAFc2Qk5NU1dEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
sIggfgAA9gAAAAEeZXIAAAAAAAAAAAAAD9ElAAAAFi0XQ2FjaGVfMDAxNGIwNWEuRXhwbG9y
ZXIAAAAAAAAAAAAAD9MlAAAAFi0XQ2FjaGVfMDAxNGFlNzQuRXhwbG9yZXIAAAAAAAAAAAAA
D9MlAAAAFi0XQ2FjaGVfMDAxNGFlNzQuRXhwbG9yZXIAAAAAAQAAAAEAAAAAAAAAAB4BuIVY
FawAAAAcAB7//w==

--ad-PART.BOUNDARY.0.21454.mrin47.878892170
Content-ID: <0_21454_878892170@mrin47.413>
Content-type: application/octet-stream;
	name="UCSB Theory Conf. 1997";
	X-Mac-Creator="4d535744";
	X-Mac-Type="5736424e"
Content-Transfer-Encoding: base64

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAA
AAAAEAAAAgAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
///////////////////////////////////9////IQAAAP7///9IAAAABQAAAAYAAAAHAAAA
CAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUA
AAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAAEkAAAAyAAAA
IwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoAAAArAAAALAAAAC0AAAAuAAAALwAAADAA
AAAxAAAA/v///2UAAAA0AAAANQAAADYAAAA3AAAAOAAAADkAAAA6AAAAOwAAADwAAAA9AAAA
PgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABGAAAARwAAAP7///9mAAAASgAAAEsA
AABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAFQAAABVAAAAVgAAAFcAAABYAAAA
WQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAAYgAAAGMAAABkAAAAaAAAAP7/
//9nAAAA/v///2kAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAABwAAAAcQAAAHIAAABzAAAA
dAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAA/v///////////////////////////////////wBS
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAACAAUA//////////8DAAAAAAkCAAAAAADAAAAAAAAARgAAAAAAAAAAAAAAAABT
5TId67wBAwAAAEAGAAAAAAAAAQBDAG8AbQBwAE8AYgBqAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgH///////////////8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAAAAAAABXAG8AcgBkAEQAbwBjAHUA
bQBlAG4AdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgACAf//
//8MAAAA/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABalQAA
AAAAAE8AYgBqAGUAYwB0AFAAbwBvAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAWAAEBAQAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU+Uy
Heu8AQBT5TId67wBAAAAAAAAAAAAAAAAAQAAAP7///8DAAAA/v///wUAAAD+/////v///wgA
AAAJAAAACgAAAAsAAAAMAAAADQAAAP7///8PAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAA
FgAAABcAAAAYAAAA/v//////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////8BAP7/
AgABAP////8ACQIAAAAAAMAAAAAAAABGHAAAAE1pY3Jvc29mdCBXb3JkIDYuMCBEb2N1bWVu
dAD+////TkI2VxAAAABXb3JkLkRvY3VtZW50LjYAAAAAAAA7AAP//gAJAAYAAAAAAAAAAAAA
AAAAAQAAAAEAAAAAAAAQAEwAAAAAAAAAAAAIAPs6AABuEwAAcCEAAAQLAAAAAAAAAAAAAAAA
AAAAAAAA6AMAAOgDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQzxHgobEa4QAAAAAAAAAA
AAAAAAAAAAAAOwAD//4ACQAGAAAAAAAAAAAAAAAAAAEAAAABAQD+/wIAAQD/////AQkCAAAA
AADAAAAAAAAARhsAAABNaWNyb3NvZnQgV29yZCA2LjAgUGljdHVyZQD+////TkI2Vw8AAABX
b3JkLlBpY3R1cmUuNgAAAAAAAADQzxHgobEa4QAAAAAAAAAAAAAAAAAAAAAAOwAD//4ACQAG
AAAAAAMA0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAADsAA//+AAkABgAAAAAAAAAAAAAAAAAB
AAAAAQAAAAAAABAA/v8AAAMKAQAAAAAAAAAAAAAAAAAAAAAAAQAAAPKfheBP+RBoq5EIACsn
s9kwAAAAZgEAAA4AAAAHAAAAmAAAANylaABTwAkEAAAAAGUAAAAAAAEAAAEAAQADAACXcAAA
WpUAAAAAAAAAAAAAAAAAAAAAAABMbAAAMQEAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAjgAANAEAAACOAAA0AQAANI8AABYAAABKjwAAFAAAAOSPAAAAAAAA5I8AAAAAAADkjwAA
FAAAAH6QAAAAAAAAfpAAAAAAAAB+kAAAAAAAAH6QAAAAAAAAfpAAABAAAACOkAAAKAAAALaQ
AAA0AAAAfpAAAAAAAABxkwAAaAAAAOqQAAAWAAAAAJEAACIAAAAikQAAAAAAACKRAAAAAAAA
IpEAAAAAAAAikQAAAAAAACKRAAAAAAAAIpEAAAAAAABJkwAAAgAAAEuTAAAAAAAAS5MAAAAA
AABLkwAAAAAAAEuTAAAAAAAAS5MAAAAAAABLkwAAJgAAANmTAABYAAAAMZQAACkBAABxkwAA
AAAAAAAAAAAAAAAAAAAAAAAAAADkjwAAAAAAACKRAAAAAAAAAAA5AD8ABgAIACKRAAAAAAAA
IpEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIpEAAAAAAAAikQAAAAAAAHGTAAAAAAAAIpEAAAAA
AADkjwAAAAAAAOSPAAAAAAAAIpEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6pAAAAAAAAAikQAA
AAAAACKRAAAAAAAAIpEAAAAAAAAikQAAAAAAAOSPAAAAAAAAIpEAAAAAAADkjwAAAAAAACKR
AAAAAAAASZMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+I8AADIAAAAqkAAAVAAAAF6PAAAyAAAA
kI8AAFQAAADkjwAAAAAAAOSPAAAAAAAAIpEAAAAAAABJkwAAAAAAACKRAAAnAgAAIpEAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENvbXB1dGluZyB0aGUgRGVjaW1h
bC1Ob3JtYWwgRm9ybSAoIEEgQ29uY2lzZSBOb21lbmNsYXR1cmUgZm9yIFRbbl0tVHlwZXMN
DUpvaG4gQW11ZWRvDTMyNjcgQnV0bGVyIEF2ZS4gICBMb3MgQW5nZWxlcywgQ0EgIDkwMDY2
DSgzMTApIDM5Ny04MDk0ICAgIEpvaG5BbXVlZG9AYW9sLmNvbQ0NQUJTVFJBQ1QNDQlBIHRh
eG9ub215IG9mINJhbG1vc3QtZXF1YWxseSB0ZW1wZXJlZNMgcGl0Y2ggY29sbGVjdGlvbnMg
aXMgZGV2ZWxvcGVkIHdoaWNoIG92ZXJjb21lcyBjZXJ0YWluIGxpbWl0YXRpb25zIG9mIHRo
ZSBwcmltZSBmb3JtIGRlZmluZWQgYnkgbXVzaWNhbCBzZXQgdGhlb3J5LiAgVGhlIHRheG9u
b215IGlzIGJhc2VkIHVwb24gYSBzaW1wbGUgcHJvY2VkdXJlIGZvciBkZXRlcm1pbmluZyB0
aGUgRGVjaW1hbC1Ob3JtYWwgRm9ybSAoRE5GKSBvZiBhbnkgc3VjaCBwaXRjaCBjb2xsZWN0
aW9uLiAgRGVjaW1hbC1Ob3JtYWwgRm9ybXMgYXJlIGNvbmNpc2UgbGFiZWxzIGZvciBUW25d
LXR5cGVzLiAgVGhlc2UgbGFiZWxzIGZhY2lsaXRhdGUgdGhlIHVzZSBvZiBUW25dLXR5cGVz
IGZvciBtdXNpY2FsIGFuYWx5c2lzIGFuZCBjb21wb3NpdGlvbi4gIEEgc2ltcGxlIGV4dGVu
c2lvbiB0byB0aGUgRE5GIGNhbGxlZCB0aGUgRGVjaW1hbC1Ob3JtYWwgUm90YXRpb24gKERO
UikgaWRlbnRpZmllcyBzcGVjaWZpYyByb3RhdGlvbnMgb2YgdGhlIGFkamFjZW50LWludGVy
dmFsIHZlY3RvciBvZiBhIFRbbl0tdHlwZS4gIFRoZSBETlIgZW5hYmxlcyBzcGVjaWZpYyBo
YXJtb25pYyBpbnZlcnNpb25zIG9mIHZlcnRpY2FsIHNvbm9yaXRpZXMsIGFuZCBwYXJ0aWN1
bGFyIG1vZGVzIG9mIHNjYWxhciBwaXRjaCBjb2xsZWN0aW9ucyB0byBiZSBkZXNjcmliZWQg
ZXhhY3RseS4gIFRoZSBETlIgd2FzIHVzZWQgYXMgdGhlIGJhc2lzIGZvciBhIE1BWCggcHJv
Z3JhbSB0aGF0IHJlY29nbml6ZXMgYW5kIGNsYXNzaWZpZXMgb3ZlciAoMjUsMDAwKSBKYXp6
IGNob3JkcyBhbmQgc2NhbGVzIHBsYXllZCBvbiBhIE1JREkga2V5Ym9hcmQsIGluIHJlYWwt
dGltZS4gIFRoZSBETkYgd2FzIGVtcGxveWVkIHRvIGlkZW50aWZ5IHRoZSBzbWFsbGVzdCBr
ZXJuZWwgc2V0IG9mICgxNikgc2NhbGVzIHRoYXQgYXJlIGVzc2VudGlhbCB0byBBbWVyaWNh
biBKYXp6LiAgDQ1PQkpFQ1RJVkVTDQ0JVGhlIHByaW1hcnkgb2JqZWN0aXZlIG9mIHRoaXMg
d29yayBpcyB0byBkZXZlbG9wIGEgbmV1dHJhbCwgc3lzdGVtYXRpYyB0YXhvbm9teSBvZiBy
ZWN1cnJpbmcgcGl0Y2ggYW5kIGludGVydmFsIGNvbGxlY3Rpb25zIHRoYXQgaXMgbm90IHBy
ZWRpc3Bvc2VkIHRvd2FyZCBvciBhZ2FpbnN0IHBhcnRpY3VsYXIgV2VzdGVybiBjaHJvbWF0
aWMgbXVzaWMuICBUaGUgcHJvcG9zZWQgdGF4b25vbXkgaXMgd2VsbC1zdWl0ZWQgZm9yIGRl
c2NyaWJpbmcgdGhhdCBhbG1vc3QtZXF1YWxseSB0ZW1wZXJlZCBtdXNpYyB3aGljaDogICgx
KSBlbXBsb3lzIHR3ZWx2ZSBhbG1vc3QtZXF1YWwgbG9nYXJpdGhtaWMgZGl2aXNpb25zIG9m
IHRoZSBvY3RhdmUsIGluIHdoaWNoICgyKSBhbGwgcG9zc2libGUgdG9uZXMgb2Ygc3VjaCBt
dXNpYyBjYW4gYmUgcmVmbGV4aXZlbHkgbWFwcGVkIHRvIGFuZCBmcm9tIHNtYWxsIGNvbnRp
Z3VvdXMgaW50ZWdlcnMuICBUaGVzZSBjcml0ZXJpYSBpbmNsdWRlIG1vc3QgdG9uYWwsIGV4
dGVuZGVkLXRvbmFsLCBkb2RlY2FwaG9uaWMsIGF0b25hbCBtdXNpYyBhbmQgdGhlaXIgaHli
cmlkcy4gIEEgY29uY29taXRhbnQgb2JqZWN0aXZlIG9mIHRoaXMgd29yayBpcyB0byBkZXZl
bG9wIHdlbGwtc3BlY2lmaWVkIHByb2NlZHVyZXMsIGV4cHJlc3NpYmxlIGFzIGNvbXB1dGF0
aW9uYWwgYWxnb3JpdGhtcywgZm9yIGNvbXBsZXRlLCBjb25zaXN0ZW50LCBhbmQgYWNjdXJh
dGUgY2xhc3NpZmljYXRpb24gb2YgYW55IGFsbW9zdC1lcXVhbGx5IHRlbXBlcmVkIHBpdGNo
IGNvbGxlY3Rpb24sIGluZGVwZW5kZW50IG9mIG11c2ljYWwgY29udGV4dC4NDUFQUExJQ0FU
SU9OUw0NCVRoZSBwcm9wb3NlZCB0YXhvbm9teSB1bmlmaWVzIHNvLWNhbGxlZCDSdG9uYWzT
IGFuZCDSYXRvbmFs0yBwaXRjaCBjb2xsZWN0aW9ucyB3aXRoaW4gb25lIHBpdGNoLWNsYXNz
IHNldCBoaWVyYXJjaHkuICBUaGlzIG9yZ2FuaXphdGlvbiBlbmFibGVzIHRoZSB0b29scyBv
ZiBtdXNpY2FsIHNldCB0aGVvcnkgdG8gYmUgYXBwbGllZCBjb252aW5jaW5nbHkgZm9yIHRo
ZSBhbmFseXNpcyBvZiB0b25hbCwgZXh0ZW5kZWQtdG9uYWwsIGFuZCBoeWJyaWQgdG9uYWwv
YXRvbmFsIG11c2ljLiAgQSBudW1iZXIgb2YgZXhhbXBsZXMgb2Ygc3VjaCBoeWJyaWQgbXVz
aWMgb2NjdXIgdGhyb3VnaG91dCB3b3JrcyBvZiBBbGJhbiBCZXJnLCBJZ29yIFN0cmF2aW5z
a3ksIENoYXJsZXMgSXZlcywgQ2FybCBSdWdnbGVzLCBhbmQgRHVrZSBFbGxpbmd0b24uICBU
aGUgcHJvcG9zZWQgdGF4b25vbXkgaWRlbnRpZmllcyBhbmQgY29ycmVjdHMgY2VydGFpbiBw
cm9ibGVtcyB0aGF0IGFyaXNlIHdoZW4gdGhlIHByaW1lIGZvcm0gaXMgdXNlZCB0byBpZGVu
dGlmeSB0b25hbCBhbmQgZXh0ZW5kZWQtdG9uYWwgcGl0Y2ggY29sbGVjdGlvbnMuICBUaGUg
dGF4b25vbXkgYWxzbyBwcm92aWRlcyBhIG1vcmUgY29uY2lzZSBhbHRlcm5hdGl2ZSB0byBG
b3J0ZdVzIGxhYmVscyBhcyBhIHByZWxpbWluYXJ5LCBnZW5lcmFsIHB1cnBvc2Ugbm9tZW5j
bGF0dXJlIGZvciBkZXNjcmliaW5nIHRoZSBwaXRjaCBjb250ZW50IG9mIGF0b25hbCBhbmQg
ZG9kZWNhcGhvbmljIG11c2ljLg0NREVGSU5JVElPTlMNDQlUaGUgcHJvY2VkdXJlcyB0aGF0
IGNsYXNzaWZ5IGFueSBwaXRjaCBjb2xsZWN0aW9uIGluIHRlcm1zIG9mIHRoZSBwcm9wb3Nl
ZCB0YXhvbm9teSBhcmUgZGVmaW5lZCBiZWxvdyBhcyBzaG9ydCBBTlNJIENvbW1vbiBMSVNQ
IGZ1bmN0aW9ucyAoc2VlIFtHcmFoYW1dKS4gIFRoZXNlIGRlZmluaXRpb25zIHNlcnZlIGFz
IGV4cGxpY2l0IHByb2NlZHVyYWwgZXF1YXRpb25zIGZvciBjb21wdXRpbmcgZXNzZW50aWFs
IGNvbXBvbmVudHMgb2YgdGhlIHRheG9ub215LiAgVGhleSBhbHNvIHByb3ZpZGUgYSBzdGFu
ZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBlcXVhdGlvbnMgaW4gYSB3aWRlbHkgc3Vw
cG9ydGVkIHByb2dyYW1taW5nIGxhbmd1YWdlLiAgQSBmZXcgZGVmaW5pdGlvbnMgcmVmZXIg
dG8gZnVuY3Rpb25zIHRoYXQgYXJlIHBhcnQgb2YgU0VULVNMQVZFLCBhbiBlbWJlZGRlZCBs
YW5ndWFnZSB0aGF0IGltcGxlbWVudHMgY2VydGFpbiBvcGVyYXRpb25zIG9mIG11c2ljYWwg
c2V0IHRoZW9yeS4CICBJbiB0aGUgZXhhbXBsZXMgdGhhdCBmb2xsb3csIHRoZSANU0VULVNM
QVZFIGZ1bmN0aW9ucyBBREQsIFNVQiwgTVVMLCAgYW5kIE1PRC0xMiBleHRlbmQgdGhlaXIg
KHNjYWxhcikgTElTUCBjb3VudGVycGFydHMgdG8gb3BlcmF0ZSBvbiBlbnRpcmUgaW50ZWdl
ciBzZXF1ZW5jZXMgYXQgYSB0aW1lLiAgVGhlIGZ1bmN0aW9uIE5VTUJFUlMgZ2VuZXJhdGVz
IGEgemVyby1iYXNlZCBzZXF1ZW5jZSBvZiBhc2NlbmRpbmcgY29udGlndW91cyBpbnRlZ2Vy
cywgYW5kIFBST1BFUi1TRVQgcmVtb3ZlcyBkdXBsaWNhdGUgZWxlbWVudHMgZnJvbSBhIHNl
dCByZXByZXNlbnRlZCBhcyBhIExJU1Agc2VxdWVuY2UuICBOYW1lcyBvZiBuZXdseS1kZWZp
bmVkIGZ1bmN0aW9ucyBhcmUgaGlnaGxpZ2h0ZWQgdXNpbmcgY2FwaXRhbCBvciBtaXhlZC1j
YXNlIHN5bWJvbHMuICBJbXBvcnRhbnQgZGVmaW5pdGlvbnMgYXJlIGVtYm9sZGVuZWQuICBD
b21tb24gTElTUCBpcyBjYXNlLWluc2Vuc2l0aXZlLCBzbyB0aGVzZSBkaXN0aW5jdGlvbnMg
Y2Fycnkgbm8gbGV4aWNhbCBvciBzZW1hbnRpYyBzaWduaWZpY2FuY2UuDQxUaGUgRGVjaW1h
bC1Ob3JtYWwgRm9ybSAoRE5GKQ0NCVRoZSBwaXRjaC1jb2xsZWN0aW9uIHRheG9ub215IGFu
ZCBjbGFzc2lmaWNhdGlvbiBwcm9jZWR1cmVzIGRlc2NyaWJlZCBiZWxvdyBhcmUgYmFzZWQg
dXBvbiBjb21wdXRhdGlvbiBvZiB0aGUgTm9ybWFsIEZvcm0gb2YgYSBwaXRjaCBjb2xsZWN0
aW9uLCByYXRoZXIgdGhhbiB0aGUgcHJpbWUgZm9ybSBlbXBoYXNpemVkIGJ5IFtGb3J0ZV0s
IFtNb3JyaXNdLCBldC4gYWwuICBUaGUgTm9ybWFsIEZvcm0gaXMgYSB0cmFuc3Bvc2l0aW9u
LXByZXNlcnZpbmcgcmVwcmVzZW50YXRpb24gZm9yIGFueSBwaXRjaCBjb2xsZWN0aW9uIGV4
cHJlc3NlZCBhcyBhINJwcm9wZXLTIHBpdGNoLWNsYXNzIHNldC4gIEEgcHJvcGVyIHBpdGNo
LWNsYXNzIHNldCBpcyBhIGNvbGxlY3Rpb24gb2YgcGl0Y2gtY2xhc3NlcyB0aGF0IGNvbnRh
aW5zIG5vIGR1cGxpY2F0ZSBlbGVtZW50cy4gIFRoZSBOb3JtYWwgRm9ybSBpcyBvZnRlbiBk
ZXRlcm1pbmVkIHVzaW5nIHRoZSBwcm9jZWR1cmUgZGVzY3JpYmVkIGluIFtTdHJhdXNdIG9y
IFtSYWhuXS4gIEEgc2hvcnQgTElTUCBwcm9ncmFtIHRoYXQgaW1wbGVtZW50cyB0aGUgcHJv
Y2VkdXJlIG91dGxpbmVkIGluIFtTdHJhdXNdIGFwcGVhcnMgb24gcHAuIDk5LTEwMCBvZiBb
QW11ZWRvXS4NCVRoZSBOb3JtYWwgRm9ybSBpcyB0cmFuc3Bvc2l0aW9uLXNwZWNpZmljLCBt
ZWFuaW5nIHRoYXQgaXQgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCwgYWJzb2x1dGUgdHJhbnNw
b3NpdGlvbiBsZXZlbCBvZiBpdHMgaW5wdXQgcGl0Y2hlcy4gIEEgdHJhbnNwb3NpdGlvbi1p
bnZhcmlhbnQgaW5zdGFuY2Ugb2YgdGhlIE5vcm1hbCBGb3JtLCBjYWxsZWQgdGhlIFplcm8t
Tm9ybWFsIEZvcm0gKFpORiksIGlzIGRlZmluZWQgYmVsb3cuICBUaGUgWmVyby1Ob3JtYWwg
Rm9ybSBvZiBhIHBpdGNoIHNlcXVlbmNlIGlzIHRoZSBtb2R1bG8tdHdlbHZlIGRpZmZlcmVu
Y2UgYmV0d2VlbiB0aGF0IHBpdGNoIHNlcXVlbmNl1XMgTm9ybWFsIEZvcm0gYW5kIHRoZSB6
ZXJvdGggZWxlbWVudCBvZiBpdHMgTm9ybWFsIEZvcm06DQ0oZGVmdW4gWk5GIChwaXRjaC1z
ZXEpDSAgKGxldCAoKE5GIChOb3JtYWwtRm9ybSBwaXRjaC1zZXEpKSkNICAgIChNT0QtMTIg
KFNVQiBORiAoZWx0IE5GIDApKSkpKQ0NVGhlIFplcm8tTm9ybWFsIEZvcm0gY29tcHV0ZXMg
YSBjYW5vbmljYWwgcGl0Y2gtY2xhc3Mgc2V0IGZvciBhbnkgcGl0Y2ggY29sbGVjdGlvbiwg
aXJyZXNwZWN0aXZlIG9mIHRoYXQgY29sbGVjdGlvbtVzIHRyYW5zcG9zaXRpb24sIHJvdGF0
aW9uLCBwZXJtdXRhdGlvbiwgb3IgcmVnaXN0cmFsIGRpc3RyaWJ1dGlvbiBpbiBhIHNwZWNp
ZmljIG11c2ljYWwgY29udGV4dC4gIEEgY2Fub25pY2FsIHBpdGNoLWNsYXNzIHNldCBpcyBv
bmUgdGhhdCBpcyBkZXNpZ25hdGVkIHRvIHJlcHJlc2VudCBhbiBlbnRpcmUgZmFtaWx5IG9m
IHJlbGF0ZWQgcGl0Y2ggY29sbGVjdGlvbnMgKHN1Y2ggYXMsIGFsbCBoYXJtb25pYyBpbnZl
cnNpb25zIGFuZCBzcGFjaW5ncyBvZiB0aGUgTWE2XzkgY2hvcmQsIGluY2x1ZGluZyB0aGUg
UGVudGF0b25pYyBzY2FsZSkuICBaZXJvLU5vcm1hbCBGb3JtcyBwcm92aWRlIGEg0m1vc3Qg
c2NhbGUtbGlrZdMgcmVwcmVzZW50YXRpb24gZm9yIGFueSBwaXRjaCBjb2xsZWN0aW9uLCBh
bmQgYXJlIGVxdWl2YWxlbnQgdG8gdGhlIFRbbl0tdHlwZXMgZGVzY3JpYmVkIGJ5IFtSYWhu
XSBhbmQgW01vcnJpc10uDQlUaGUgTm9ybWFsIFRyYW5zcG9zaXRpb24gb2YgYSBwaXRjaCBz
ZXF1ZW5jZSBwcm92aWRlcyBhIHN0YW5kYXJkIHRyYW5zcG9zaXRpb24gcmVmZXJlbmNlIHRo
YXQgaXMgaW5kZXBlbmRlbnQgb2YgYSBwaXRjaC1jb2xsZWN0aW9u1XMgcm90YXRpb24sIHBl
cm11dGF0aW9uLCBvciByZWdpc3RyYWwgZGlzdHJpYnV0aW9uIGluIGFueSBtdXNpY2FsIGNv
bnRleHQuICBUaGUgTm9ybWFsIFRyYW5zcG9zaXRpb24gbWF5IGJlIGRlZmluZWQgaW4gdGVy
bXMgb2YgdGhlIE5vcm1hbCBGb3JtIGJ5Og0NKGRlZnVuIE5vcm1hbC1UcmFuc3Bvc2l0aW9u
IChwaXRjaC1zZXEpDSAgKGVsdCAoTm9ybWFsLUZvcm0gcGl0Y2gtc2VxKSAwKSkNDVRoZSBO
b3JtYWwgVHJhbnNwb3NpdGlvbiBpcyBzaW1wbHkgdGhlIHplcm90aCBlbGVtZW50IG9mIGEg
cGl0Y2gtY29sbGVjdGlvbtVzIE5vcm1hbCBGb3JtLiAgVGh1cywgdGhlIFpORiBpcyB0aGUg
bW9kdWxvLXR3ZWx2ZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBwaXRjaCBjb2xsZWN0aW9u1XMg
Tm9ybWFsIEZvcm0gYW5kIGl0cyBOb3JtYWwgVHJhbnNwb3NpdGlvbi4gDQlJbiBvcmRlciB0
byBlbnVtZXJhdGUgYW5kIGxhYmVsIFplcm8tTm9ybWFsIEZvcm1zIGVmZmljaWVudGx5LCBh
IGJpbmFyeSBlbmNvZGluZyBvZiB0aGUgWk5GIGNhbGxlZCB0aGUNQmluYXJ5LU5vcm1hbCBG
b3JtIChCTkYpIGlzIGNvbXB1dGVkOg0NKGRlZnVuIEJORiAocGl0Y2gtc2VxKQ0gIChCaW5h
cnktQ29kZSAoWk5GIHBpdGNoLXNlcSkpKQ0Nd2hlcmU6DQ0oZGVmdW4gQmluYXJ5LUNvZGUg
KHBjLW51bWJlci1saXN0KQ0gIChsb29wIGZvciBudW1iZXIgaW4gcGMtbnVtYmVyLWxpc3Qg
c3VtIChhc2ggMSBudW1iZXIpKSkNDUJpbmFyeS1Db2RlIGZvcm1zIGEgdHdlbHZlLWJpdCBp
bnRlZ2VyIHJlcHJlc2VudGF0aW9uIGZvciBhbnkgcGl0Y2gtY2xhc3Mgc2V0LCBpbiB3aGlj
aCBwaXRjaC1jbGFzcyB6ZXJvIChDKSBpcyBhc3NvY2lhdGVkIHdpdGggKGxlYXN0LXNpZ25p
ZmljYW50KSBiaXQgemVybywgcGl0Y2gtY2xhc3Mgb25lIChDIyBvciBEYikgaXMgYXNzb2Np
YXRlZCB3aXRoIGJpdCBvbmUsIHBpdGNoLWNsYXNzIHR3byANKEQgbmF0dXJhbCkgd2l0aCBi
aXQgdHdvLCBldGMuICBBIHN0cmFpZ2h0Zm9yd2FyZCBhbGdvcml0aG0gZm9yIGNvbXB1dGlu
ZyBib3RoIHRoZSBCaW5hcnktTm9ybWFsIEZvcm0gYW5kIE5vcm1hbCBUcmFuc3Bvc2l0aW9u
IGlzIGRlcml2ZWQgaW4gW0FtdWVkb10sIHBwLiAxOTMtMjAwOg0NKGRlZnVuIEJpbmFyeS1O
b3JtYWwtYW5kLVRyYW5zcCAocGl0Y2gtc2VxKQ0gIChsZXQqICgoYmluYXJ5LWNvZGVzIA0g
ICAgICAgICAgKG1hcGNhciAjJyhsYW1iZGEgKHRyYW5zcCkgKEJpbmFyeS1Db2RlDSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBST1BFUi1TRVQNICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1PRC0xMg0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKFNVQiBwaXRjaC1zZXEgdHJhbnNwKSkpKSkNICAg
ICAgICAgICAgICAgICAgKE5VTUJFUlMgMTIpKSkNICAgICAgICAgKG1pbi1jb2RlIChNSU5J
TVVNIGJpbmFyeS1jb2RlcykpKQ0gICAgKHZhbHVlcyBtaW4tY29kZSAocG9zaXRpb24gbWlu
LWNvZGUgYmluYXJ5LWNvZGVzKSkpKQ0MVGhpcyBwcm9jZWR1cmUgZGV0ZXJtaW5lcyB0aGUg
cGFydGljdWxhciB0cmFuc3Bvc2l0aW9uIG9mIGEgcGl0Y2gtY2xhc3Mgc2V0IHRoYXQgbWlu
aW1pemVzIGl0cyB0d2VsdmUtYml0IGJpbmFyeSBlcXVpdmFsZW50LiAgIEJpbmFyeS1Ob3Jt
YWwtYW5kLVRyYW5zcCByZXR1cm5zIHR3byB2YWx1ZXM6ICB0aGUgQmluYXJ5LU5vcm1hbCBG
b3JtIG9mIGEgcGl0Y2ggc2VxdWVuY2UsIGFuZCBpdHMgTm9ybWFsIFRyYW5zcG9zaXRpb24u
ICBGdW5jdGlvbnMgQk5GIGFuZCBOb3JtYWwtVHJhbnNwb3NpdGlvbiBtYXkgbm93IGJlIHJl
ZGVmaW5lZCBhczoNDShkZWZ1biBCTkYgKHBpdGNoLXNlcSkNICAobnRoLXZhbHVlIDAgKEJp
bmFyeS1Ob3JtYWwtYW5kLVRyYW5zcCBwaXRjaC1zZXEpKSkNDShkZWZ1biBOb3JtYWwtVHJh
bnNwb3NpdGlvbiAocGl0Y2gtc2VxKQ0gIChudGgtdmFsdWUgMSAoQmluYXJ5LU5vcm1hbC1h
bmQtVHJhbnNwIHBpdGNoLXNlcSkpKQ0NVGhlIFplcm8tTm9ybWFsIEZvcm0gb2YgYSBwaXRj
aCBzZXF1ZW5jZSBjYW4gYmUgb2J0YWluZWQgZnJvbSB0aGUgQmluYXJ5LU5vcm1hbCBGb3Jt
IG9mIHRoYXQgc2VxdWVuY2UgYnk6DQ0oZGVmdW4gWk5GIChwaXRjaC1zZXEpDSAgKFBDLU51
bXMtZnJvbS1CaW5hcnkgKEJORiBwaXRjaC1zZXEpKSkNDXdoZXJlIHRoZSBpbnZlcnNlIG9m
IEJpbmFyeS1Db2RlIGlzIGRlZmluZWQgYXM6DQ0oZGVmdW4gUEMtTnVtcy1mcm9tLUJpbmFy
eSAoYmluYXJ5LWNvZGUpDSAgKGxvb3AgZm9yIGJpdC1wb3MgZnJvbSAwIHRvIDEyDSAgICAg
ICAgaWYgKGxvZ2JpdHAgYml0LXBvcyBiaW5hcnktY29kZSkNICAgICAgICBjb2xsZWN0IGJp
dC1wb3MpKQ0NCUluIG9yZGVyIHRvIG1ha2UgVFtuXS10eXBlcyBtb3JlIHVzZWZ1bCBmb3Ig
bXVzaWNhbCBhbmFseXNpcyBhbmQgY29tcG9zaXRpb24sIGEgY29uY2lzZSBub21lbmNsYXR1
cmUgZm9yIFpORtVzIGlzIG5lZWRlZC4gIEZvciBleGFtcGxlLCBpdCBpcyBjZXJ0YWlubHkg
cG9zc2libGUgdG8gcmVmZXIgdG8gdGhlIE9jdGF0b25pYyBvciBEaW1pbmlzaGVkIHNjYWxl
IHBpdGNoIGNvbGxlY3Rpb24gZWl0aGVyIGJ5IHRoZSBwaXRjaC1jbGFzc2VzIG9mIGl0cyBa
ZXJvLU5vcm1hbCBGb3JtICgwIDEgMyA0IDYgNyA5IDEwKSBvciBieSBpdHMgYWRqYWNlbnQt
aW50ZXJ2YWwgY29udGVudCANPDEgMiAxIDIgMSAyIDE+LiAgSG93ZXZlciBpbmZvcm1hdGl2
ZSBhbmQgdXNlZnVsLCB0aGVzZSBsYWJlbHMgYXJlIHVud2llbGR5IHdoZW4gaXQgaXMgbmVj
ZXNzYXJ5IHRvIHNpZ25pZnkgcGl0Y2ggY29sbGVjdGlvbnMgbGFyZ2VyIHRoYW4gdHJpYWRz
IG9yIHRldHJhY2hvcmRzLg0JQSBjb25jaXNlLCB0aHJlZS1kaWdpdCBub21lbmNsYXR1cmUg
Zm9yIFpORtVzIGlzIGRlcml2ZWQgYmVsb3cuICBUaGlzIG5vbWVuY2xhdHVyZSBpcyBjYWxs
ZWQgdGhlIA1EZWNpbWFsLU5vcm1hbCBGb3JtIChETkYpLiAgRGVjaW1hbC1Ob3JtYWwgRm9y
bXMgcHJvdmlkZSBhIHVuaXF1ZSwgYWxnb3JpdGhtaWNhbGx5LWRldGVybWluZWQgb3JkZXJp
bmcgb2Ygc21hbGwtaW50ZWdlciBuYW1lcyBmb3IgdGhlICgzNTApIHBvc3NpYmxlIFRbbl0t
dHlwZXMuICBUaGlzIG9yZGVyaW5nIGlzIGVzcGVjaWFsbHkgYWR2YW50YWdlb3VzIGZvciBm
aW5kaW5nIFpORtVzIGJ5IGhhbmQsIGFuZCBpcyBjb252ZW5pZW50IHdoZW4gYW5ub3RhdGlu
ZyBtdXNpY2FsIHNjb3JlcyB3aXRoIFRbbl0tdHlwZXMuICBUbyBnZW5lcmF0ZSB0aGlzIG9y
ZGVyaW5nLCB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBub25zaW5ndWxhciBwaXRjaC1jbGFz
cyBzZXRzIGlzIGVudW1lcmF0ZWQ6DQ0oZGVmdW4gQWxsLU5vbnNpbmd1bGFyLVBDLVNldHMg
KCkNICAocmVtb3ZlLWlmLW5vdCAjJyhsYW1iZGEgKGNvZGUpICg+IChsb2djb3VudCBjb2Rl
KSAxKSkNICAgICAgICAgICAgICAgICAoTlVNQkVSUyA0MDk2KSkpDQ1QaXRjaC1jbGFzcyBz
ZXRzIG9mIGNhcmRpbmFsaXR5IHplcm8gKHRoZSBudWxsIHNldCkgYW5kIG9uZSAoc2luZ2xl
IHBpdGNoLWNsYXNzZXMpIGFyZSBlbGltaW5hdGVkIGZyb20gZnVydGhlciBjb25zaWRlcmF0
aW9uIGJ5IHRoaXMgc3RlcC4gIFRoZSBzZXQgb2YgYWxsIGRpc3RpbmN0IEJpbmFyeS1Ob3Jt
YWwgRm9ybXMsIHJlcHJlc2VudGluZyBhbGwgdW5pcXVlIFplcm8tTm9ybWFsIEZvcm1zLCBp
cyBnZW5lcmF0ZWQgYnk6DQ0oZGVmdW4gQWxsLUJpbmFyeS1Ob3JtYWxzICgpDSAgKHNvcnQg
DSAgIChQUk9QRVItU0VUDSAgICAobWFwY2FyICMnIChsYW1iZGEgKGNvZGUpIChCTkYgKFBD
LU51bXMtZnJvbS1CaW5hcnkgY29kZSkpKQ0gICAgICAgICAgICAoQWxsLU5vbnNpbmd1bGFy
LVBDLVNldHMpKSkNICAgIyc8KSkNDUFsbC1CaW5hcnktTm9ybWFscyByZXR1cm5zIGFuIG9y
ZGVyZWQgc2VxdWVuY2Ugb2YgYmluYXJ5IGVuY29kaW5ncyBmb3IgYWxsIHBvc3NpYmxlIFpl
cm8tTm9ybWFsIEZvcm1zLiAgVGhpcyBzZXF1ZW5jZSBjb25zaXN0cyBvZiAoMzUwKSBub24t
Y29udGlndW91cyBvZGQgaW50ZWdlcnMgcmFuZ2luZyBiZXR3ZWVuICgzKSBhbmQgKDQwOTUp
IGRlY2ltYWwuAiAgVGhlIG51bWJlciBvZiBlbGVtZW50cyByZXR1cm5lZCBieSBBbGwtQmlu
YXJ5LU5vcm1hbHMgKGV4Y2x1ZGluZyB0aGUgZGVnZW5lcmF0ZSBwaXRjaC1jbGFzcyBzZXQg
b2YgY2FyZGluYWxpdHkgemVybyBhbmQgdGhlIGZ1bGwgY2hyb21hdGljIHNjYWxlKSBhZ3Jl
ZXMgZXhhY3RseSB3aXRoIHRoZSBpbnZlbnRvcnkgb2YgVFtuXS10eXBlcyBwcmVzZW50ZWQg
b24gcC4gODAgb2YgW01vcnJpc10uDQlUaGUgc2V0IG9mIGFsbCBCaW5hcnktTm9ybWFsIEZv
cm1zIGNhbiBiZSByZWxhYmVsZWQgdG8gb2NjdXB5IG1vc3RseSBjb25zZWN1dGl2ZSBpbnRl
Z2VycyBvZiBzbWFsbGVyIG1hZ25pdHVkZSBieSBjb21wdXRpbmc6DQwoZGVmdW4gSU5GLWZy
b20tQk5GIChCaW5hcnktTm9ybWFsLUZvcm0pDSAgKC8gKC0gQmluYXJ5LU5vcm1hbC1Gb3Jt
IDEpIDIpKQ0NVGhpcyByZXByZXNlbnRhdGlvbiBpcyBjYWxsZWQgdGhlIEludGVnZXItTm9y
bWFsIEZvcm0gb3Ig0klORtMgb2YgYSBwaXRjaCBzZXF1ZW5jZS4gIExJU1AgZnVuY3Rpb24g
SU5GIGRlZmluZXMgYW4gYWxtb3N0LWNvbnRpZ3VvdXMgbWFwcGluZyBvZiB0aGUgQmluYXJ5
LU5vcm1hbCBGb3JtcyBvbnRvIHRoZSBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VyczoNDShkZWZ1
biBJTkYgKHBpdGNoLXNlcSkNICAoSU5GLWZyb20tQk5GIChCTkYgcGl0Y2gtc2VxKSkpDQ1U
aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBJbnRlZ2VyLU5vcm1hbCBGb3JtcyBpcyBlbnVtZXJh
dGVkIGJ5Og0NKGRlZnVuIEFsbC1JbnRlZ2VyLU5vcm1hbHMgKCkNICAobWFwY2FyICMnSU5G
LWZyb20tQk5GIChBbGwtQmluYXJ5LU5vcm1hbHMpKSkNDWFuZCB0aGUgaW52ZXJzZSBvZiBJ
TkYtZnJvbS1CTkYgaXMgZGVmaW5lZCB0byBiZToNDShkZWZ1biBCTkYtZnJvbS1JTkYgKElu
dGVnZXItTm9ybWFsKQ0gICgrICgqIEludGVnZXItTm9ybWFsIDIpIDEpKQ0NSW50ZWdlci1O
b3JtYWwgRm9ybXMgY291bGQgYmUgdXNlZCB0byBpbmRleCBaZXJvLU5vcm1hbCBGb3JtcyBk
aXJlY3RseS4gIEhvd2V2ZXIgdGhlc2UgbGFiZWxzIGFyZSBub3QgcGFydGljdWxhcmx5IGNv
bmNpc2UsIGFuZCB0aGV5IGRvIG5vdCBjb252ZXkgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgcGl0Y2gtY2xhc3Mgc2V0cyB0aGV5IHNpZ25pZnkuICBJbiBvcmRlciB0byBj
cmVhdGUgY29tcGFjdCBidXQgaW5mb3JtYXRpdmUgbGFiZWxzIGZvciBaTkbVcywgdGhlIHNl
dCBvZiBhbGwgcG9zc2libGUgSW50ZWdlci1Ob3JtYWwgRm9ybXMgaXMgbmV4dCBwYXJ0aXRp
b25lZCBieSBjYXJkaW5hbGl0eS4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGNvbGxhdGlu
ZyB0aGUgc2V0IG9mIEFsbC1JbnRlZ2VyLU5vcm1hbHMgYnkgdGhlIG51bWJlciBvZiDSb25l
0yBiaXRzIGluIGVhY2ggb2YgaXRzIGNvbnN0aXR1ZW50IEludGVnZXItTm9ybWFsIEZvcm1z
Og0NKGRlZnVuIENvbGxhdGUtSW50ZWdlci1Ob3JtYWxzICgpDSAgKGxldCAoKHJlc3VsdCAo
bWFrZS1hcnJheSAxMiA6aW5pdGlhbC1lbGVtZW50ICcoKSkpKQ0gICAgKGRvbGlzdCAoSW50
ZWdlci1Ob3JtYWwgKEFsbC1JbnRlZ2VyLU5vcm1hbHMpIChjb2VyY2UgcmVzdWx0ICdsaXN0
KSkNICAgICAgKHB1c2ggSW50ZWdlci1Ob3JtYWwgKGFyZWYgcmVzdWx0IChsb2djb3VudCBJ
bnRlZ2VyLU5vcm1hbCkpKSkpKQ0NQW4gaW52ZW50b3J5IG9mIEludGVnZXItTm9ybWFsIEZv
cm1zIGJ5IGNhcmRpbmFsaXR5IG1heSBiZSBkaXNwbGF5ZWQgYnkgY29tcHV0aW5nOg0NKG1h
cCAnbGlzdCAjJ2xlbmd0aCAoQ29sbGF0ZS1JbnRlZ2VyLU5vcm1hbHMpKQ0Nd2hpY2ggeWll
bGRzIHRoZSBzZXF1ZW5jZToNDSgwIDYgMTkgNDMgNjYgODAgNjYgNDMgMTkgNiAxIDEpDQ1U
aGlzIGludmVudG9yeSBhZ3JlZXMgZXhhY3RseSB3aXRoIHRoZSB0YWJsZSBvZiBUW25dLXR5
cGVzIGZvdW5kIG9uIHAuIDgwIG9mIFtNb3JyaXNdLCBleGNsdWRpbmcgdGhlIG51bGwgYW5k
IHNpbmdsZXRvbiBQQy1zZXRzIG9mIGNhcmRpbmFsaXR5IHplcm8gYW5kIG9uZSAod2hpY2gg
d2VyZSByZW1vdmVkIGJ5IEFsbC1Ob25zaW5ndWxhci1QQy1TZXRzKS4gIA1UaGUgSU5G1XMg
b2YgZWFjaCBjYXJkaW5hbGl0eSBjbGFzcyBtYXkgbm93IGJlIHNvcnRlZCBieSB0aGVpciBa
TkbVczoNDShkZWZ1biBSZW9yZGVyLUludGVnZXItTm9ybWFscyAoSU5GLUNhcmQtQ2xhc3Mp
DSAgKG1hcGNhciAjJ2NhciANICAgICAgICAgIChzb3J0IChsb29wIGZvciBJbnRlZ2VyLU5v
cm1hbCBpbiBJTkYtQ2FyZC1DbGFzcw0gICAgICAgICAgICAgICAgICAgICAgZm9yIEJORiA9
IChCTkYtZnJvbS1JTkYgSW50ZWdlci1Ob3JtYWwpDSAgICAgICAgICAgICAgICAgICAgICBm
b3IgWk5GID0gKFBDLU51bXMtZnJvbS1CaW5hcnkgQk5GKQ0gICAgICAgICAgICAgICAgICAg
ICAgY29sbGVjdCAobGlzdCBJbnRlZ2VyLU5vcm1hbCAoRW5jb2RlLVpORiBaTkYpKSkNICAg
ICAgICAgICAgICAgICMnPCA6a2V5ICMnY2FkcikpKQ0Nd2hlcmU6DQ0oZGVmdW4gRW5jb2Rl
LVpORiAoWk5GKQ0gIChsb29wIGZvciBkaWdpdCBpbiAocmV2ZXJzZSAocmVzdCBaTkYpKQ0g
ICAgICAgIGZvciBpdGVtIGZyb20gMA0gICAgICAgIHN1bSAoKiAoZXhwdCAxMiBpdGVtKSBk
aWdpdCkpKQ0MVGhlIHJlb3JkZXJlZCBJbnRlZ2VyLU5vcm1hbCBGb3JtcyBhcmUgYXNzaWdu
ZWQgcG9zaXRpdmUgaW50ZWdlcnMgcmFuZ2luZyBmcm9tIFsoY2FyZCoxMDApKzFdIHRvIFso
Y2FyZCoxMDApK05dLCB3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2YgcGl0Y2gtY2xhc3Mgc2V0
cyBvZiBlYWNoIGNhcmRpbmFsaXR5IGNsYXNzOg0NKGRlZnVuIEFzc2lnbi1ETkZzIChSZW9y
ZGVyZWQtSU5GcykNICAoc29ydCAobGV0ICgoRE5GLVRhYmxlICcoKSkNICAgICAgICAgICAg
ICAoY2FyZCAxKSkNICAgICAgICAgIChkb2xpc3QgKElORi1DYXJkLUNsYXNzIFJlb3JkZXJl
ZC1JTkZzIERORi1UYWJsZSkNICAgICAgICAgICAgKGxldCAoKERORiAoKyAoKiBjYXJkIDEw
MCkgMSkpKQ0gICAgICAgICAgICAgIChkb2xpc3QgKEludGVnZXItTm9ybWFsIElORi1DYXJk
LUNsYXNzKQ0gICAgICAgICAgICAgICAgKHB1c2ggKGNvbnMgSW50ZWdlci1Ob3JtYWwgRE5G
KSBETkYtVGFibGUpDSAgICAgICAgICAgICAgICAoaW5jZiBETkYpKSkNICAgICAgICAgICAg
KGluY2YgY2FyZCkpKQ0gICAgICAgICMnPCA6a2V5ICMnY2FyKSkNDUl0IGlzIG5vdyBwb3Nz
aWJsZSB0byBidWlsZCBhIHRhYmxlIHRoYXQgcmVsYXRlcyBJbnRlZ2VyLU5vcm1hbCBhbmQg
RGVjaW1hbC1Ob3JtYWwgRm9ybXMgb25lLXRvLW9uZToNDShkZWZ1biBNYWtlLURORi1UYWJs
ZSAoKQ0gIChkZWZ2YXIgKkRORi1UQUJMRSoNICAgIChBc3NpZ24tRE5Gcw0gICAgIChtYXAg
J2xpc3QgIydSZW9yZGVyLUludGVnZXItTm9ybWFscyAoQ29sbGF0ZS1JbnRlZ2VyLU5vcm1h
bHMpKSkpKQ0NVGhlIG1hcHBpbmcgb2YgcmVvcmRlcmVkIElORtVzIG9mIGVhY2ggY2FyZGlu
YWxpdHkgb250byB0aGUgcG9zaXRpdmUgaW50ZWdlcnMgbWF5IGJlIHJlcHJlc2VudGVkIGFz
IGEgc2VxdWVuY2Ugb2Ygb3JkZXJlZCBwYWlycyB1c2luZyBhIExJU1AgYXNzb2NpYXRpb24g
bGlzdDoNDSggKDEgLiAyMDEpICAoMiAuIDIwMikgICgzIC4gMzAxKSAgKDQgLiAyMDMpICAo
NSAuIDMwMikgICg2IC4gMzA2KSAgKDcgLiA0MDEpICAoOCAuIDIwNCkNICAoOSAuIDMwMykg
KDEwIC4gMzA3KSAoMTEgLiA0MDIpICgxMiAuIDMxMSkgKDEzIC4gNDA2KSAoMTQgLiA0MTgp
ICgxNSAuIDUwMSkgKDE2IC4gMjA1KQ0gKDE3IC4gMzA0KSAoMTggLiAzMDgpICgxOSAuIDQw
MykgKDIwIC4gMzEyKSAoMjEgLiA0MDcpICgyMiAuIDQxOSkgKDIzIC4gNTAyKSAoMjQgLiAz
MTUpDSAoMjUgLiA0MTApICgyNiAuIDQyMikgKDI3IC4gNTA1KSAoMjggLiA0MzEpICgyOSAu
IDUxNCkgKDMwIC4gNTMzKSAoMzEgLiA2MDEpICgzMiAuIDIwNikNICAgIC4uLmV0Yy4uLiAg
ICkNDVR3byBmdW5jdGlvbnMgbWF5IG5vdyBiZSBkZWZpbmVkIHRvIGNvbnZlcnQgYmV0d2Vl
biBJbnRlZ2VyLU5vcm1hbCBhbmQgRGVjaW1hbC1Ob3JtYWwgRm9ybXMgdXNpbmcgdGhlIGFz
c29jaWF0aW9uIGxpc3QgYm91bmQgdG8gKkRORi1UQUJMRSogOg0NKGRlZnVuIERORi1mcm9t
LUlORiAoSU5GKQ0gIChjZHIgKGFfADkAMQA0ADYAMwAzADAANgA1AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgABAf//////////BgAAAAEJAgAAAAAA
wAAAAAAAAEYAAAAAAFPlMh3rvAEAU+UyHeu8AQAAAAAAAAAAAAAAAAMAUABJAEMAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAIB
////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAEwA
AAAAAAAAAwBQAEkAQwBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAwAAgEFAAAACAAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAiAAAAOh4AAAAAAAABAEMAbwBtAHAATwBiAGoAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgACAf///////////////wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABcAAAAAAAAAB46AAAAAACN
AawAEQL/DAD/////AAAAAAAAAAABAAAAAQAAAAAAAAAAoQHyAAZNU1dEAAAAAQAKAAAAAACM
AasAmIBcAAAAAADyAuAAAAAAAAAAAABIAAAASAAAAAAAAQABAAEAAAAAAIPP/AAAAAAAABxQ
AAAAAQAA////////AAEAAAAAAAAAAAAAAPIC4AAAAAAAjAGrAAACpQACpQACpQACpQAIAA+p
/wL+AAAIAAipAAIDAAAIAAipAAIDAAAIAAipAAIDAAATAwv3/3/b/wD4/QAAB9j/AvsAAA8C
CAQB2QABCATVAAIDAAAUAwv0AX/b/wX4DAwAAAfY/wL7AAARAggEAdkAAw4ceMzXAAIDAAAU
Awv0AX/b/wX4DzyMzAfY/wL7AAARAggEAdkAAwvsfMzXAAIDAAAUAwv0AX/b/wX4CczMeAfY
/wL7AAARAggEAdkAAwiMzMzXAAIDAAAUAwv0AX/b/wX4CAzMzAfY/wL7AAARAggEAdkAAwgM
fMzXAAIDAAATAwv3/3/b/wD4/QAAB9j/AvsAAAgACKkAAgMAAAgACKkAAgMAAAgACKkAAgMA
AAcAD6j/AQAACgAIqwAEAQADAAAKAAirAAQBAAMAAAoACKsABAEDAwAACgAIqwAEAQSDAAAP
AQge+QAAILUABAEIQwAAHw0IIQEOOfBeOCIIJwAACMAADAcc++iBgAAAARAjAAAfDQhMgxFE
IFFEIxhIgAAIwAAECKISCQL+AAQBIBMAAB8OCFCBEURAUUBSqEi4xjmAwAALoiPKB1mMAAF4
ewAAIA4IUIEPPOBeQFJIiKUpSkDBAAwBHHAsAmJSAAEIQwAAIA4ITIEBBBBUQPoIiKUJS8DB
AAwCIggqAkPeAAEIQwAAHw0IIQECCRBSRIoJCKUpSsAADAQiiikCQhAAAQhDAAAgDggeAQww
4FE4igkHOMY5gMEADA+ccciCQYwAAQ/DAAAOAAj3AAAgtgAEAQADAAAOAAj3AAAgtgAEAQAD
AAAKAAirAAQB//8AAAoACKsABAEREwAACgAIqwAEAURHAAAJAA+q/wMREwAACgAIqwAEAURH
AAAJAA+q/wMREwAACgAIqwAEAURHAAAKAAirAAQBERMAAAoACKsABAFERwAACgAIqwAEARET
AAAMAggABq0ABAFERwAADAIIAAatAAQBERMAAAoACKsABAFERwAACgAIqwAEARETAAAKAAir
AAQBREcAAAoACKsABAEREwAACgAIqwAEAURHAAAKAAirAAQBERMAAAwCCAAGrQAEAURHAAAM
AggABq0ABAEREwAACgAIqwAEAURHAAAKAAirAAQBERMAAAoACKsABAFERwAACgAIqwAEARET
AAAKAAirAAQBREcAADUrCAPBgMDwH+H8AAcAA8BgAHgGAH/DgB/DADgB/BgAEA/4BAA8GAAQ
AIAEB4DWAAQBERMAADUrCA/xgMP8H/H/AAYAD/H4Af4fgH/P4B/jAP4B/xgAMA/4DAD/GAAw
AIAMAYDWAAQBREcAADUrCBw5gMcOGDmDgAYAHDmYA4cZgGAMYBhzAMYBg5gAcAwAHAHDmABw
AcAcAYDWAAQBERMAADUrCBgZgMYGGBmBhgYAGBsMAwMwwGAAMBgzcAMBgZuA8AwAPAGBm4Dw
AcA8AYDWAAQBREcAADUrCDABgMwDGBmAxgYAMAMMBgAwwGAAcBhz/AcBgN/hsAwAbAMAH+Gw
A2BsAYDWAAQBERMAADUrCDAB/8wDGDmAwAYAMAAMBgAAwH/B4B/jjB4BgNxjMA/4zAMAHGMw
A2DMAYDWAAQBREcAADUrCDAB/8wDH/GAwAYAMAAYBj8BgH/B4B/zBh4BgNg2MA/5jAMfmDYw
BjGMAYDWAAQBERMAADUrCDABgMwDH/GAwAYAMAA4Bj8DgGAAcBgzBgcBgNg3/AwB/wMfmDf8
B/H/AYDWAAQBREcAADUrCDABgMwDGDmAwAYAMABwBgMHAGAAMBgbBgMBgNg3/AwB/wMBmDf8
B/H/AYDWAAQBERMAADUrCBgZgMYGGBmBgAYAGBjgAwMOAGAAMBgbBgMBgZgwMAwADAGBmDAw
DBgMAYDWAAQBREcAADUrCBw5gMcOGBmDgAYAHDnAA4ccAGAMYBgzjMYBg5xgMAwADAHDnGAw
DBgMAYDWAAQBERMAADUrCA/xgMP8GBn/BgYAD/P8Af8/wH/P4B/z/P4B/x/gMA/4DAD/n+Aw
GAwMAYDWAAQBREcAADUrCAPBgMDwGBn8BgYAA8P8AHs/wH/DgB/DcDgB/BuAMA/4DAA9m4Aw
GAwMAYDWAAQBERMAABMACPgAAAbiAAEBgNYABAFERwAAEwAI+AAABuIAAQGA1gAEARETAAAT
AAj4AAAG4gABAYDWAAQBREcAABMACPgAAAfiAAEHgNYABAEREwAACgAIqwAEAURHAAAlAggf
4P4AAP/9ABEPAAfwAAAGADgAASBgGAABgcDHAAQBERMAACYHCB/wAAAY/4D+ABE/wAf8AAAG
AP4AASDgOAADh/DHAAQBREcAACYHCBg4AAAYwcD+ABFw4AYOAAAGAMYAASHgeAAHhjDHAAQB
ERMAACYcCBgYcBw8wMOB4MBgYAYGDgAG4YMAB/Ng2AANgBjHAAQBREcAACYcCBgZ/H88wM/j
+MDAAAYDP4AH+YMAAkBgGAABgDjHAAQBERMAACYcCBg5jGMYwcxjGADAAAYDMYAHGYMAAkBg
GAABgPDHAAQBREcAACYcCB/zBsGY/5gzwADAAAYDYMAGDMcAAkBgGAABgPDHAAQBERMAACYc
CB/zBsGY/xgx8ADAAAYDYMAGDP8AD+BgGAABgDjHAAQBREcAACYcCBg7BsGYwBgweADAAAYD
YMAGDDsABIBgGAABgBjHAAQBERMAACYcCBgbBsGYwBgwGABgYAYGYMAGDAMABIBgGAABgBjH
AAQBREcAACYcCBgZjGMYwAxjGABw4AYOMYAHGMYABIBgGAABhjDHAAQBERMAACYTCBgZ/H8c
wA/j8MA/wAf8P4AH+P7+AAVgGAABh/DHAAQBREcAACYTCBgYcBwMwAOA4MAPAAfwDgAG4Dj+
AAVgGAABgcDHAAQBERMAAAoACKsABAFERwAACgAIqwAEARETAAAKAAirAAQBREcAABgACPIA
BR/4AAB/4P4AAX/gxQAEARETAAAKAAirAAQBREcAACIBCDD8AAAY/gAPD+AAAAwAcAACQMAw
AAMDgMUABAEREwAAIgEIMPwAABj+AA8P+AAADAH8AAJBwHAABw/gxQAEAURHAAAeAQgw+AAP
DBwAAAwBjAACQ8DwAA8MYMUABAEREwAAJAkIMbhjDg2eGHBu/gwNHAANwwYAD+bBsAAbADDF
AAQBREcAACQaCDH8Yz+Pv5n8fwwMBn8AD/MGAASAwDAAAwBwxQAEARETAAAkGggxzmMxjjGZ
jHOADAZjAA4zBgAEgMAwAAMB4MUABAFERwAAJBoIMYY2YMw8GwZhgAwGwYAMGY4ABIDAMAAD
AeDFAAQBERMAACQaCDGGNn/MHxsGYYAMBsGADBn+AB/AwDAAAwBwxQAEAURHAAAkGggxhjZ/
zAebBmGADAbBgAwYdgAJAMAwAAMAMMUABAEREwAAJBoIMYYcYAwBmwZhgAwMwYAMGAYACQDA
MAADADDFAAQBREcAACQaCDGGHDGMMZmMYYAMHGMADjGMAAkAwDAAAwxgxQAEARETAAAkEQgx
hgg/jD8Z/GGMD/h/AA/x/P4ABcAwAAMP4MUABAFERwAAJBEIMYYIDgwOGHBhjA/gHAANwHD+
AAXAMAADA4DFAAQBERMAAAoACKsABAFERwAACgAIqwAEARETAAAKAAirAAQBREcAABgACPQA
BT/wAAD/wP4AAf/AwwAEARETAAAKAAirAAQBREcAAEIHCD/APAAEBmD8AC0P4AAADABwAAJA
wDAAAwOAAAZh4AAcAADAMAAwAMDgABmYAz/AAOAABgGAABgc5QAEARETAABCBwg/4P8ABAZg
/AAtD/gAAAwB/AACQcBwAAcP4AAGZ/AAfwABwHAAMAHD+AAZmAM/wAP4AA4DgAA4f+UABAFE
RwAAQQYIMHHDgA4G+wAtDBwAAAwBjAACQ8DwAA8MYAAGBjAAYwADwPAAMAPDGAAYHAcAwAMY
AB4HgAB4Y+UABAEREwAARQsIMDGBgA4GY8DwOB7+DCwcAA3DBgAP5sGwABsAMAB2bAAAwYAG
wbAANwbADAHZnAcAwAYMADYNgADYAYDmAAQBREcAAEU7CDAzAAAbBm/h/P4/jAwGfwAP8wYA
BIDAMAADAHAB/m3AAMGAAMAwAD/AwBwH+Z4PAYAGDAAGAYAAGAOA5gAEARETAABEOggwcwAA
GwZsMYzGMYAMBmMADjMGAASAwDAAAwHgAY5v8ADBgADAMAA4wMB4BjmeDwGABgwABgGAABgP
5QAEAURHAABEOgg/4wAAMYZg8eGDPAAMBsGADBmOAASAwDAAAwHgAwZuMABjgADAMAAwYMB4
DBmbGwMAAxwABgGAABgP5QAEARETAABFOwg/wwA+P4Zj8Pn/HwAMBsGADBn+AB/AwDAAAwBw
AwZsGAB/gADAMAAwYMAcDBmbGwMAA/wABgGAABgDgOYABAFERwAARTsIMAMAPj+GZzA9/weA
DAbBgAwYdgAJAMAwAAMAMAMGbBgAHYAAwDAAMGDADAwZmbMGAADsAAYBgAAYAYDmAAQBERMA
AEU7CDABgYBgxmwwDYABgAwMwYAMGAYACQDAMAADADADBmwYAAGAAMAwADBgwAwMGZmzBgAA
DAAGAYAAGAGA5gAEAURHAABEOggwAcOAYMZscYzGMYAMHGMADjGMAAkAwDAAAwxgAY5mMABj
AADAMAA4wMMYBjmY4wwAAxgABgGAABhj5QAEARETAABEEwgwAP8AwGZv+fj+PwwP+H8AD/H8
/gAjwDAAAw/gAf5n8AB/AADAMAA/wMP4B/mY4wwAA/gABgGAABh/5QAEAURHAABEEwgwADwA
wGZnmHA4DgwP4BwADcBw/gAjwDAAAwOAAHZhwAAcAADAMAA3AMDgAdmYQwwAAOAABgGAABgc
5QAEARETAAAKAAirAAQBREcAAAoACKsABAEREwAACgAIqwAEAURHAAAvAAjyAAU/8AAA/8D+
AAH/wPwACAP/AD/wAAD/wPkABx/4Af+AAAf+4wAEARETAAAKAAirAAQBREcAABkPCD+BgMf4
AD/gA/z+DgAAf7oABAEREwAAGQ8IP+HAx/wAP+AD/P4/gAB/ugAEAURHAAAZDwgwceDGDgAw
AAAMwDGAAGC6AAQBERMAABkPCDAx4MYGMDAAAAzAYMAAYLoABAFERwAAGQ8IMBmwxgYwMAAA
GPhgwAB8ugAEARETAAAZDwgwGZjGDgA/4AAY/mDAAH+6AAQBREcAABkPCDAZnMf8AD/gADAG
McAAA7oABAEREwAAGhAIMBmMx/wAMAAAMAM/wAABgLsABAFERwAAGhAIMBmGxg4AMAAAYYMO
wADBgLsABAEREwAAGhAIMDGDxgYAMAAAYYMAwADBgLsABAFERwAAGQ8IMHGDxgYAMAAAwMYx
gABjugAEARETAAAZDwg/4YHGBjA/4ADA/j+AwH+6AAQBREcAABkPCD+BgMYGMD/gAMA4DgDA
HLoABAEREwAACgAIqwAEAURHAAAKAAirAAQBERMAAAoACKsABAFERwAACgAIqwAEARETAAAK
AAirAAQBREcAAF1TCD+BgM/4AA/z+DgAwA8AfwA/5gAP+AHgwAAQMAAEAGAcAYAMAHAD+APA
DgA4B4AADAAYAMABgAwAGAAAOAAgIAYAHgAIAYAHgAIAYAHgAIA4AHhA/gAEARETAABdUwg/
4cDP+AAP8/j+AYA/wH/AP+YAD/gH+MAAEDAABAAwGAfgPwH8A/gP4B8A/gGAAD8AOAPwA4A/
ADgAAP4AQGAfgH8AGAfgH8AGAfgH8AGA/gH8IP4ABAFERwAAXQQIMHHgzP4ASzMAxgGAcOBg
4DAGAAwADhzAADgwAA4AMBgGYDMBjAMADGAxgMYBgAAzAHgDMAeAMwB4AADGAMDgGYBjADgG
YBjADgGYBjADgMYBjDD+AAQBERMAAFwMCDAx4MwAwAAzAYMBgP1gQjAG4AwADAzcADg3AA4A
MBgMMGGABgMAGAAxgYMBgANhgNgGGA2AYYDYYAADAIHgMMDAAHgMMDAAHgMMDAAHgAMDABD+
AAQBREcAAF1TCDAZsMwAwABj4YMBgMAAYDAwB/gMABgA/wBsP8AbADAYDDBhgA4D4BuAMYGD
AYAPYYAYBhgBgGGAGHgABwGDYDDA3ADYDDA3ADYDDA3ADYAHA3AY/gAEARETAABdUwgwGZjP
8AAAY/mDAYDAAGAwP+cYD/AYAOMAbDjAGwAwGAwwAYA8A/gf4B8BgwGAPAGAGAAYAYABgBge
AB4BhmAAwP8BmAAwP8BmAAwP8BmAHgP8GP4ABAFERwAAXVMIMBmcz/AAAMAYxwGAwABgMD/m
DA/wGPzBgMYwYDGAMBgMMAMAPAAYHGA/gMcBgPADABgAMAGAAwAYB4AeAYxgAYDjAxgAYDjA
xgAYDjAxgB4DjBj+AAQBERMAAF0ECDAZjMz+AEvADP8BgMAAYDAwBgwMABj8wYD+MGA/gDAY
DDAHAA4ADBgwMYD/AYPABwAYAHABgAcAGAHgBwGP+AOAwYP+AOAwYP+AOAwYP+AHAwYY/gAE
AURHAABdUwgwGYbMAAABhgw7AwDAAGAwMAYMDAAYDMGA/jBgP4AYGAwwDgAGBgwYMGDAOwGA
8A4AGADgAYAOABgHgAMBj/gHAMGD/gHAMGD/gHAMGD/gAwMGGP4ABAEREwAAXAwIMDGDzAAA
AYYMAwGA/WBCMAYMDAAMDMGBgzBgYMAwGAwwHAAGBgwYMGDAAwGAPBwAGAHAAYAcABgeAAMB
gGAOAMGAGAOAMGAGAOAMGAGAAwMGGP4ABAFERwAAXVMIMHGDzAAAAwMYxgGAcOBg4DAHGAwA
DhzjAYM4wGDAMBgGYDgBjAMYDGAxgMYBgA84ABgDgAGAOAAYeADGAYBgHABjABgHABjABgHA
BjABgMYBjBj+AAQBERMAAF1TCD/hgcwAwAMD+P4BgD/Af8A/5/gMAAf8/wMBv8DAYDAYB+B/
gfwD+A/gP4D+AYADf4AYB/gBgH+AGGAA/gGAYD/AfwAYD/AfwAYD/AfwAYD+AfwY/gAEAURH
AABdUwg/gYDMAMADAOA4AYAPAH8AP+bgDAAB7NwDAbcAwGAwGAGAf4BwAOADgA4AOAGAAH+A
GAf4AYB/gBgAADgBgGA/wBwAGA/wBwAGA/wBwAGAOABwGP4ABAEREwAAIQAI9wABAYDvAAEw
GPUAAQGA8gAAgO0AABD+AAQBREcAACEACPcAAQGA7wABMBj1AAEBgPIAAMDtAAAw/gAEARET
AAAhAAj3AAEBgO8AATAY9QABAYDyAABA7QAAIP4ABAFERwAAIAAI9gAAwO8AAWAc9QABB4Dy
AAAg7QAAQP4ABAEREwAACgAIqwAEAURHAABZTwg/gf4f8AAf44H+AAADADwB/BgAP+YAD/gA
8GAADwACADAOAMADADgACAHgH+AcA8AAAwAYADABgAMAGAAAHAARwAcADwBwAcAHAgD/AHAG
+gAEARETAABZTwg/4f8f8AAf7+H+AAAGAP8B/xgAP+YAD/gD/GAAP8ACABgMA/AHAP4AGAfw
H+B/AMAABwB+AHAH4AcAfgAAfwAn8B/AP4H8B/AfwQD/AfwO+gAEAURHAABZBAgwcYOY/gBH
bGAGAAAGAcOBg5gAMAYADAAHDmAAcOAHABgMAzAPAMYAOAYwAGBjAMAADwBmAPAGYA8AZgAA
YwBmMBjAMYGMBjAYwYADAYwe+gAEARETAABZDggwMYGYAYAAYDAGAAAGAf6BPZuAMAbgDAAG
Bm4AYGAHABgMBhgbAAMAeAwAAGDBgMABmwDDAbAMMBsAwzAAAYBAGABgYAAGABgAYIADAAY2
+gAEAURHAABZTwgwGYGYAYAAwHAMAAAGAwABgN/gMAf4DAAMAH+AwAANgBgMBhgDAAcA2A3A
AMDBgMAHgwDDADAMMAMAwzwAA4DAOADgbgAOADgA4MAGAA4G+gAEARETAABZTwgwGYOf4AAA
weAMB/wGAwABgNxgP+cYD/gMAHGAwAANgBgMBhgDAB4BmA/wAMDBgMAeAwADADAAMAMAAw8A
DwDA8APAf4A8APADwMAGADwG+gAEAURHAABZTwgwGf8f4AABgeAYB/wGAwABgNgwP+YMD/gM
fmDAx+AYwBgMBhgDAB4DGA4wAYBjgMB4AwAGADAAYAMABgPADwDA8APAcYA8APADwMAMADwG
+gAEARETAABZTwgwGf4YAAABgHAYAAAGAwABgNgwMAYMDAAMfmDAx+AfwBgMBhgDAAcD/gwY
AYB/gMHgAwAOADAA4AMADgDwA4DAOADgYMAOADgA4MAMfA4G+gAEAURHAABZTwgwGYAYAAAD
ADAwAAAMAwABgNgwMAYMDAAMBmDAwGAfwAwMBhgDAAMD/gwYAwAdgMB4AwAcADABwAMAHAPA
AYDAGABgYMAGABgAYMAYfAYG+gAEARETAABZDggwMYAYAAADADAwB/wGAf6BPZgwMAYMDAAG
BmDAYGAwYBgMBhgDAAMAGAwYAwABgMAeAwA4ADADgAMAOA8AAYDAGABgYMAGABgAYMAYAAYG
+gAEAURHAABZTwgwcYAYAAAGDGBgB/wGAcOBg5xgMAcYDAAHDnGAcOAwYBgMAzADAMYAGAYw
BgBjAMAHgwBwADAHAAMAcDwAYwDGMBjAMYGMBjAYwMAwAYwG+gAEARETAABZTwg/4YAYAYAG
D+BgAAAGAP8B/x/gP+f4D/gD/n+AP+BgMBgMA/ADAP4AGAfwBgB/AMABgwD/ADAP8AMA/zAA
fwDH8B/AP4H8B/AfwMAwAfwG+gAEAURHAABZTwg/gYAYAYAGA4BgAAAGADwB/BuAP+bgD/gA
9m4AD2BgMBgMAMADADgAGAHABgAcAMAAAwD/ADAP8AMA/wAAHADBwAcADgBwAcAHAMAwAHAG
+gAEARETAAAfAAj1AAAG7gABGAz0AADA8gAAQPcAAID2AAQBREcAACAACPUAAAbuAAEYDPQA
AMDyAABg+AABAYD2AAQBERMAAB8ACPUAAAbuAAEYDPQAAMDyAAAg+AAAAfUABAFERwAAIAAI
9QAAA+4AATAO9QABA8DyAAAQ+AAAAvUABAEREwAACgAIqwAEAURHAAATCQgxgM/4AAQcA4C0
AAQBERMAABMJCDHAz/gADH8HwLQABAFERwAAEwkIMeDMAAAcYwxgtAAEARETAAATCQgx4MwA
wDwBjGC0AAQB//8AABMJCDGwzADAbAOMYLQABAGABwAAEwkIMZjP8ADMDwfAtAAEAYAHAAAT
CQgxnM/wAYwPD+C0AAQBgAcAABMJCDGMzAAB/wOMYLQABAGABwAAEwkIMYbMAAH/AZgwtAAE
AYAHAAATCQgxg8wAAAwBmDC0AAQBgAcAABMJCDGDzAAADGMMYLQABAGABwAAEwkIMYHMAMAM
fw/gtAAEAYAHAAATCQgxgMwAwAwcA4C0AAQBgAcAAAoACKsABAGABwAACgAIqwAEAYAHAAAK
AAirAAQBgAcAAAoACKsABAGABwAACgAIqwAEAYAHAAAKAAirAAQB//8AAAoACKsABAH//wAA
CgAIqwAEAQADAAAKAAirAAQBAAMAAAoACKsABAEPwwAACgAIqwAEAQhDAAAKAAirAAQBCEMA
AAoACKsABAEIQwAACgAIqwAEAXh7AAAKAAirAAQBIBMAAAoACKsABAEQIwAACgAIqwAEAQhD
AAAKAAirAAQBBIMAAAoACKsABAEDAwAACgAIqwAEAQADAAAKAAirAAQBAAMAAAcAD6j/AQAA
DQIIABCuAAWAAQADAAANAggQEK4ABYCBAAMAAA0CCDAQrgAFgME/gwAADQIIUBCuAAWAoSCD
AAANAgifEK4ABY+RIPsAAA0CCQEQrgAFiAkgiwAADQIKARCuAAWIBSCLAAANAgoBEK4ABYgF
IIsAAA0CCQEQrgAFiAk/iwAADQIInxCuAAWPkQgLAAANAghQEK4ABYChCAsAAA0CCDAQrgAF
gMEICwAADQIIEBCuAAWAgQ/7AAANAggAEK4ABYABAAMAAAcAD6j/AQAABwAHqP8BAAACpQAC
pQACpQAAAP/QzxHgobEa4QAAAAAAAAAAAAAAAAAAAAAAOwAD//4ACQAGAAAAAAAAAAAAAAAA
AAEAAAABAAAAAAAAEAAAAAACAAAAAf////4AAAAAAAAAAP//////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////AwBPAGIAagBJAG4AZgBvAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAgAHAAAACgAAAP//
//8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABAAAAAAAAABPAGIA
agBlAGMAdABQAG8AbwBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAFgABAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAFPlMh3rvAEAU+Uy
Heu8AQAAAAAAAAAAAAAAAFcAbwByAGQARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIBCQAAAAsAAAD/////AAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAALwpAAAAAAAABQBTAHUAbQBtAGEAcgB5AEkA
bgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgD/////
//////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAlgEAAAAA
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
AAQBERMAABMJCDHAz/gADH8HwLQABAFERwAAEwkIMeDMAAAcYwxgtAAEARETAAATCQgx4MwA
wDwBjGC0AAQB//8AABMJCDGwzADAbAOMYLQABAGABwAAEwkIMZjP8ADMDwfAtAAEAYAHAAAT
CQgxnM/wAYwPD+C0AAQBgAcAABMJCDGMzAAB/wOMYLQABAGABwAAEwkIMYbMAAH/AZgwtAAE
AYAHAAATCQgxg8wAAAwBmDC0AAQBgAcAABMJCDGDzAAADGMMYLQABAGABwAAEwkIMYHMAMAM
fw/gtAAEAYAHAAATCQgxgMwAwAwcA4C0AAQBgAcAAAoACKsABAGABwAACgAIqwAEAYAHAAAK
AAirAAQBgAcAAAoACKsABAGABwAACgAIqwAEAYAHAAAKAAirAAQB//8AAAoACKsABAH//wAA
CgAIqwAEAQADAAAKAAirAAQBAAMAAAoACKsABAEPwwAACgAIqwAEAQhDAAAKAAirAAQBCEMA
AAoACKsABAEIQwAACgAIqwAEAXh7AAAKAAirAAQBIBMAAAoACKsABAEQIwAACgAIqwAEAQhD
AAAKAAirAAQBBIMAAAoACKsABAEDAwAACgAIqwAEAQADAAAKAAirAAQBAAMAAAcAD6j/AQAA
DQIIABCuAAWAAQADAAANAggQEK4ABYCBAAMAAA0CCDAQrgAFgME/gwAADQIIUBCuAAWAoSCD
AAANAgifEK4ABY+RIPsAAA0CCQEQrgAFiAkgiwAADQIKARCuAAWIBSCLAAANAgoBEK4ABYgF
IIsAAA0CCQEQrgAFiAk/iwAADQIInxCuAAWPkQgLAAANAghQEK4ABYChCAsAAA0CCDAQrgAF
gMEICwAADQIIEBCuAAWAgQ/7AAANAggAEK4ABYABAAMAAAcAD6j/AQAABwAHqP8BAAACpQAC
pQACpQAAAP8AADIAAQEAMAAAAgQoALEW5yFeIfIKAAAAAAAABQD///8A////AAAAAAAAAAAA
AAAAANDPEeChsRrhAAAAAAAAAAAAAAAAAAAAAAA7AAP//gAJAAYAAAAAAAAAAAAAAAAAAQAA
AAEAAAAAAAAQAAAAAAIAAAAB/////gAAAAAAAAAA////////////////////////////////
////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////8AAwAAAQMAAAIDAAADAwAA
BgMAAAcDAAA8IwAA9gDxAADvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnUBAAh1AUQEmAMAAAARdQFEBAAAAABd
AwBhAARjFAAABgADAAACAwAABAMAAAUDAAAGAwAABwMAAP4AAVwh3AD+AAGEIfAK/gAAAAAA
AP4AAAAAAAD+AAFcIdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAFDgAPAAgAAQBLAA8AAAADACAA
AGDx/wIAIAAGTm9ybWFsAAIAAAAJAF0EAGEJBGMSAAAAAAAAAAAAAAAAAAAAAAAAAAAiAEFA
8v+hACIAFkRlZmF1bHQgUGFyYWdyYXBoIEZvbnQAAAAAAAAAAAAAAAAAAAADAAAABgAAAAAA
AAAHAAAACQAHAwAACQAbAwAAAQAEIP//AQAAAAAABwAAAAAAAAAAAAADAAA8IwAAEgAAAwAA
BwMAABMAAAAAAAcAAAAKIwAAAQD/QAGAAQAAAAAAAAAAAAkAAQABAAAAAAAAAAAAAAAAAAEA
AQA1AukCSgAVBgAATQBUaW1lcyBOZXcgUm9tYW4ADAaQAQIAU3ltYm9sAAsGAABNAEFyaWFs
AAsGkAFNAFRpbWVzAAwGkAFNAE1vbmFjbwAiAAQAMQiIGAAA0AIAAGgBAAAAAAAAAAD6aBEm
AAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAABACDEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
IQMAAAAAKgAAAAAAAAALSm9obiBBbXVlZG8LSm9obiBBbXVlZG8AAAAAAAAAAAAA0M8R4KGx
GuEAAAAAAAAAAAAAAAAAAAAAADsAA//+AAkABgAAAAAAAAAAAAAAAAABAAAAAQAAAAAAABAA
AAAAAgAAAAEEAAAAwwAAAAgAAADXAAAAAQAAAOsAAAAMAAAA8QAAAAsAAAD9AAAADQAAAAkB
AAAPAAAAFQEAABAAAAAdAQAACgAAACUBAAASAAAAMQEAAA4AAABMAQAACQAAAFQBAAATAAAA
XgEAAP//////////////////////////////////////////HgAAACMAAABERUxQSEk6VGV4
dCBUb29sczpUZW1wbGF0ZXM6Tm9ybWFsAB4AAAAMAAAASm9obiBBbXVlZG8AHgAAAAwAAABK
b2huIEFtdWVkbwACAAAAECdAAAAAAIB20/LM5wFAAAAAAIB20/LM5wFAAAAAABSZ9wUBvAED
AAAAAAAAAAMAAAAAAAAAQAAAAAAAAAAAAAAAHgAAABMAAABNaWNyb3NvZnQgV29yZCA2LjAA
AwAAAAAAAAAeAAAAAgAAADIAAwAAAAAAAADQzxHgobEa4QAAAAAAAAAAAAAAAAAAAAAAOwAD
//4ACQAGAAAAAAAAAAD+/wAAAwoBAAAAAAAAAAAAAAAAAAAAAAABAAAA8p+F4E/5EGirkQgA
Kyez2TAAAAB6AgAADwAAAAcAAACYAAAAAgAAAM0AAAAEAAAA1QEAAAgAAADpAQAAAQAAAP0B
AAAMAAAAAwIAAAsAAAAPAgAADQAAABsCAAAPAAAAJwIAAHNzb2MgSU5GICpETkYtVEFCTEUq
KSkpDQ0oZGVmdW4gSU5GLWZyb20tRE5GIChETkYpDSAgKGNhciAocmFzc29jIERORiAqRE5G
LVRBQkxFKikpKQ0NVGhlIERlY2ltYWwtTm9ybWFsIEZvcm0gb2YgYW55IHNldCBvZiBwaXRj
aGVzIGlzIHRodXMgZGV0ZXJtaW5lZCBieSBmdW5jdGlvbiBETkY6DQ0oZGVmdW4gRE5GIChw
aXRjaC1zZXQpDSAgKERORi1mcm9tLUlORiAoSU5GIHBpdGNoLXNldCkpKQ0NYW5kIHRoZSBa
ZXJvLU5vcm1hbCBGb3JtIGNvcnJlc3BvbmRpbmcgdG8gYW55IERORiBtYXkgYmUgcmV0cmll
dmVkIGJ5IGl0cyBpbnZlcnNlOg0NKGRlZnVuIFpORi1mcm9tLURORiAoRE5GKQ0gIChQQy1O
VU1TLWZyb20tQklOQVJZIChCTkYtZnJvbS1JTkYgKElORi1mcm9tLURORiBETkYpKSkpDQ0J
QSBjYXRhbG9nIGxpc3RpbmcgYWxsICgzNTApIERlY2ltYWwtTm9ybWFsIEZvcm1zIGFwcGVh
cnMgb24gcHAuIDEzMi0xNDEgb2YgW0FtdWVkb10uICBUaGlzIGNhdGFsb2cgaXMgb3JnYW5p
emVkIGJ5IHNldCBjYXJkaW5hbGl0eSwgYW5kIGxpc3RzIGV2ZXJ5IERORiBiZXNpZGUgaXRz
IGFzc29jaWF0ZWQgcGl0Y2gtY2xhc3Mgc3ltYm9scyB7IFBDUyB9IGFuZCBaZXJvLU5vcm1h
bCBGb3JtIFsgWk5GIF0uICBTaW5jZSB0aGUgc2V0IG9mIERlY2ltYWwtTm9ybWFsIEZvcm1z
IGNvbnRhaW5zIHRoZSBzZXQgb2YgcHJpbWUgZm9ybXMsICBETkbVcyBtYXkgYWxzbyBiZSB1
c2VkIGFzIGNvbnZlbmllbnQgbGFiZWxzIGZvciBwcmltZSBmb3Jtcy4gIENvbnNlcXVlbnRs
eSB0aGUgY2F0YWxvZyBhbHNvIGRpc3BsYXlzIHRoZSBETkYgb2YgZXZlcnkgcGl0Y2gtY2xh
c3Mgc2V01XMgcHJpbWUgZm9ybS4gIFRoZXNlIHByaW1lIGZvcm1zIGFyZSBsYWJlbGVkIGJ5
IGEgY29ycmVzcG9uZGluZyBEZWNpbWFsLVByaW1lIEZvcm0gKERQRikuICBBIHBvcnRpb24g
b2YgdGhlIGNhdGFsb2cgdGhhdCByZWZlcmVuY2VzIHRoZSBuaW5ldGVlbiBUW25dLXR5cGVz
IG9mIGNhcmRpbmFsaXR5IHRocmVlICh0cmlhZHMpIGlzIGV4Y2VycHRlZCBiZWxvdzoNDERO
RiAgIHsgUENTIH0gICBbIFpORiBdIERQRiAgRFBFICA8QUlDPiBDT00gIElORiBCTkYNMzAx
ICB7IEMgIERiIEQgIH0gIFsgMCAxIDIgXSAgMzAxICAgIFMgICAgPDEgMT4gIDEwICAgICAz
ICAgIDcNMzAyICB7IEMgIERiIEViIH0gIFsgMCAxIDMgXSAgMzAyICAoMzA2KSAgPDEgMj4g
ICA5ICAgICA1ICAgMTENMzAzICB7IEMgIERiIEUgIH0gIFsgMCAxIDQgXSAgMzAzICAoMzEx
KSAgPDEgMz4gICA4ICAgICA5ICAgMTkNMzA0ICB7IEMgIERiIEYgIH0gIFsgMCAxIDUgXSAg
MzA0ICAoMzE1KSAgPDEgND4gICA3ICAgIDE3ICAgMzUNMzA1ICB7IEMgIERiIEdiIH0gIFsg
MCAxIDYgXSAgMzA1ICAoMzE5KSAgPDEgNT4gICA2ICAgIDMzICAgNjcNMzA2ICB7IEMgIEQg
IEViIH0gIFsgMCAyIDMgXSAgMzAyICAgPC0tICAgPDIgMT4gICA5ICAgICA2ICAgMTMNMzA3
ICB7IEMgIEQgIEUgIH0gIFsgMCAyIDQgXSAgMzA3ICAgIFMgICAgPDIgMj4gICA4ICAgIDEw
ICAgMjENMzA4ICB7IEMgIEQgIEYgIH0gIFsgMCAyIDUgXSAgMzA4ICAoMzEyKSAgPDIgMz4g
ICA3ICAgIDE4ICAgMzcgICBTdTINMzA5ICB7IEMgIEQgIEdiIH0gIFsgMCAyIDYgXSAgMzA5
ICAoMzE2KSAgPDIgND4gICA2ICAgIDM0ICAgNjkNMzEwICB7IEMgIEQgIEcgIH0gIFsgMCAy
IDcgXSAgMzEwICAgIFMgICAgPDIgNT4gICA1ICAgIDY2ICAxMzMgICBTdTUsU3U3DTMxMSAg
eyBDICBFYiBFICB9ICBbIDAgMyA0IF0gIDMwMyAgIDwtLSAgIDwzIDE+ICAgOCAgICAxMiAg
IDI1DTMxMiAgeyBDICBFYiBGICB9ICBbIDAgMyA1IF0gIDMwOCAgIDwtLSAgIDwzIDI+ICAg
NyAgICAyMCAgIDQxDTMxMyAgeyBDICBFYiBHYiB9ICBbIDAgMyA2IF0gIDMxMyAgICBTICAg
IDwzIDM+ICAgNiAgICAzNiAgIDczICAgZGkNMzE0ICB7IEMgIEViIEcgIH0gIFsgMCAzIDcg
XSAgMzE0ICAoMzE3KSAgPDMgND4gICA1ICAgIDY4ICAxMzcgICBtaQ0zMTUgIHsgQyAgRSAg
RiAgfSAgWyAwIDQgNSBdICAzMDQgICA8LS0gICA8NCAxPiAgIDcgICAgMjQgICA0OQ0zMTYg
IHsgQyAgRSAgR2IgfSAgWyAwIDQgNiBdICAzMDkgICA8LS0gICA8NCAyPiAgIDYgICAgNDAg
ICA4MSAgIE1iNQ0zMTcgIHsgQyAgRSAgRyAgfSAgWyAwIDQgNyBdICAzMTQgICA8LS0gICA8
NCAzPiAgIDUgICAgNzIgIDE0NSAgIE1hDTMxOCAgeyBDICBFICBBYiB9ICBbIDAgNCA4IF0g
IDMxOCAgICBTICAgIDw0IDQ+ICAgNCAgIDEzNiAgMjczICAgQXUNMzE5ICB7IEMgIEYgIEdi
IH0gIFsgMCA1IDYgXSAgMzA1ICAgPC0tICAgPDUgMT4gICA2ICAgIDQ4ICAgOTcNDQlUaGUg
RGVjaW1hbC1QcmltZSBGb3JtIChEUEYpIGltcGxpY2l0bHkgYXNzb2NpYXRlcyBhINJtaXJy
b3Igc2V00yB1bmRlciBjb21wbGVtZW50YXJ5IGludmVyc2lvbiwgb3IgDURlY2ltYWwtUHJp
bWUgRXF1aXZhbGVudCAoRFBFKSwgd2l0aCBlYWNoIERlY2ltYWwtTm9ybWFsIEZvcm0uICBU
aGUgRGVjaW1hbC1QcmltZSBGb3JtIG9mIGNlcnRhaW4gcGl0Y2gtY2xhc3Mgc2V0cywgc3Vj
aCBhcyB0aGUgYXVnbWVudGVkIHRyaWFkIChETkYgMzE4KSwgaXMgdGhlIHNhbWUgYXMgdGhl
aXIgRGVjaW1hbC1Ob3JtYWwgRm9ybS4gIFRoZXNlIHNldHMgYXJlIGlkZW50aWZpZWQgYXMg
0nN5bW1ldHJpY2FsLNMgYW5kIHRoaXMgcHJvcGVydHkgaXMgZGVub3RlZCBieSBhIGNhcGl0
YWwg0lPTIGluIHRoZSBEUEUgY29sdW1uIG9mIHRoZSBjYXRhbG9nLiAgVGhlIGNhdGFsb2cg
aWRlbnRpZmllcyB0aGUgRE5GIG9mIGFuIChhc3ltbWV0cmljYWwpIHBpdGNoLWNsYXNzIHNl
dCAod2hvc2UgRFBGIGlzIG5vdCBlcXVhbCB0byBpdNVzIERORikgZWl0aGVyIHVzaW5nIGEg
DWxlZnQtYXJyb3cgIDwtLSBwb2ludGluZyB0byB0aGF0IHNldNVzIERQRiwgb3IgYnkgcGxh
Y2luZyB0aGUgRE5GIG9mIGl0cyBtaXJyb3Igc2V0IGluIHBhcmVudGhlc2VzLiAgVGhlc2Ug
Y29udmVudGlvbnMgYmVjb21lIGFwcGFyZW50IGJ5IGV4YW1pbmluZyBlbnRyaWVzIGZvciB0
aGUgbWFqb3IgdHJpYWQgKERORiAzMTcpIGFuZCB0aGUgbWlub3IgdHJpYWQgKERORiAzMTQp
IGluIHRoZSBjYXRhbG9nIGV4Y2VycHQgYWJvdmUuDQlUaGUgY2F0YWxvZyBhbHNvIGlkZW50
aWZpZXMgdGhlIGFkamFjZW50LWludGVydmFsIGNvbnRlbnQgPEFJQz4gYW5kIHRoZSBjb21w
bGVtZW50IG9mIHRoZSBzdW0gb2YgYWRqYWNlbnQgaW50ZXJ2YWxzICgxMiAoIFNVTSA8QUlD
Pikgb3IgKENPTSkgb2YgZWFjaCBEZWNpbWFsLU5vcm1hbCBGb3JtLiAgQ29uY2F0ZW5hdGlu
ZyB0aGUgPEFJQz4gYW5kIChDT00pIGdlbmVyYXRlcyB0aGUgYWRqYWNlbnQtaW50ZXJ2YWwg
dmVjdG9yIG9mIGFueSBEZWNpbWFsLU5vcm1hbCBGb3JtLiAgVGhpcyB2ZWN0b3IgY2FuIGJl
IHJvdGF0ZWQgdG8gc2hvdyB3aGljaCBwaXRjaCBvZiBhIHZlcnRpY2FsIHNvbm9yaXR5IGFw
cGVhcnMgaW4gaXRzIGxvd2VzdCB2b2ljZSwgb3Igd2hpY2ggbW9kZSBvZiBhIHNjYWxhciBw
aXRjaCBjb2xsZWN0aW9uIGlzIGVtcGxveWVkIGluIGEgc3BlY2lmaWMgbXVzaWNhbCBjb250
ZXh0LiAgVW5saWtlIEZvcnRl1XMgbGFiZWxzIGZvciBwcmltZSBmb3JtcywgdGhlIGFkamFj
ZW50LWludGVydmFsIGNvbnRlbnRzIGFuZCBwaXRjaC1jbGFzcyBudW1iZXJzIG9mIERORtVz
IGFyZSByZWd1bGFyaXplZCBmb3IgcmFwaWQgdGFibGUgbG9va3VwLiAgVGhpcyBwcm9wZXJ0
eSBlbmFibGVzIERORtVzIHRvIGJlIGRldGVybWluZWQgZWZmaWNpZW50bHkgd2l0aCBvciB3
aXRob3V0IHRoZSBhc3Npc3RhbmNlIG9mIGEgY29tcHV0ZXIuICANCVRoZSBEZWNpbWFsLU5v
cm1hbCBGb3JtIG9mIGFueSBwaXRjaCBjb2xsZWN0aW9uIGlzIHNpbXBsZXIgdG8gY29tcHV0
ZSB0aGFuIGl0cyBwcmltZSBmb3JtIGJ5IGF0IGxlYXN0IGhhbGYgdGhlIG51bWJlciBvZiBv
cGVyYXRpb25zLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBETkYgZG9lcyBub3QgcmVxdWlyZSBj
b21wdXRhdGlvbiBvZiBib3RoIHRoZSBaTkYgb2YgYSBwaXRjaC1jbGFzcyBzZXQgYW5kIHRo
ZSBaTkYgb2YgaXRzIGNvbXBsZW1lbnRhcnkgaW52ZXJzaW9uLiAgW0FtdWVkb10gb3V0bGlu
ZXMgYSBmYXN0IGFsZ29yaXRobSBmb3IgY29tcHV0aW5nIFpORtVzIHRoYXQgZXhwbG9pdHMg
Yml0LWxldmVsIG9wZXJhdGlvbnMgYXZhaWxhYmxlIGluIHRoZSBtYWNoaW5lIGxhbmd1YWdl
IGluc3RydWN0aW9uIHNldCBvZiBtb3N0IGRpZ2l0YWwgY29tcHV0ZXJzLiAgVGhpcyBhbGdv
cml0aG0gdHlwaWNhbGx5IHJlcXVpcmVzIG9uZS10aGlyZCBvZiB0aGUgbnVtYmVyIG9mIHN0
ZXBzIGFzIGVxdWl2YWxlbnQgcHJvY2VkdXJlcyBkZXNjcmliZWQgaW4gW0ZvcnRlXSwgW1Jh
aG5dIGFuZCBbU3RyYXVzXS4CICBBbHRlcm5hdGl2ZWx5LCB0aGUgRE5G1XMgb2YgYWxsICg0
MDk2KSBwb3NzaWJsZSBwaXRjaC1jbGFzcyBzZXRzIGNhbiBiZSBtZW1vaXplZCBmb3IgZmFz
dCB0YWJsZSBsb29rdXAuDQlTaW5jZSB0aGUgRE5GIGlzIGFibGUgdG8gZGlzdGluZ3Vpc2gg
cGl0Y2ggY29sbGVjdGlvbnMgdGhhdCBhcmUgcmVsYXRlZCBieSBjb21wbGVtZW50YXJ5IGlu
dmVyc2lvbiwgdGhlIERORiBpcyBtb3JlIGFwcHJvcHJpYXRlIHRvIHVzZSBhcyBhIGdlbmVy
YWwgcHVycG9zZSBwaXRjaC1jbGFzcyBzZXQgbm9tZW5jbGF0dXJlIHRoYW4gZWl0aGVyIHBy
aW1lIGZvcm1zLCBvciBGb3J0ZdVzIGxhYmVscyBmb3IgcHJpbWUgZm9ybXMuICBUaGlzIGlz
IGVzcGVjaWFsbHkgaW1wb3J0YW50IGF0IHRoZSBlYXJsaWVzdCBzdGFnZXMgb2YgYW4gYW5h
bHlzaXMsIGJlZm9yZSBjb25qZWN0dXJlcyBvciBhc3N1bXB0aW9ucyByZWdhcmRpbmcgaW52
ZXJzaW9uYWwgZXF1aXZhbGVuY2UgYXJlIGludHJvZHVjZWQuICBETkbVcyBtYXkgYmUgZXNw
ZWNpYWxseSB2YWx1YWJsZSBmb3IgZmluZGluZyBoaWRkZW4gcm93IHJlbGF0aW9ucyBpbiBk
b2RlY2FwaG9uaWMgbXVzaWMsIGJlY2F1c2UgdGhlIERORiBwcmVzZXJ2ZXMgdGhlIGludGVy
dmFsbGljINJzaWduYXR1cmXTIG9mIGNlcnRhaW4gcm93cyB0aGF0IHdvdWxkIGJlIHJlbmRl
cmVkIG9wYXF1ZSBieSBzeXN0ZW1hdGljIGltYnJpY2F0aW9uIGFuZCBjbGFzc2lmaWNhdGlv
biB1c2luZyBGb3J0ZdVzIGxhYmVscy4gIEZvciBleGFtcGxlLCB0aGUgcHJpbWUgZm9ybSB3
b3VsZCBiZSB1bmFibGUgdG8gZGlzdGluZ3Vpc2ggdGhlIGludGVybG9ja2luZyBNYWpvciBh
bmQgbWlub3IgdHJpYWRzIHRoYXQgY29tcHJpc2UgdGhlIHJvdyBvZiBBbGJhbiBCZXJn1XMg
VmlvbGluIENvbmNlcnRvLiAgVGhlIERORtVzIGNhcGFjaXR5IHRvIHByZXNlcnZlIHRoZXNl
IGRpc3RpbmN0aW9ucyBtYWtlcyBpdCBhbiBlc3BlY2lhbGx5IGFwcHJvcHJpYXRlIHRvb2wg
Zm9yIGRlc2NyaWJpbmcgdGhlIGV4dGVuZGVkIHRvbmFsIHZvY2FidWxhcnkgb2YgQW1lcmlj
YW4gSmF6eiwgYW5kIHRoZSBwaXRjaCBjb250ZW50IG9mIGh5YnJpZCB0b25hbC9hdG9uYWwg
bXVzaWMgKHN1Y2ggYXMsIGRvZGVjYXBob25pYyBtdXNpYyB0aGF0IGlzIGJhc2VkIHVwb24g
dG9uYWwgcGl0Y2ggbWF0ZXJpYWxzKS4NDVRoZSBEZWNpbWFsLU5vcm1hbCBSb3RhdGlvbg0N
CUEgc2ltcGxlIGV4dGVuc2lvbiBvZiB0aGUgRE5GIGNhbGxlZCB0aGUgRGVjaW1hbC1Ob3Jt
YWwgUm90YXRpb24gKEROUikgaWRlbnRpZmllcyBzcGVjaWZpYyByb3RhdGlvbnMgb2YgdGhl
IGFkamFjZW50LWludGVydmFsIHZlY3RvciBvZiBhIFRbbl0tdHlwZS4gIFRoZSBETlIgZW5h
YmxlcyBwYXJ0aWN1bGFyIGhhcm1vbmljIGludmVyc2lvbnMgb2YgdmVydGljYWwgc29ub3Jp
dGllcywgYW5kIAxzcGVjaWZpYyBtb2RhbCBkaXN0cmlidXRpb25zIG9mIHNjYWxhciBwaXRj
aCBjb2xsZWN0aW9ucyB0byBiZSBkZXNjcmliZWQgZXhhY3RseS4gIFRoZSBETlIgaXMgZGVm
aW5lZCBpbiB0ZXJtcyBvZiB0aGUgTm9ybWFsLVJvdGF0aW9uIG9mIGEgc2V0IG9mIGFic29s
dXRlIHBpdGNoZXM6DQ0oZGVmdW4gTm9ybWFsLVJvdGF0aW9uIChBUC1zZXQpDSAgKHBvc2l0
aW9uIChNT0QtMTIgKC0gKE1JTklNVU0gQVAtc2V0KQ0gICAgICAgICAgICAgICAgICAgICAg
IChOb3JtYWwtVHJhbnNwb3NpdGlvbiBBUC1zZXQpKSkNICAgICAgICAgICAgKFpORiBBUC1z
ZXQpKSkNDVRoZSBOb3JtYWwtUm90YXRpb24gaWRlbnRpZmllcyB3aGljaCBlbGVtZW50IG9m
IGEgcGl0Y2ggY29sbGVjdGlvbtVzIFplcm8tTm9ybWFsIEZvcm0gZ2VuZXJhdGVzIHRoZSBs
b3dlc3QgYWJzb2x1dGUgcGl0Y2ggcHJlc2VudC4gIEZvciBhYnNvbHV0ZSBwaXRjaCBjb2xs
ZWN0aW9ucyByZXByZXNlbnRpbmcgdmVydGljYWwgc29ub3JpdGllcywgdGhlIE5vcm1hbC1S
b3RhdGlvbiBwcm92aWRlcyBhbiBhYnNvbHV0ZSBoYXJtb25pYyBpbnZlcnNpb24gbnVtYmVy
IGZvciBhbnkgc3VjaCBzb25vcml0eSwgcmVsYXRpdmUgdG8gaXRzINJtb3N0IHBhY2tlZCB0
byB0aGUgbGVmdNMgcm90YXRpb24gKG9yIFpORikuICBUaGUgdmFsdWUgb2YgdGhlIE5vcm1h
bC1Sb3RhdGlvbiBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHRoYXQgcmFuZ2VzIGJldHdl
ZW4gemVybyBhbmQgb25lIG1pbnVzIHRoZSBjYXJkaW5hbGl0eSBvZiBhIHBpdGNoIGNvbGxl
Y3Rpb27VcyBaTkYsIGluY2x1c2l2ZWx5Lg0JVGhlIE5vcm1hbC1Sb3RhdGlvbiBvZiBhbnkg
cGl0Y2ggY29sbGVjdGlvbiBtYXkgYmUgbm90YXRlZCBjb252ZW5pZW50bHkgYnkgYXBwZW5k
aW5nIGl0IHRvIHRoZSByaWdodCBvZiBhIGRlY2ltYWwgcG9pbnQgZm9sbG93aW5nIGEgc2V0
1XMgRGVjaW1hbC1Ob3JtYWwgRm9ybS4gIFRoaXMgcmVzdWx0aW5nIGxhYmVsIGlzIGNhbGxl
ZCBhIHNldNVzIERlY2ltYWwtTm9ybWFsIFJvdGF0aW9uIChETlIpLiAgVGhlIERlY2ltYWwt
Tm9ybWFsIFJvdGF0aW9uIG9mIGFueSBvcmRlcmVkIHNlcXVlbmNlIG9mIGFic29sdXRlIHBp
dGNoZXMgaXMgZGVmaW5lZCB0byBiZToNDShkZWZ1biBETlIgKFApDSAgKCsgKERORiBQKSAo
KiAwLjEgKE5vcm1hbC1Sb3RhdGlvbiBQKSkpKQ0NRnVuY3Rpb24gRE5SIGNvbXB1dGVzIGEg
ZmxvYXRpbmctcG9pbnQgbnVtYmVyIHdob3NlIHdob2xlIG51bWJlciBwYXJ0IGlzIHRoZSBE
ZWNpbWFsLU5vcm1hbCBGb3JtIG9mIHBpdGNoIGNvbGxlY3Rpb24gUC4gIFRoZSBmcmFjdGlv
bmFsIHBvcnRpb24gb2YgdGhpcyBmbG9hdGluZyBwb2ludCBudW1iZXIgaXMgdGhlIE5vcm1h
bCBSb3RhdGlvbiBvZiB0aGF0IHNldC4gIEZvciBleGFtcGxlLCB0aGUgcm9vdCBwb3NpdGlv
biBNYWpvciB0cmlhZCAoTWEpIGFuZCBpdHMgdHdvIHN1Y2Nlc3NpdmUgaW52ZXJzaW9ucyAo
TWFeMSkgYW5kIChNYV4yKSBtYXkgYmUgZXhhY3RseSBkZXNjcmliZWQgYnkgRE5S1XMgeyAz
MTcuMCwgMzE3LjEgYW5kIDMxNy4yIH0uICBUaGUgSW9uaWFuIG1vZGUgKHdoaWNoIGJlZ2lu
cyBvbiB0aGUgZmlyc3QgZGVncmVlIG9mIHRoZSBNYWpvciBzY2FsZSkgaXMgZXhhY3RseSBk
ZXNjcmliZWQgYnkgRE5SIDc0My4xIGJlY2F1c2UgdGhlIExvY3JpYW4gbW9kZSwgRE5SIDc0
My4wLCBpcyB0aGUg0m1vc3QgcGFja2VkIHRvIHRoZSBsZWZ00yByb3RhdGlvbiBvZiB0aGUg
TWFqb3Igc2NhbGUuICBUaGUgbWlub3Itc2l4dGggY2hvcmQgKG1pNikgaXMgZXhhY3RseSBk
ZXNjcmliZWQgYnkgRE5SIDQyOC4yLCB3aGlsZSB0aGUgKGhhcm1vbmljKSBpbnZlcnNpb25h
bGx5LXJlbGF0ZWQgaGFsZi1kaW1pbmlzaGVkIHNldmVudGggY2hvcmQgKGRpNykgaXMgcmVh
ZGlseSBkaXN0aW5ndWlzaGVkIGFzIEROUiA0MjguMS4NCVtBbXVlZG9dIHVzZWQgdGhlIERO
RiBhbmQgRE5SIHRvIHN1cnZleSBhIG51bWJlciBvZiBwaXRjaCBjb2xsZWN0aW9ucyB0aGF0
IHJlY3VyIGluIEFtZXJpY2FuIEphenouICBBIHJldmlldyBvZiBvdmVyIHR3ZW50eS1maXZl
IEphenogdGhlb3J5IGJvb2tzIGluY2x1ZGluZyBbSmFmZmVdLCBbTGV2aW5lLTg5XSwgW05v
dmVsbG9dLCBhbmQgW1JlZXZlc10gcmV2ZWFsZWQgKDUyKSBkaXN0aW5jdCByZWZlcmVuY2Vz
IHRvIHNjYWxlcyBhbmQgbW9kZXMgY29uc2lkZXJlZCByZWxldmFudCB0byBKYXp6IHBlZGFn
b2d5LiAgVGhlIHRyYW5zcG9zaXRpb24gYW5kIHJvdGF0aW9uIGludmFyaWFuY2Ugb2YgdGhl
IERlY2ltYWwtTm9ybWFsIEZvcm0gZGlzdGlsbGVkIHRoaXMgbGV4aWNvbiB0byBzaXh0ZWVu
IGZ1bmRhbWVudGFsIHBpdGNoIGNvbGxlY3Rpb25zOg0NICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBETkYgIE5SICAgTlQgICBETlIN
DUFVRyAgIEF1Z21lbnRlZCAgICAgICB7IEMgICAgICBFYiBFICAgICAgRyBBYiAgICAgIEIg
fSAgNjQ2ICAgNSAgIEViICA2NDYuNQ1CRU0gICBCZWJvcF9NYWpvciAgICAgeyBDICAgIEQg
ICAgRSBGICAgIEcgRyMgQSAgICBCIH0gIDgzMiAgIDYgICBFICAgODMyLjYNQkU3ICAgQmVi
b3BfU2V2ZW50aCAgIHsgQyAgICBEICAgIEUgRiAgICBHICAgIEEgQmIgQiB9ICA4MTcgICAz
ICAgQSAgIDgxNy4zDUJMNiAgIEJsdWVzXyg2LW5vdGUpICB7IEMgICAgICBFYiAgIEYgR2Ig
RyAgICAgIEJiICAgfSAgNjU2ICAgNSAgIEViICA2NTYuNQ1CTDcgICBCbHVlc18oNy1ub3Rl
KSAgeyBDICAgICAgRWIgRSBGIEdiIEcgICAgICBCYiAgIH0gIDcwOCAgIDYgICBFYiAgNzA4
LjYNRElNICAgRGltaW5pc2hlZCAgICAgIHsgQyAgICBEIEViICAgRiBHYiAgIEFiIEEgICAg
QiB9ICA4MzUgICA3ICAgRCAgIDgzNS43DUhBUiAgIEhhcm1vbmljX01pbm9yICB7IEMgICAg
RCBFYiAgIEYgICAgRyBBYiAgICAgIEIgfSAgNzM4ICAgMSAgIEIgICA3MzguMQ1IR0IgICBI
dW5nL0d5cHN5L0J5eiAgeyBDICAgIEQgRWIgICAgIEdiIEcgQWIgICAgICBCIH0gIDcyOSAg
IDQgICBHYiAgNzI5LjQNTUFKICAgTWFqb3IgICAgICAgICAgIHsgQyAgICBEICAgIEUgRiAg
ICBHICAgIEEgICAgQiB9ICA3NDMgICAxICAgQiAgIDc0My4xDU1iNiAgIE1ham9yX2I2ICAg
ICAgICB7IEMgICAgRCAgICBFIEYgICAgRyBBYiAgICAgIEIgfSAgNzQyICAgMSAgIEIgICA3
NDIuMQ1NRUwgICBNZWxvZGljX01pbm9yICAgeyBDICAgIEQgRWIgICBGICAgIEcgICAgQSAg
ICBCIH0gIDczOSAgIDEgICBCICAgNzM5LjENUERNICAgUGVudGFfRG9tICAgICAgIHsgQyAg
ICBEICAgIEUgICAgICBHICAgICAgQmIgICB9ICA1NDkgICAxICAgQmIgIDU0OS4xDVBMRCAg
IFBlbnRhX0x5ZGlhbiAgICB7IEMgICAgICAgICBFICAgRiMgICBBYiAgICAgIEIgfSAgNTUw
ICAgNCAgIEUgICA1NTAuNA1QTUEgICBQZW50YV9NYWpvciAgICAgeyBDICAgIEQgICAgRSAg
ICAgIEcgICAgQSAgICAgIH0gIDU1MSAgIDAgICBDICAgNTUxLjANUE1JICAgUGVudGFfTWlu
b3IgICAgIHsgQyAgICBEIEViICAgICAgICBHICAgIEEgICAgICB9ICA1NTUgICAyICAgRyAg
IDU1NS4yDVdITyAgIFdob2xlX1RvbmUgICAgICB7IEMgICAgRCAgICBFICAgR2IgICBBYiAg
IEJiICAgfSAgNjc0ICAgMCAgIEMgICA2NzQuMA0NVGhlIERlY2ltYWwtTm9ybWFsIEZvcm0g
KERORiksIE5vcm1hbCBSb3RhdGlvbiAoTlIpLCBOb3JtYWwgVHJhbnNwb3NpdGlvbiAoTlQp
LCBhbmQgRGVjaW1hbC1Ob3JtYWwgUm90YXRpb24gKEROUikgb2YgZWFjaCBwaXRjaCBjb2xs
ZWN0aW9uIGlzIHNob3duIHRvIHRoZSByaWdodCBvZiBpdHMgcGl0Y2gtY2xhc3MgY29udGVu
dC4gIEFsbCBvZiB0aGUgKDUyKSBzY2FsZXMgYW5kIG1vZGVzIHJlZmVyZW5jZWQgYnkgdGhl
IEphenogdGhlb3J5IGxpdGVyYXR1cmUgdGhhdCB3YXMgc3VydmV5ZWQgY2FuIGJlIGV4cHJl
c3NlZCBhcyBtb2RhbCByb3RhdGlvbnMgb3IgaW5jb25zZXF1ZW50aWFsIGNocm9tYXRpYyBm
aWxsaW5ncyBvZiB0aGVzZSBzaXh0ZWVuIGZ1bmRhbWVudGFsIHBpdGNoIGNvbGxlY3Rpb25z
IChbQW11ZWRvXSwgcHAuIDE0Mi0xNTgpLg0JVGhlIERORiBhbmQgRE5SIHdlcmUgYWxzbyB1
c2VkIGFzIHRoZSBiYXNpcyBvZiBhIE1BWCggcHJvZ3JhbSBjYWxsZWQgQ0hPUkQtQ0xBU1NJ
RklFUi4gIFRoaXMgcHJvZ3JhbSBhdXRvbWF0aWNhbGx5IHJlY29nbml6ZXMgYW5kIGxhYmVs
cyBwaXRjaCBjb2xsZWN0aW9ucyBpbiB0ZXJtcyBvZiB0aGUgcHJvcG9zZWQgcGl0Y2ggY29s
bGVjdGlvbiBoaWVyYXJjaHksIGZyb20gcmVhbC10aW1lIE1JREkga2V5Ym9hcmQgaW5wdXQu
ICBBIHR5cGljYWwgZGVzY3JpcHRpb24gZ2VuZXJhdGVkIGJ5IENIT1JELUNMQVNTSUZJRVIg
aXMgb3JnYW5pemVkIGFzIGZvbGxvd3M6DQwTIEVNQkVEIFdvcmQuUGljdHVyZS42ICAUARUN
DQlDSE9SRC1DTEFTU0lGSUVSIGdlbmVyYXRlcyBib3RoIHRvbmFsIGFuZCBhdG9uYWwgY2hh
cmFjdGVyaXphdGlvbnMgb2YgYW55IHBpdGNoIGNvbGxlY3Rpb24gcGxheWVkIG9uIHRoZSBN
SURJIGtleWJvYXJkLiAgVGhlIHByb2dyYW0gZ2VuZXJhdGVzIHRocmVlIHR5cGVzIG9mIHRv
bmFsIGNob3JkIGxhYmVscywgd2hpY2ggYXJlIGV4cHJlc3NlZCBpbiBhIG1vZGlmaWVkIEph
enogbGVhZC1zaGVldCBub21lbmNsYXR1cmUgKHNlZSBbQW11ZWRvXSwgcHAuIDE1OS0xNzIp
LiAgQW4gb3B0aW11bSByb290LXBvc2l0aW9uIGNob3JkIGxhYmVsIChSb290UG9zOikgYW5k
IGFuIG9wdGltdW0gaGFybW9uaWMgaW52ZXJzaW9uIGxhYmVsIChJbnZlcnNpb246KSBhcmUg
cHJvdmlkZWQuICBUaGUgcHJvZ3JhbSBhbHNvIGdlbmVyYXRlcyBwb3NzaWJsZSB0b25hbCBh
bGlhc2VzIA0oUEMtQWxpYXNlczopIGZvciB0aGF0IFRbbl0tdHlwZSBvciBETkYsIGlycmVz
cGVjdGl2ZSBvZiB0aGUgTm9ybWFsIFJvdGF0aW9uIG9mIHRoZSBzb25vcml0eSB0aGF0IHdh
cyBwbGF5ZWQuDQlUbyBhc3Npc3QgdGhlIGFuYWx5c2lzIG9mIGF0b25hbCBhbmQgZG9kZWNh
cGhvbmljIG11c2ljLCBDSE9SRC1DTEFTU0lGSUVSIGRpc3BsYXlzIHRoZSBOb3JtYWwgVHJh
bnNwb3NpdGlvbiBhbmQgRGVjaW1hbC1Ob3JtYWwgUm90YXRpb24gb2YgZWFjaCBwZXJmb3Jt
ZWQgcGl0Y2ggY29sbGVjdGlvbi4gIFRoZSBEZWNpbWFsLU5vcm1hbCBGb3JtLCBwaXRjaC1j
bGFzcyBuYW1lcywgWmVyby1Ob3JtYWwgRm9ybSwgYWRqYWNlbnQtaW50ZXJ2YWwgdmVjdG9y
LCBhbmQgdHdlbHZlLWVsZW1lbnQg0lRJQ1PTIHZlY3RvciBvZiB0aGUgY29sbGVjdGlvbiBp
cyBhbHNvIGdlbmVyYXRlZC4gIFNpbmNlIHByaW1lIGZvcm1zIG1heSBiZSBvZiBpbnRlcmVz
dCB0byB0aGUgYW5hbHlzdCwgQ0hPUkQtQ0xBU1NJRklFUiBkaXNwbGF5cyB0aGUgRGVjaW1h
bC1QcmltZSBGb3JtIG9mIHRoZSBwZXJmb3JtZWQgcGl0Y2ggY29sbGVjdGlvbiwgZm9sbG93
ZWQgYnkgdGhlIHBpdGNoLWNsYXNzIG5hbWVzLCBaZXJvLU5vcm1hbCBGb3JtIGFuZCBhZGph
Y2VudC1pbnRlcnZhbCB2ZWN0b3Igb2YgdGhhdCBEUEYuICBUaGUgcHJvZ3JhbSBhbHNvIGRp
c3BsYXlzIEZvcnRl1XMgc2l4LWVsZW1lbnQg0mludGVydmFsIHZlY3RvctMgYW5kIGhpcyBz
ZXQgbGFiZWwgZm9yIHRoZSBwcmltZSBmb3JtIG9mIGVhY2ggcGl0Y2ggY29sbGVjdGlvbi4g
IENIT1JELUNMQVNTSUZJRVIgaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCBpbnZlc3RpZ2F0aW9u
cyBvZiB0b25hbCBjaG9yZC9zY2FsZSBjb3JyZXNwb25kZW5jZSwgYW5kIGF0b25hbCBwaXRj
aC1jbGFzcyBzZXQgaW5jbHVzaW9uIHJlbGF0aW9ucyB3aXRoIGVxdWFsIGZhY2lsaXR5Lg0N
QUNLTk9XTEVER0VNRU5UUw0NSSBhbSBlc3BlY2lhbGx5IGdyYXRlZnVsIHRvIENocmlzIENo
YWZlLCBBbmR5IEtvcHJhLCBKZWZmIFByZXNzaW5nLCBMaW5kYSBTb3Jpc2lvLCBhbmQgUmlj
ayBUYXViZSBmb3IgdGhlaXIgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIHJlZ2FyZGluZyB0
aGlzIHdvcmsuICBTcGVjaWFsIHRoYW5rcyBhbHNvIGdvIExhcnJ5IExpdmluZ3N0b24sIERl
YW4gb2YgdGhlIFUuUy5DLiBTY2hvb2wgb2YgTXVzaWMsIGFuZCB0byB0aGUgVS5TLkMuIFBy
ZWRvY3RvcmFsIEZlbGxvd3NoaXAgQ29tbWl0dGVlIGZvciB0aGVpciBzdXBwb3J0IG9mIHRo
aXMgcmVzZWFyY2guDQ1SRUZFUkVOQ0VTDQ1bQW11ZWRvXSBKb2huIEFtdWVkby4gQ29tcHV0
YXRpb25hbCBEZXNjcmlwdGlvbiBvZiBFeHRlbmRlZCBUb25hbGl0eS4gTWFzdGVycyBUaGVz
aXMsIFNjaG9vbCBvZiBNdXNpYy4gDSAgICBMb3MgQW5nZWxlczogVW5pdmVyc2l0eSBvZiBT
b3V0aGVybiBDYWxpZm9ybmlhLCAxOTk2Lg1bQ2FzdGluZV0gUGV0ZXIgQ2FzdGluZS4gU2V0
IFRoZW9yeSBPYmplY3RzOiBBYnN0cmFjdGlvbnMgZm9yIENvbXB1dGVyLUFpZGVkIEFuYWx5
c2lzIGFuZCBDb21wb3NpdGlvbiANICAgIG9mIFNlcmlhbCBhbmQgQXRvbmFsIE11c2ljLiAg
RnJhbmtmdXJ0OiBQZXRlciBMYW5nLCAxOTk0Lg1bRm9ydGVdIEFsbGVuIEZvcnRlLiBUaGUg
U3RydWN0dXJlIG9mIEF0b25hbCBNdXNpYy4gTmV3IEhhdmVuOiBZYWxlIFVuaXYuIFByZXNz
LCAxOTczLg1bR3JhaGFtXSBQYXVsIEdyYWhhbS4gQU5TSSBDb21tb24gTElTUC4gRW5nbGV3
b29kIENsaWZmcywgTko6IFByZW50aWNlLUhhbGwsIDE5OTYuDVtKYWZmZV0gQW5kcmV3IEph
ZmZlLiBKYXp6IFRoZW9yeS4gRHVidXF1ZSwgSUE6IFcuQy4gQnJvd24sIDE5ODMuDVtMZXZp
bmUtODldIE1hcmsgTGV2aW5lLiBUaGUgSmF6eiBQaWFubyBCb29rLiBQZXRhbHVtYSwgQ0E6
IFNoZXIgTXVzaWMsIDE5ODkuDVtMZXZpbmUtOTVdIE1hcmsgTGV2aW5lLiBUaGUgSmF6eiBU
aGVvcnkgQm9vay4gUGV0YWx1bWEsIENBOiBTaGVyIE11c2ljLCAxOTk1Lg1bTm92ZWxsb10g
Sm9obiBOb3ZlbGxvLiBUaGUgQ29udGVtcG9yYXJ5IEtleWJvYXJkaXN0LiBCZWx3aW4vQ1BQ
IGFuZCBTb3VyY2UgUHJvZHVjdGlvbnMsIDE5ODYuDVtNb3JyaXNdIFJvYmVydCBNb3JyaXMu
IENvbXBvc2l0aW9uIHdpdGggUGl0Y2ggQ2xhc3NlczogQSBUaGVvcnkgb2YgQ29tcG9zaXRp
b25hbCBEZXNpZ24uIA0gICAgTmV3IEhhdmVuOiBZYWxlIFVuaXYuIFByZXNzLCAxOTg3Lg1b
UHJlc3NpbmctNzddIEplZmYgUHJlc3NpbmcuINJUb3dhcmRzIGFuIFVuZGVyc3RhbmRpbmcg
b2YgU2NhbGVzIGluIEphenou0yBqYXp6Zm9yc2NodW5nLCBWb2wuIDkgKDE5NzcpDVtQcmVz
c2luZy04Ml0gSmVmZiBQcmVzc2luZy4g0lBpdGNoIENsYXNzIFNldCBTdHJ1Y3R1cmVzIGlu
IENvbnRlbXBvcmFyeSBKYXp6LtMgamF6emZvcnNjaHVuZywgVm9sLiAxNCAoMTk4MikNW1Jh
aG5dIEpvaG4gUmFobi4gQmFzaWMgQXRvbmFsIFRoZW9yeS4gTmV3IFlvcms6IFNoaXJtZXIg
Qm9va3MsIDE5ODAuDVtSZWV2ZXNdIFNjb3R0IFJlZXZlcy4gQ3JlYXRpdmUgSmF6eiBJbXBy
b3Zpc2F0aW9uLiBFbmdsZXdvb2QgQ2xpZmZzLCBOLkouOiBQcmVudGljZS1IYWxsLCAxOTg5
Lg1bU3RyYXVzXSBKb3NlcGggU3RyYXVzLiBJbnRyb2R1Y3Rpb24gdG8gUG9zdC1Ub25hbCBU
aGVvcnkuIEVuZ2xld29vZCBDbGlmZnMsIE5KOiBQcmVudGljZS1IYWxsLCAxOTkwLg1bU3Ry
dW5rXSBTdGV2ZW4gU3RydW5rLiDSSGFybW9uedMgaW4gTmV3IEdyb3ZlIERpY3Rpb25hcnkg
b2YgSmF6eiwgZWQuIEJhcnJ5IEtlcm5mZWxkLiBOZXcgWW9yazogDSAgICBTdC4gTWFydGlu
1XMgUHJlc3MsIDE5OTQuDQIgVGhlIFNFVC1TTEFWRSBmdW5jdGlvbiBsaWJyYXJ5IGlzIGRl
c2NyaWJlZCBpbiBbQW11ZWRvXSwgcHAuIDIxLTMwLg0CIFRoZSBkZWNpbWFsIGVxdWl2YWxl
bnRzIG9mIHRoZXNlIEJpbmFyeS1Ob3JtYWwgRm9ybXMgYXJlIHJlcHJvZHVjZWQgb24gcC4g
MTY2IG9mIFtBbXVlZG9dLg0CIEEgZGVtb25zdHJhdGlvbiBvZiB0aGUgZXF1aXZhbGVuY2Ug
b2YgdGhlc2UgYWxnb3JpdGhtcywgYW5kIGEgY29tcGFyaXNvbiBvZiB0aGVpciBleGVjdXRp
b24gdGltZXMgYXBwZWFycyBvbiANICAgIHBwLiAxOTgtMjA1IG9mIFtBbXVlZG9dLg0NE1BB
R0UgIBUNDQ0TUEFHRSAgFDgVDQ0NDQ0KAI8BmQymoAWnoAV8AAAIAAMAAABIAEgAAAAAAtoC
KP/h/+EC+QJFA0cFKAP8AAIAAABIAEgAAAAAAtgCKAABAAAAZAAAAAEAAwMDAAAAAScPAAEA
AQAAAAAAAAAAAAAAAGAIABkBkAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAINDP
EeChsRrhAAAAAAAAAAAAAAAAAAAAAAA7AAP//gAJAAYAAAAAAAAAAAAAAAAAAQAAAAEAAAAA
AAAQAAAAAAIAAAAB/////gAAAAAAAAAA////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////BQBTAHUAbQBtAGEAcgB5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAACgAAgD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAOAAAAqgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////////////wAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAALwIAAAoAAAA3AgAAEgAAAEMC
AAAOAAAAYAIAAAkAAABoAgAAEwAAAHICAAD4gfiB+IH4gfiB+IH4gfiBALcEgfiB+PseAAAA
LQAAAERFTFBISTpNaWNyb3NvZnQgV29yZCA2LjAuMTpUZW1wbGF0ZXM6Tm9ybWFsAB4AAAAA
AQAA0k11c2ljYWwgc2V0IHRoZW9yedMgaXMgYSBtaXNub21lcr5pdCBpcyBub3QgYSBzY2ll
bnRpZmljIHRoZW9yeSBvZiBtdXNpYyBpbiB0aGUgd2F5IHRoYXQgUG9wcGVyLCBLdWhuLCBM
YWthdG9zIG9yIFRoYWdhcmQgbWlnaHQgY29uc2lkZXIgLCBhbmQgZG9lcyBub3QgcmVseSB1
cG9uIHRoZSBtYXRoZW1hdGljYWwgc2V0IHRoZW9yeSBvZiBDYXJuYXAgb3IgWmVybWVsby1G
cmFlbmtlbCBpbiBhbnkgc3Vic3RhbnRpYWwgd2F5LiAg0k11c2ljYWwgAB4AAAAMAAAASm9o
biBBbXVlZG8AHgAAAAwAAABKb2huIEFtdWVkbwACAAAAECdAAAAAAO4XFR3rvAFAAAAAAIB2
0/LM5wFAAAAAAO4XFR3rvAEDAAAAAAAAAAMAAAAAAAAAQAAAAAAAAAAAAAAAHgAAABUAAABN
aWNyb3NvZnQgV29yZCA2LjAuMQADAAAAAAAAAB4AAAACAAAAMgADAAAAAAAAAAAD//4ACQAG
AAAAAAAAAAAAAAAAAAHQzxHgobEa4QAAAAAAAAAAAAAAAAAAAAAAOwAD//4ACQAGAAAAAAAA
AAAAAAAAAAEAAAABAAAAAAAAEAAAAAACAAAAAf////4AAAAAAAAAAP//////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////AAMAACIDAAAjAwAASQMAAEoDAABLAwAA
kwMAAKUDAACnAwAArwMAACMEAAAuBAAApgQAAKkEAACaBQAAnQUAAKUGAACmBgAAjAcAAJcH
AADaCgAA5goAAOsNAAD2DQAA/Q8AAP4PAAA1EAAAORAAADoQAAA+EAAAPxAAAEMQAABJEAAA
UBAAAFEQAAC4EAAAwBAAAMEQAAAGEQAAEREAABIRAAA5EgAAVxIAAMgSAADTEgAA6RQAAP8U
AACeFQAArxUAALEVAAC0FQAAaBYAAGkWAABvFgAAcxYAAMgWAADKFgAARhgAAEwYAAAYGQAA
LRkAACwaAAAtGgAAMxoAAEgaAAB3GgAAeRoAALMbAADFGwAA2RsAANobAADgGwAA5BsAABEc
AAATHAAAGhwAAPv0++/r5+Pr3evY6+/r7+vS693r3evd68nrx+vH68frx8Trx8Trx8Tr3evY
69jr2Ovv68LHv8fC6+/r2OvCx7/HwuvY68LHv8fC6wAAAAVVgV0FAANjEAAFVYFjEAADXQUA
EXUBRAQAAAAAUBAAXQMAYxQAC0oDAQDUXQMAYxQACFaBXQMAYxQAAApVgV0DAF4BYxQAAAZd
BABjFAAABl0DAGMYAAAGXQMAYxQAAAhVgV0DAGMUAAANSgMBAL5VgV0DAGMYAAhVgV0DAGMY
AEsaHAAAGxwAAHgcAAB6HAAAhRwAAIYcAAAEHgAABR4AAAseAAAkHgAApB8AAKUfAAAkIAAA
JSAAAD0gAAA+IAAApyAAAKsgAACsIAAAryAAAMQgAADFIAAA3iAAAN8gAACKIQAAjCEAAPYh
AAD3IQAA/SEAAAEiAAA2IgAAOCIAAEwiAABYIgAAWSIAAGgiAABpIgAA9SIAAPciAABIJQAA
WyUAAF0lAABgJQAA0CYAANEmAADXJgAA7yYAAE0nAABPJwAARCgAAEUoAABLKAAAXigAAOoo
AADsKAAA/igAAP8oAAC3KQAAuCkAANwpAADvKQAA8CkAABorAAAbKwAAISsAAC4rAABlKwAA
ZysAAIgrAACcKwAAySsAAMorAADNKwAAzisAADAsAAAxLAAANywAADssAABpLAAAaywAAKos
AACrLAAAsSwAAMUsAAD4LAAA/fv9+/j0/fvx+/30+/H49PH49PH49P37/fT9+/H7/fT7+PT9
+/307PTn9P378fv99P378fv98f303vTx+PT9+/H7/fTs9NrV2vT9+/H7/fT9+/H7AAAIVYFd
BQBjFAAABl0FAGMQAAARdQFEBAAAAABQEABdAwBjFAAIVYFdAwBjFAAACFaBXQMAYxQAAAVV
gV0FAAZdAwBjFAAABVWBYxAAA10FAANjEAAAVPgsAAD6LAAADC0AABktAAAaLQAALC0AAC0t
AAAzLQAAQC0AAG8tAABxLQAAAC8AABQvAAAVLwAAYi8AAGMvAABpLwAAgS8AAEswAABNMAAA
oDAAAKEwAADPMAAA0TAAAOwwAADtMAAADTEAAA8xAADBMQAA2TEAACQyAAAlMgAAKzIAAEMy
AACBMwAAgzMAAIozAACLMwAACzQAAA00AADDNAAAxDQAAMo0AADWNAAARjYAAEg2AACtNgAA
rjYAALQ2AADDNgAANjcAADc3AADWNwAA1zcAAE05AABOOQAAzTkAANo5AADcOQAA3TkAAOM5
AADwOQAAHzoAACw6AABVOgAAVjoAAKI6AACmOgAAqDoAAKk6AACvOgAAszoAAOI6AADjOgAA
NjsAADc7AAA9OwAASjsAAIs7AACNOwAATzwAAFA8AABRPAAAVjwAAFc8AABsPAAAbTwAAG48
AAByPAAAdDwAAIQ9AAD9+fbz+f3x9vH9+fbz+f3x9vH9+f3x/fn98f359vn98fbx/fn98f35
/fH28f35/fH28f35/fH9+fH5/fH28fbx/fns+f3x9vH9+f3x9vH9+ejx9vH56PH28fkAAAAA
AAAAAAAABl0FAGMQAAAIVYFdBQBjFAAAA10FAAVVgWMQAAVVgV0FAAZdAwBjFAAAA2MQAABa
hD0AAJc9AACZPQAAnD0AABQ+AABIPgAAST4AACBDAAAhQwAAOkMAAD1DAACHQwAAn0MAAKBD
AAChQwAApEMAAKREAAClRAAATkUAAFNFAABzRgAAdEYAAHpGAACyRgAAs0YAALhGAAC9RgAA
w0YAAMZGAAD3RgAA+EYAAP1GAAADRwAABkcAABZHAAAuRwAAO0sAADxLAADATgAAz04AAOdP
AAACUAAAR1AAAEpQAABdUQAAbFEAAIxRAACSUQAAolEAACVSAAAmUgAA6FQAAP9UAAABVQAA
BFUAAGNVAABpVQAAbVUAAHJVAACcVQAAnVUAAKdVAACqVQAAnVYAAJ9WAADEVgAAyFYAAM9W
AADTVgAA91cAAPpXAABpWAAAbFgAAEVaAABRXwAAUl8AAPv38vfu6+fl9+D3+/fe4Pfa9+X3
2uD31Pfg9+D38uD34Pf798v3+/fF9/L3+/fe697l9/v38vcAwwDe5ffg9/L38vfy9/L38vfn
vwAAAAZdAwBjGAAAAlWBAApVgV0DAF4BYxQAABF1AUQEAAAAAFAQAF0DAGMUAAtKAwEALV0D
AGMUAAZdBQBjFAAAA10FAAhVgV0FAGMUAAADYxAABl0FAGMQAAAFVYFdBQAHVYFdBQBeAQhV
gV0DAGMUAAAGXQMAYxQAAAhWgV0DAGMUAEtSXwAAa18AAG5fAACCXwAAhF8AAJ1fAACfXwAA
v18AAMJfAAAzYQAANGEAAEJiAABDYgAAWmIAAFtiAABcYgAAXWIAAF9iAACVYwAAnWMAAMdj
AADSYwAAF2QAACJkAADaZwAA6mcAACxpAAA2aQAATmkAAHxpAADzaQAAX2oAAJRqAACxagAA
7GoAAPxqAAA/awAASmsAAIRrAACXawAA0WsAAOZrAAAgbAAAPGwAAH9sAAC/bAAANG0AAEFt
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
AAD6AAAAAAAAAAMAABHQAgAAAQAALU4nAABPJwAARCgAAEUoAABiKAAAaygAAHooAAC6KAAA
4igAAOsoAADsKAAAnCoAABorAABEKwAAZisAAGcrAAAwLAAAMSwAAEgsAABqLAAAaywAAKos
AACrLAAAySwAAPksAAD6LAAALC0AAC0tAABSLQAAcC0AAHEtAABiLwAAYy8AAIUvAAC8LwAA
BTAAAEwwAABNMAAAoDAAAKEwAADQMAAA0TAAAOwwAADtMAAADjEAAA8xAAD+AAAAAAAA/gAA
AAAAAP4AAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD+
AAAAAAAA/gAAAAAAAP4AAAAAAAD6AAAAAAAA+gAAAAAAAP4AAAAAAAD+AAAAAAAA/gAAAAAA
APoAAAAAAAD6AAAAAAAA/gAAAAAAAP4AAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD6AAAA
AAAA/gAAAAAAAPoAAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD+AAAAAAAA+gAAAAAAAPoA
AAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD6AAAAAAAA/gAAAAAAAPoAAAAAAAD6AAAAAAAA
+gAAAAAAAP4AAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAAAAwAAEdACAAABAAAtDzEAAN4x
AAAkMgAAJTIAAFUyAABmMgAAoTIAAN8yAAAZMwAAXzMAAIIzAACDMwAAijMAAIszAACjMwAA
zTMAAOUzAAAMNAAAwzQAAMQ0AADoNAAABjUAAB41AABaNQAAhjUAALw1AAD3NQAAFDYAAC42
AABHNgAASDYAAK02AACuNgAAxzYAAN02AADuNgAANjcAADc3AADWNwAA1zcAADA4AACJOAAA
4jgAADs5AABNOQAA/gAAAAAAAP4AAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD6AAAAAAAA
+gAAAAAAAPoAAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD+AAAAAAAA+gAAAAAAAPoAAAAA
AAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD+AAAAAAAA+gAAAAAAAPoAAAAAAAD6AAAAAAAA+gAA
AAAAAPoAAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD6AAAAAAAA+gAAAAAAAPoAAAAAAAD6
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
500AAEJfAACXbQAAAAAeAAAAAQA4AQAAAgApAAAAAwC2AAAABAA1AAAABQCkAAAABgAcAAAA
BwAAAAAAAAAAAAsAAAAYAAAAGwAAAAADAAAaHAAA+CwAAIQ9AABSXwAAiHAAACFxAAA5ADoA
OwA8AD0APgAAAwAAExwAAE4nAAAPMQAATTkAAENFAABBYgAAlXAAAJdwAAA/AEAAQQBCAEMA
RABFAEYAQl8AAFpfAABcXwAAl20AABM6lP+VgAAAAAAHAAAACwAAABIAAAAUAAAAGwAAABMh
lQATIRT/lYAnAgtKb2huIEFtdWVkbzBERUxQSEk6RGVza3RvcCBGb2xkZXI6SUNNQyAxOTk2
IFBhcGVyOklDTUMgUGFwZXILSm9obiBBbXVlZG8wREVMUEhJOkRlc2t0b3AgRm9sZGVyOklD
TUMgMTk5NiBQYXBlcjpJQ01DIFBhcGVyC0pvaG4gQW11ZWRvKURFTFBISTpUZW1wb3Jhcnkg
SXRlbXM6V29yZCBXb3JrIEZpbGUgQSAzC0pvaG4gQW11ZWRvNkRFTFBISTpEZXNrdG9wIEZv
bGRlcjpJQ01DIDE5OTYgUGFwZXI6SUNNQyBQYXBlciBEcmFmdAtKb2huIEFtdWVkbyFERUxQ
SEk6SUNNQyAxOTk2IFBhcGVyOklDTUMgUGFwZXILSm9obiBBbXVlZG8hREVMUEhJOklDTUMg
MTk5NiBQYXBlcjpJQ01DIFBhcGVyC0pvaG4gQW11ZWRvIURFTFBISTpJQ01DIDE5OTYgUGFw
ZXI6SUNNQyBQYXBlcgtKb2huIEFtdWVkbyFERUxQSEk6SUNNQyAxOTk2IFBhcGVyOklDTUMg
UGFwZXILSm9obiBBbXVlZG8hREVMUEhJOklDTUMgMTk5NiBQYXBlcjpJQ01DIFBhcGVyC0pv
aG4gQW11ZWRvP0RFTFBISTpBY2FkZW1pYyBSZXNlYXJjaDpJQ01DIDE5OTYgUGFwZXI6VUNT
QiBUaGVvcnkgQ29uZi4gMTk5N/9AAIABAAAAAAAAAAAACAABAAMAAAAAAAAAAAAAAAAAGAAF
ADMCoAJoABUSkAFNAFRpbWVzIE5ldyBSb21hbgAMBpABAgBTeW1ib2wACyKQAU0AQXJpYWwA
CwaQAU0AVGltZXMADwaQAU0ASGVsdmV0aWNhAA0GkAFNAENvdXJpZXIADAaQAU0ATW9uYWNv
ACIABAAxCIgYAABoAQAAaAEAAAAAYTgbpmE4G6YAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAE
AIMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAwAAAAApAQAA/9JNdXNpY2FsIHNldCB0
aGVvcnnTIGlzIGEgbWlzbm9tZXK+aXQgaXMgbm90IGEgc2NpZW50aWZpYyB0aGVvcnkgb2Yg
bXVzaWMgaW4gdGhlIHdheSB0aGF0IFBvcHBlciwgS3VobiwgTGFrYXRvcyBvciBUaGFnYXJk
IG1pZ2h0IGNvbnNpZGVyICwgYW5kIGRvZXMgbm90IHJlbHkgdXBvbiB0aGUgbWF0aGVtYXRp
Y2FsIHNldCB0aGVvcnkgb2YgQ2FybmFwIG9yIFplcm1lbG8tRnJhZW5rZWwgaW4gYW55IHN1
YnN0YW50aWFsIHdheS4gINJNdXNpY2FsIAAAAAtKb2huIEFtdWVkbwtKb2huIEFtdWVkbwAA
AAAAAAAAAADQzxHgobEa4QAAAAAAAAAAAAAAAAAAAAAAOwAD//4ACQAGAAAAAAAAAAAAAAAA
AAEAAAABAAAAAAAAEAAAAAACAAAAAf////4AAAAAAAAAAP//////////////////////////
////////////////////////////////////////////////////////////////////////
////////////////

--ad-PART.BOUNDARY.0.21454.mrin47.878892170--

--PART.BOUNDARY.0.21454.mrin47.878892170--


Date: Sat, 8 Nov 1997 17:24:35 -0500 (EST)
From: Mari <mbmasuda@colby.edu>
Reply-To: Mari <mbmasuda@colby.edu>
To: cmdist@ccrma.Stanford.EDU
Subject: CLM: accessing the output file
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


I am making a granular synthesis instrument that can make grains that 
overlap, so I want to read any data that has been written to the output
file and add it to the sample that is currently being computed to avoid
pops and clicks.  I think I need to open a stream to the output file to be
able to do this.  Can I use 

( definstrument grani ( some-args )
    ( let*
        ( f ( open-input the-output-file ))
        ( input-from-output-file ( make-readin f ))
        ...some more stuff...)
   
    ...the rest of the instrument...)

or will this not work?

Thanks,

Mari

..................................
 Mari Masuda * mbmasuda@colby.edu
 www.colby.edu/personal/mbmasuda/
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^



Date: Sun, 9 Nov 1997 16:33:26 -0500 (EST)
From: Peter Whincop <whincop@fas.harvard.edu>
To: cmdist@ccrma.Stanford.EDU
Subject: not-so-prime form
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi,

Could someone possibly send me the prime form algorithm supplied by a
student, posted here a few days ago. It was part of his thesis. I have
inadvertently deleted the post; but I ran it before I was so foolish, and 
it was FAST, and worked without the CM image. Hurrah for the
4096-algorithm.

I would appreciate this very much.

Peter

PS--is there an archive of postings to this list? I couldn't find it.

Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sun, 9 Nov 1997 17:43:05 -0600
To: Peter Whincop <whincop@fas.harvard.edu>
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: not so prime form
Cc: cmdist@ccrma.Stanford.EDU

the archive for cmdist should be on ccrma-ftp in the pub/Lisp directory. As
far as needing the cm image goes, i belive the only cm function any of the
versions used was DEGREE, so if you are willing to restrict your input to
integer "key numbers" instead of note names (like c4, etc) then you can
remove this function call and the code will work in any common lisp image.

Date: Mon, 10 Nov 97 05:51:29 PST
From: bil (To: Mari <mbmasuda@colby.edu>)
To: Mari <mbmasuda@colby.edu>
Subject: Re: CLM: accessing the output file
Cc: cmdist@ccrma.Stanford.EDU

I don't think you want to access the output file in this
case because you'd pick up any other material that happened
to be there -- your instrument would only work in one
note cases.  There are lots of examples of various ways
to do overlapping grains -- see the "ins" file for a list;


Date: Mon, 10 Nov 1997 09:49:11 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <199711040849.RAA03400@u-ws-2.fa.geidai.ac.jp>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: cp09601@ms.geidai.ac.jp (Rodrigo Segnini)
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Code Warrior and CLM
Cc: cmdist@ccrma.Stanford.EDU

>Hello everybody:
>
>So far I've been among the few running a 'LISP only' CLM on a 68K machine
>but soon that will change for the actually supported version (PPC MCL +
>Code Warrior). I am wondering if what comes in some developers magazines
>and books called "Code Warrior Lite" is enough.
>
>Thanks for your answer.
>
>r.s.

I finally had time to try this out -- the Lite version wont work because
you cannot add files to the projects. There might be some way of hacking
around this problem by making clm use just one c file that is permanently
part of the .ins project but ill leave that for someone else to
investigate...



Date: Wed, 12 Nov 1997 09:48:00 +0900
From: RODRIGO SEGNINI <VYF01066@niftyserve.or.jp>
Subject: CW Lite
To: cmdist@ccrma.Stanford.EDU, cp09601@ms.geidai.ac.jp

Thanks to Rick, Marco and Teruyoshi for your answers regarding Code Warrior Li
te and CLM. I have learned through others that old releases of CW are availabl
e for much less, and it seems the case that a basic CW is just what CLM needs.
 Can I settle for that? Any foreseable changes expected in the future, i.e. ho
w will CLM/CM work with Rhapsody?

And a little out of topic but indeed interesting for those considering changin
g platform as to fully exploit their machines on the music side. I've heard so
 far the best port for CLM/CM is the SGI. Does any one expects Apple to introd
uce a new hardware architecture in order to take full advantage of the new OS?
 How will that affect support of CLM/CM for Apple users?

Thanks,

Rodrigo

p.s. I've posting messages using two different e-mail addresses. Both are Ok b
ut only this one is on the CMDIST list. Temporarily I would kindly request tho
se commenting on this topic to send a CC: to <cp09601@ms.geidai.ac.jp>.

Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Tue, 11 Nov 1997 20:40:01 -0600
To: RODRIGO SEGNINI <VYF01066@niftyserve.or.jp>
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: CW Lite
Cc: cmdist@ccrma.Stanford.EDU, <cp09601@ms.geidai.ac.jp>

>te and CLM. I have learned through others that old releases of CW are availabl
>e for much less, and it seems the case that a basic CW is just what CLM needs.
> Can I settle for that?

yes, code warrior 9 or above should work.

Date: Tue, 11 Nov 1997 22:41:26 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM archive fails (VARIABLE-GOBALLY-SPECIAL-P undefined)
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Hi, on Linux/Allegro I get an error when running the archive command in
Stella. The VARIABLE-GLOBALLY-SPECIAL-P function is called but undefined.

Example follows. Can someone tell me what I'm doing wrong?

~~~~

Stella [Tg1]: list
Tg1:
     1. #<(SPECTRATOR 1.091 0.05 261.626 0.2 :SPEC SPEC1)> 
     2. #<(SPECTRATOR 1.091 0.05 261.626 0.2 :SPEC SPEC1)> 
     3. #<(SPECTRATOR 0.545 0.05 261.626 0.2 :SPEC SPEC1)> 
     4. #<(SPECTRATOR 0.545 0.05 261.626 0.2 :SPEC SPEC1)> 
     5. #<(SPECTRATOR 0.545 0.05 261.626 0.2 :SPEC SPEC1)> 
     6. #<(SPECTRATOR 0.545 0.05 261.626 0.2 :SPEC SPEC1)> 
     7. #<GENERATOR: G1> (Frozen)

Stella [Tg1]: archive
Archive objects: (<cr>=Tg1) 
Archive file: (<cr>=/root/test.cm) 
/root/test.cm exists. Overwrite? y
Archiving /root/test.cm.
Error: attempt to call `VARIABLE-GLOBALLY-SPECIAL-P' which is an undefined
       function.
  [condition type: UNDEFINED-FUNCTION]

Restart actions (select using :continue):
 0: Try calling VARIABLE-GLOBALLY-SPECIAL-P again.
 1: Return a value instead of calling VARIABLE-GLOBALLY-SPECIAL-P.
 2: Try calling a function other than VARIABLE-GLOBALLY-SPECIAL-P.
 3: Setf the symbol-function of VARIABLE-GLOBALLY-SPECIAL-P and call it
again.
 4: Return to Top-Level.
 5: Exit Top-Level.
[1] CM(16): 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 12 Nov 1997 08:39:14 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971111223701.4221A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM archive fails (VARIABLE-GOBALLY-SPECIAL-P undefined)
Cc: cmdist@ccrma.Stanford.EDU

>Hi, on Linux/Allegro I get an error when running the archive command in
>Stella. The VARIABLE-GLOBALLY-SPECIAL-P function is called but undefined.

in kernel/pkg.lisp, replace

#+(and excl cltl2)
(progn
  (defvar clos::*toplevel-environment* nil)
  (defun clos::macroexpand-all (form &optional
                                     (env clos::*toplevel-environment*))
    (clos::walk-form form env))
  (import '(clos::walk-form clos::variable-lexical-p
            clos::variable-special-p
            clos::variable-globally-special-p
            clos::*toplevel-environment*
	    clos::macroexpand-all))
  )

with:

#+(and excl cltl2)
(progn
  (defvar clos::*toplevel-environment* nil)
  (defun clos::macroexpand-all (form &optional
                                     (env clos::*toplevel-environment*))
    (clos::walk-form form env))
  (defun clos::variable-globally-special-p (sym)
    (clos::variable-special-p sym nil))
  (import '(clos::walk-form clos::variable-lexical-p
            clos::variable-special-p
            clos::variable-globally-special-p
            clos::*toplevel-environment*
	    clos::macroexpand-all))
  )

the recompile and rebuild. hopefully that will fix the problem.



Date: Wed, 12 Nov 97 05:48:22 PST
From: bil (To: cp09601@ms.geidai.ac.jp)
To: cp09601@ms.geidai.ac.jp
Subject: Re: CW Lite
Cc: cmdist

> how will CLM/CM work with Rhapsody?

We're "registered" with Apple and should
get this OS someday -- if it has Lisp, I'll certainly try
to port clm/cmn and perhaps Snd.  Since Apple seems to
be backing away from it (and making it very expensive,
I think), I havn't been paying much attention to it.

> I've heard so far the best port for CLM/CM is the SGI.

For CLM, I'd say it's sort of a sack-race between SGI and Linux --
SGI has recently downgraded its audio support, and may 
leave the workstation market altogether.  For the money,
you can't beat a PC running Linux and ACL -- now if only
someone would provide high quality audio hardware.


Date: Wed, 12 Nov 1997 10:52:07 -0500
From: "Charles G. Waldman" <cgw@pgt.com>
X-Mailer: Mozilla 4.02 [en] (Win95; I)
Mime-Version: 1.0
To: Bill Schottstaedt <bil@ccrma.Stanford.EDU>
Subject: Re: CW Lite
References: <9711121348.AA26752@ ccrma.Stanford.EDU >
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

>For the money,
>you can't beat a PC running Linux and ACL -- 
> now if only
> someone would provide high quality audio hardware.


The "Gina" card from Event Electronics (www.event1.com)
looks great - I haven't gotten one yet myself yet, but
it looks like the answer to all my wishes.  I contacted
these guys about Linux support and they say they will be
releasing a Developer's Kit in the spring that should
make it possible to put together a Linux driver... just
something to keep in mind.  I will give you an update on 
this when I know more.

Date: Tue, 18 Nov 97 06:17:56 PST
From: bil (To: cmdist)
To: cmdist
Subject: cmn has its own font now

The new cmn (ccrma-ftp.stanford.edu:/pub/Lisp/cmn.tar.gz)
no longer uses either the Sonata or Petrucci fonts, but
instead has its own built-in.  This change was inspired
by Matti Koskinen who translated the MusicTex font to
Postscript.  I took the opportunity to rewrite the lower
levels of cmn completely, so this version is not entirely
backwards compatible with the previous version -- see
the list of changes in cmn-init.lisp for details.  I
also added an X/Motif previewer.


Date: Tue, 18 Nov 1997 21:55:01 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Minor CM doc bug
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

The description for the "open" command documents the "start" parameter
twice, and doesn't mention the "end" parameter. 



--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  
Date: Tue, 18 Nov 1997 22:03:23 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM Build anomolies
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

It seems the whenever I try to rebuild CM with a configuration change, on 
my Linux/ACL setup,
run into a couple of glitches:

1) If I specify the CLM and/or CMN syntaxes, then even though the
directories for these are specified, the build script attempts to load
the relevant startup files from the current directory (using
"./{filename}"), rather then using
the supplied paths. I have to issue ":CM {correct directory}" in the
debugger, and then retry the load, for the build to continue.

2) The final saved image doesn't work unless I copy the CLM and CMN ".so"
libraries into the working (startup) directory.


I can imagine that both problems might result from the same cause, but
honestly I haven't had the patience to track it down. I post this
wondering whether this is a know problem that everyone runs in to.

Maybe all this will be moot when the ACL license runs out next month :-(

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Tue, 18 Nov 1997 19:18:18 -0800
In-Reply-To: Larry Troxler <lt@westnet.com>
        "CM Build anomolies" (Nov 18, 10:03pm)
References: <Pine.SUN.3.96.971118215504.13251B-100000@westnet.com>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: CM Build anomolies
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


does your build/make-cm.lisp file have these lines?


    ;; maybe load CLM
    #-clm
    (when (and clm-directory (find ':clm syntaxes))
      (let ((*default-pathname-defaults* (pathname clm-directory))
	    (loadfile (namestring (merge-pathnames
				   "load-all.cl" clm-directory))))
	(if (probe-file loadfile)
	  (load loadfile)
	  (error "Can't find CLM load script: ~S."
		 loadfile))))
     ;; maybe load CMN
    #-cmn
    (when (and cmn-directory (find ':cmn syntaxes))
      (let ((*default-pathname-defaults* (pathname cmn-directory)))
	(load (filename cmn-directory "load-all.lisp"))))



Date: Tue, 18 Nov 1997 22:38:13 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: t@ulysses.Stanford.EDU
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: CM Build anomolies
In-Reply-To: <9711181918.ZM3954@ulysses.stanford.edu>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Tue, 18 Nov 1997, Tobias Kunze wrote:

> 
> does your build/make-cm.lisp file have these lines?
> 
> 
>     ;; maybe load CLM
>     #-clm
>     (when (and clm-directory (find ':clm syntaxes))
>       (let ((*default-pathname-defaults* (pathname clm-directory))
> 	    (loadfile (namestring (merge-pathnames
> 				   "load-all.cl" clm-directory))))
> 	(if (probe-file loadfile)
> 	  (load loadfile)
> 	  (error "Can't find CLM load script: ~S."
> 		 loadfile))))
>      ;; maybe load CMN
>     #-cmn
>     (when (and cmn-directory (find ':cmn syntaxes))
>       (let ((*default-pathname-defaults* (pathname cmn-directory)))
> 	(load (filename cmn-directory "load-all.lisp"))))
> 
> 

Not quite. It has this:
  
  ;; maybe load CLM
    #-clm
    (when clm-directory
      (let ((*default-pathname-defaults* (pathname clm-directory))
	    (loadfile (namestring (merge-pathnames 
				   "load-all.cl" clm-directory))))
	(if (probe-file loadfile)
	  (load loadfile)
	  (error "Can't find CLM load script: ~S."
		 loadfile))))
     ;; maybe load CMN
    #-cmn
    (when cmn-directory
      (let ((*default-pathname-defaults* (pathname cmn-directory)))
	(load (filename cmn-directory "cmn-all.lisp"))))
  
--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 19 Nov 1997 09:26:53 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971118215504.13251B-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM Build anomolies
Cc: cmdist@ccrma.Stanford.EDU

>It seems the whenever I try to rebuild CM with a configuration change, on

the code that tobias posted will only work with the latest cmn, im not even
sure if bill has released it yet.  cmn now saves a load script in its bin
directory like clm.

>1) If I specify the CLM and/or CMN syntaxes, then even though the
>directories for these are specified, the build script attempts to load
>the relevant startup files from the current directory (using
>"./{filename}"), rather then using
>the supplied paths. I have to issue ":CM {correct directory}" in the
>debugger, and then retry the load, for the build to continue.

odd. please send me your make-cm-local.lisp.

>2) The final saved image doesn't work unless I copy the CLM and CMN ".so"
>libraries into the working (startup) directory.

sorry, i dont have this problem either -- did you possibly mv the .fasl
instruments?





Date: Wed, 19 Nov 1997 21:06:26 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Using CMN with CM
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Does anybody happen to know of any existing how-to's on how to use CMN
with CM? There is something in the CM Stella tutorial, but it doesn't seem
to be relevant to the current releases - it refers to classes and Stella
commands that don't exist.

After defining a write-event for a note class, I am still running into a
problem as shown below. This is after I defined a method for write-event
from my class to a cmn-file (the documentation actually refers to
cmn-stream, which wasn't defined). What else do I need to do?

~ ~ ~

Creating cmn score...
Manuscripting test.eps...
Error: No methods applicable for generic function
       #<STANDARD-GENERIC-FUNCTION CMN::STAFF-DATA> with args (NIL) of
classes
       (NULL)
  [condition type: PROGRAM-ERROR]

Restart actions (select using :continue):
 0: Try calling it again
 1: Return to Top-Level.
 2: Exit Top-Level.
[1c] CM(9): :zo
Evaluation stack:

   (CERROR "Try calling it again" PROGRAM-ERROR ...)
 ->((METHOD NO-APPLICABLE-METHOD (T)) :UNKNOWN NIL)
   (CMN::JUSTIFY #<File: "test.eps">)
   (CMN::CMN #<File: "test.eps">)
   (CMN::FINISH-CLM-INPUT #<File: "test.eps"> NIL ...)
   ((METHOD DEINITIALIZE-STREAM-FOR-PROCESSING (CMN-FILE)) #<File:
"test.eps">)
   [... SYS::C_INTERRUPT ]
   (:EFFECTIVE-METHOD #<File: "test.eps">)
   [... DEINITIALIZE-STREAM-FOR-PROCESSING ]
   (PROCESS-OBJECT #<SCORE: Scratch-Score> #<File: "test.eps"> ...)
   (MIX-OBJECT (#) #<File: "test.eps">)

... more older frames ...
[1c] CM(10): 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 19 Nov 1997 22:04:07 -0500
X-Sender: mk385@is7.nyu.edu
X-Mailer: Windows Eudora Light Version 1.5.2
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: cmdist@ccrma.Stanford.EDU
From: Mina Kim <mk385@is7.nyu.edu>
Subject: Previous Q&A's

Hello.
Anybody knows if it's possible to find previous Q&A's of this mailing list
somewhere?
Or if anybody has been keeping them, can I receive it by email?
Thank you very much!

Mina Kim        mk385@is7.nyu.edu

Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: Previous Q&A's
References: <9711200304.AA23738@is7.nyu.edu>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 20 Nov 1997 14:48:50 +0100
In-Reply-To: Mina Kim's message of Wed, 19 Nov 1997 22:04:07 -0500
Lines: 17
X-Mailer: Gnus v5.3/Emacs 19.31

  Mina>  Hello.  Anybody knows if it's possible to find previous Q&A's of
  Mina> this mailing list somewhere?  Or if anybody has been keeping
  Mina> them, can I receive it by email?  Thank you very much!

You can point your browser to

    ftp://ccrma-ftp.stanford.edu/pub/Lisp/

  -rw-r--r--  1 610      wheel     493289 Nov 19 14:30 cmdistMail
  -rw-r--r--  1 610      wheel      26045 Mar  3  1997 cmdistMail94.gz
  -rw-r--r--  1 610      wheel      19315 Mar  3  1997 cmdistMail95.gz
  -rw-r--r--  1 610      wheel      34514 Mar  3  1997 cmdistMail96.gz

The compressed files (*.gz) can be opened with various zip-handling
programs.  MacGzip f.ex. on the macintosh.

-anders

Date: Thu, 20 Nov 1997 11:12:43 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971119210044.7598A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Using CMN with CM
Cc: cmdist@ccrma.Stanford.EDU

ive just installed cmn and will make sure examples are working and the doc
is current for the final release.


>Does anybody happen to know of any existing how-to's on how to use CMN
>with CM? There is something in the CM Stella tutorial, but it doesn't seem



Date: Fri, 21 Nov 1997 01:15:33 +0100
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 2.0 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Re: Previous Q&A's
References: <9711200304.AA23738@is7.nyu.edu> <copyb2jekvx.fsf@leon.uio.no>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Anders Vinjar wrote:
> 
> The compressed files (*.gz) can be opened with various zip-handling
> programs.  MacGzip f.ex. on the macintosh.

In Mina's header, there is:
> X-Mailer: Windows Eudora Light Version 1.5.2 

So, I suspect MacGzip won't work on her burk!

-- 
                                                             [jack]
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|


Date: Sun, 23 Nov 1997 21:38:42 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: New CMN crashes Linux/ACL/Xemacs!
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Well, As per Bill's request relating to my CM building problems, I got the
most recent CMN and rebuilt my CM/CLM/CMN image. I still have the same
directory anomalies, but I preceded as before, changing directories
manually.

This time, however, when I try to open a CMN .eps stream and mix a simple
thread of MIDI notes, the ACL/xemacs environment crashes! 

Either the ACL process just dies with the last message being
"manuscripting test.eps ..." (and without dumping core!), or it hangs
hogging the CPU and xemacs stops working (I have to "kill" it).


I'm not even going to attempt to troublshoot this one, I wouldn't even
know where to start. (Unless someone has some ideas, of course).

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Content-Type: text/plain
Mime-Version: 1.0 (NeXT Mail 3.3 v118.2)
X-Image-Url: http://www.cs.uwa.edu.au/~leigh/LeighXimage.tiff
X-Nextstep-Mailer: Mail 3.3 (Enhance 2.0b6)
From: Leigh Smith <leigh@antechinus.cs.uwa.oz.au>
Date: Mon, 24 Nov 97 17:42:04 +0800
To: bil@ccrma.Stanford.EDU
Subject: amplitude wrap around
Cc: cmdist@ccrma.Stanford.EDU
Reply-To: leigh@cs.uwa.oz.au
X-Url: http://www.cs.uwa.edu.au/~leigh/

I've noticed that amplitudes of 1.0 in CLM will actually wrap around such that for signed word output, the result is -1. I know this seems a trivial point, but for my application it is catastrophic. Can it be fixed easily? Alternatively where should I start looking in the code?
---
Leigh                 Computer Science, University of Western Australia
Smith                 +61-8-9380-3778 leigh@cs.uwa.edu.au (NeXTMail/MIME)

"Home pages are the pet rock of the 90s.  We all have them, we all think
 they're very cute.  But in a few years we're going to look back and be
 pretty embarrassed." -- Tony Shepps <toad@pond.com>
"Why wait?" -- Peter Langston

Sender: anders.vinjar@notam.uio.no
To: leigh@cs.uwa.oz.au
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: amplitude wrap around
References: <9711240942.AA03740@antechinus.cs.uwa.edu.au>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 24 Nov 1997 11:47:38 +0100
In-Reply-To: Leigh Smith's message of Mon, 24 Nov 97 17:42:04 +0800
Lines: 27
X-Mailer: Gnus v5.3/Emacs 19.31

  LS>  I've noticed that amplitudes of 1.0 in CLM will actually wrap
  LS> around such that for signed word output, the result is -1. I know
  LS> this seems a trivial point, but for my application it is
  LS> catastrophic. Can it be fixed easily? Alternatively where should I
  LS> start looking in the code? 

I guess this stems from the resolution your output-sound-file-format can
give you.  If you use one of the default sound-file-formats,
"16-bit-linear", there are (expt 2 16) = 65536 possible amplitude values
between -1.0 and 1.0.  The next higher amplitude-step is equal to the
lowest one.  (Bill, should there be a headroom here?)

Until you get a qualified answer you can solve the problem in a fast and
very good manner by using the ':scaled-to option in 'with-sound :

        (with-sound (:scaled-to 0.99) ins-list.. )

... will write an intermediate sound-file of your computation, with
higher resolution, keeping track of the maxamp in the whole run, and
finally handing you a file with the desired resolution (16-bit linear)
where the maximum amplitude is 0.99.  

Or else, play with (with-sound (:statistics t) ...) to get the maxamp of
the run, and scale the outputs from all instruments by 0.99 or something
like it.

-anders


Date: Mon, 24 Nov 97 06:00:28 PST
From: bil (To: cmdist)
To: cmdist
Subject: Re: amplitude wrap around

I thought at one time of clipping at 1.0 (or 1.0-epsilon)
rather than just letting it wrap-around to -1.0, but decided
against it; first you can use scaled-to or min/max in the run loop
as Anders suggests, second the clipping is still a click
or pop that shouldn't be there, and with older ears might
go unnoticed until a concert where half the audience will
wince at something the poor old composer can't hear.  It's
much harder to miss wrap-around; and third, the difference
between .99 (or .999) and 1.0 is inaudible in any normal
context -- you're not losing "dynamic range".

(I have several CD's that clip badly but apparently the
recording engineers couldn't hear it).

But, if you want to clip, the simplest thing would be to
use (outa i (max -1.0 (min .9999 val))) in your instrument.

Sender: anders.vinjar@notam.uio.no
To: cmdist@ccrma.Stanford.EDU
Subject: Re: amplitude wrap around
References: <9711241400.AA26214@ccrma.Stanford.EDU>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 24 Nov 1997 16:17:59 +0100
In-Reply-To: bil@ccrma.Stanford.EDU's message of Mon, 24 Nov 97 06:00:30 -0800
Lines: 13
X-Mailer: Gnus v5.3/Emacs 19.31

  bil> I thought at one time of clipping at 1.0 (or 1.0-epsilon) rather
  bil> than just letting it wrap-around to -1.0...

Wouldnt it make more sense to allow
  
    (with-sound () (outa 0 -1.0) (outa 1 1.0))

to actually put out what you would normally mean by such an expression?
Which is :) most negative and most positive number supported by the
sound-file-format, and rescale in between according to these limits.

(I think csound clips when shuffling out +32768, and puts out a note
about it, which isnt much use)

Date: Mon, 24 Nov 97 08:52:54 PST
From: bil (To: cmdist)
To: cmdist
Subject: Re: amplitude wrap around

> Wouldnt it make more sense to allow
>  (with-sound () (outa 0 -1.0) (outa 1 1.0))
> to actually put out what you would normally mean by such an expression?
> Which is :) most negative and most positive number supported by the
> sound-file-format, and rescale in between according to these limits.

I don't think this would make anyone happy -- the sophisticated user
will grumble about complicated changes behind his back, the
others will still wonder why their output is not exactly
1.0.   But it's not that difficult to write a version of with-sound
that behaves this way (and it's trivial to make your own outa
generator that clips or gives some error message -- wait 'til
you get a million of these flying by and then see what you think of
the idea).  Or use 32-bit output (integer or float).


From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 24 Nov 1997 14:29:42 -0800
In-Reply-To: bil@ccrma (Bill Schottstaedt)
        "Re: amplitude wrap around" (Nov 24,  8:52am)
References: <9711241652.AA27283@ccrma.Stanford.EDU>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: bil@ccrma.Stanford.EDU (Bill Schottstaedt), cmdist@ccrma.Stanford.EDU
Subject: Re: amplitude wrap around
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


 | I don't think this would make anyone happy -- the sophisticated user
 | will grumble about complicated changes behind his back, the

guess im not a sophisticated user then.  my problem is that if you do the
statistics thing and then run another pass rescaled to 1/maxamp according
to statistics, you still run the risk of having to trash your output
because it wrapped.  The floating point statistics output is just not
accurate enough.  I understand the point about wanting to notice clips,
but I want to decide myself whether it bothers me or not.  I hate it
if the machine decides for me by making the soundfile unusable.

In my humble opinion, the csound approach is near-optimal:

  1) clip whenever a sample can't be represented (< -32768 or
     > 32767 in 16 bit linear) but treat amplitude values as balanced,
     (which translates easily into logical amplitudes by scaling)
  2) let the signal overflow by one in the negative before clipping
  3) give a summary of the number of samples clipped per channel,
     along with the maximum amplitude clipped, which gives you a
     reasonable idea.  Of course, a histogram wouldn't be bad either. :)

To me, wrapping around is always the worst choice.

Date: Tue, 25 Nov 97 08:01:48 PST
From: bil (To: cmdist)
To: cmdist
Subject: Re: amplitude wrap around

I'll add a clipped argument to with-sound (and init-with-sound
for CM).

(Wrap-around is the simplest and fastest option, and remains the 
default).


To: cmdist@ccrma.Stanford.EDU
Subject: ACL & Irix
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 01 Dec 1997 16:42:40 +0100
Lines: 6
X-Mailer: Gnus v5.4.37/XEmacs 19.16

Well, the situation has shaped up a bit here.  We now have ACL-4.3.1
running on the SGIs (Irix 6.2/6.3).

Im starting to explore cm/midi/sgi/* whenever i get a chance now, but
just in case, are there any versions of cm with a more updated SGI
midi-part than the one which is put on the CCRMA ftp-server?

Date: Mon, 1 Dec 1997 10:49:20 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <cop3ekdxe6n.fsf@pierre.uio.no>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Anders Vinjar <anders.vinjar@notam.uio.no>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: ACL & Irix
Cc: cmdist@ccrma.Stanford.EDU


I believe tobais has the sgi port of MidiLib working now and only needs to
document it before including it in the final release.

>Well, the situation has shaped up a bit here.  We now have ACL-4.3.1
>running on the SGIs (Irix 6.2/6.3).
>
>Im starting to explore cm/midi/sgi/* whenever i get a chance now, but
>just in case, are there any versions of cm with a more updated SGI
>midi-part than the one which is put on the CCRMA ftp-server?




From: "Tobias Kunze" <tkunze@ulysses.Stanford.EDU>
Date: Mon, 1 Dec 1997 16:26:52 -0800
In-Reply-To: Anders Vinjar <anders.vinjar@notam.uio.no>
        "ACL & Irix" (Dec  1,  4:42pm)
References: <cop3ekdxe6n.fsf@pierre.uio.no>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Anders Vinjar <anders.vinjar@notam.uio.no>
Subject: Re: ACL & Irix
Cc: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


 | Im starting to explore cm/midi/sgi/* whenever i get a chance now, but
 | just in case, are there any versions of cm with a more updated SGI
 | midi-part than the one which is put on the CCRMA ftp-server?

sure is.  im wrapping up the mac oms part of it till i leave for Berlin
later this week, which is why the docs aren't written yet, but the sgi
port is final and ready to use.  i've made an archive of this (sgi-only)
version and put on my machine for anon ftp:

  ftp://ulysses.stanford.edu/pub/new_cm_sgi.tar.gz

I've tested it only on my 6.3 Indy, but it should run fine under any
Irix version 6.2 or higher.



Date: Mon, 1 Dec 1997 21:07:58 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CMN on Linux / Transcribing performances
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


I have CMN running with CM on Linux with ACL. When I recently reported ACL
crashes, it was because I had been using an out-of-date nxtcmn.so.

I remember on this list someone else who was having problems with CMN on
Linux/ACL, but I don't remember the details. So if this person would like
to compare notes with me, I'll be glad to oblige.

Transcribing performances: 

I'd be interested in sharing notes from anyone who has
invested any effort in using CM and
CMN to transcribe performances (from MIDI, for example).

Some examples of things I've run into:

One thing that I haven't tackled yet is writing a CMN output method that
will somehow display the object's index next to it's notehead in the
score, (or somewhere else if that is better). 

Identifying chords is of course important. Short of a completely automatic
quantization algorithm, I've found it very usefull to "map * collect
rhythm into foo", then "(setf foo (sort foo #'<))", and then to display
this using gnuplot. In gnuplot, I then look at the monotonically
increasing plot of rhythms, and then visually find the break between the
slowly increases in rhythm and the point where the rhythms begin to
increase rapidly. Where to go from here depends on what I want to
accomplish.


Larry

 


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Wed, 3 Dec 1997 02:09:26 -0500
From: samh@digicron.com
To: cmdist@ccrma.Stanford.EDU
Subject: PC soundcards


As the topic of high-quality PC soundcards comes up on this list from
time to time, I thought I would share my recent search for more
information.

I found a list of soundcards and a very brief summary of each at The
Multitrack Home Page <URL:http://home.concepts.nl/~bonnevil/multitr.htm>

In my brief perusal of possibilities, two stand out:

1) Zefiro ZA2			<URL:http://www.zefiro.com/>
2) Turtle Beach Pinnacle        <URL:http://www.tbeach.com>

Descriptions follow, but in brief the ZA2 seems a good choice for
working with digital audio. It includes S/PDIF, AES/EBU, and analog
input/outputs and software for working with DAT and CD subcode,
backups to DAT, etc. Of note also is that the analog i/o is on the end
of a 1 foot fiber optic cable, probably allowing for some isolation from
much of the noise in a computer. No midi or onboard synth/wavetable.

The Turtle Beach Pinnacle (analog with optional S/PDIF daughterboard
for ~$50 more) seems a good choice for a Windows sequencer/DAW
user. It includes an onboard sampler/synth and a MIDI interface.


COST
====

I checked out a couple of online stores for prices: 
Bayview Pro Audio <URL:http://www.olywa.net/duper> and 
Harris Creative Group <URL:http://www.voiceone.com/>

					Bayview Pro	Harris Creative 
					   Audio            Group

ZA2                                        $419		     $479
Turtle Beach Pinnacle w/digital I/O        $479              $485


LINUX SUPPORT
=============

OSS drivers <URL:http://www.4front-tech.com> are availible for the
ZA2 and Francois Robert <URL:ftp://ftp.cam.org/users/sdragon> is also 
developing a ZA2 driver.

The OSS driver for the Turtle Beach Pinnacle is marked as PRERELEASE,
MIDI only, so I assume only MIDI currently works but full support is
planned.

For a list of OSS supported hardware, try 
<URL:http://www.4front-tech.com/osshw.html>


What follows is some documentation gleaned from the Zefiro and Turtle
Beach web sites:

Zefiro ZA2 (verbatim from web site)
===================================

* RCA style coaxial S/PDIF input and output connectors on the card.
* Toslink style fiber optic S/PDIF input and output connectors on the card.
* XLR style AES/EBU pro digital interface connectors with cable included.
* RCA style Analog stereo line out connectors with cable included.
* Direct digital recording at 48Khz, 44.1Khz, 44.056Khz, 32Khz
  or just about anything.
* Complete control over all CD and DAT subcode 
  (including SCMS and Start_IDs).
* Windows drivers for complete compatibility with all of your windows
  audio applications (Win3.1, Win95 and Win NT4.0)
* Powerful 24bit Digital Signal Processor for live digital effects
  such as real time sample rate conversion, MPEG audio decoding or
  other special effects.
* 20/24bit recording in Win95 and soon NT4.0.
* Future expansion to SMPTE timecode, Word Clock sync.
* Hard disk data backup to audio DAT, store 1.1Gigabytes on a 2 hour tape.

Turtle Beach Multisound Pinnacle 
================================

Turtle beach lists $599.95 for Pinnacle Project Studio which seems to
include some multitracking software etc.

Key Features (almost verbatim from Web Site):

  * Multitrack hard disk recorder with pro grade 20 bit converters and
    >97db signal/noise ratio
  * Kurzweil 32 voice stereo sampler with on-board channelized
    digital effects, 4MB patch set, and up to 48MB optional sample RAM 
  * 16 channel MIDI interface 
  * S/PDIF interface for transferring digital audio between PC and DAT 

    [Ed: I think the following only comes with the "Project Studio"]
  * Additional Kurzweil synth for a total of 64 voices on 32 MIDI channels 
  * Full retail version of Voyetra's award winning Digital
    Orchestrator Pro with 1000+ tracks of MIDI and digital audio



If anyone wishes to buy me either of the above soundcards for
Christmas I will happily supply my address and pay for postage. :-)

=O.|     sam
=O


Date: Sat, 6 Dec 1997 21:39:51 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM/CMN note output method and chords
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Is there a way in a CM write-event method for a note going to a cmn-file,
to add a mark or CMN message to the chord the note belongs to?

My specific problem is that I would like use the CMN fingering message to
mark all notes with their index in their thread. However, I find that
applying the fingering to the individual notes results in a mess, and I
think I probably need to add the fingerings to the chord as a whole.

I almost think that I am better off not using the midi-note method, but
writing code that writes the thread as a whole (I would iterate through
the notes myself). Is there a way to do this within the CM/CMN framework?

Larry




--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Sat, 6 Dec 1997 22:53:58 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: CM 0-based vs 1-based object positions
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Wow, I don't know about the rest of you, but I'm discovering this
inconsistency between Stella and the api functions, to be a real soruce of
confusion.

Namely, Stella seems to work with 1-based object positions, both in the
listings and in the commands.

However, the api-functions, like nth-object, object-position, etc, work on
0-based posisitions (like CL does).

Shouldn't stella count from zero as well? Is there some kind of parameter
I can set to make this happen? (I vaguely remember seeing something about
this, but at the time, I wasn't interested).

How is everyone else working? I tend to intermix stella and Lisp about
50/50. Perhaps I'm in the minority, and people tend to use only one or the
other? 


 --  Larry Troxler  --
lt@westnet.com -- Patterson, NY USA --
  


Sender: lud@folkwang.uni-essen.de
Date: Mon, 08 Dec 1997 12:35:12 +0100
From: Ludger Bruemmer <ludi@folkwang.uni-essen.de>
X-Mailer: Mozilla 4.03 [en] (X11; I; IRIX 5.3 IP22)
Mime-Version: 1.0
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: CM 0-based vs 1-based object positions
References: <Pine.SUN.3.96.971206224544.26383A-100000@westnet.com>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I just installed the new cmn version and was not able to get it to work
with cm since there is a confusion about the cmn::data funktion which is
sent to cmn but unknown by cmn.

ludi
-- 
_________________________________________________________
  Ludger Bruemmer         Hohenzollernstr.
66                                  
  45128 Essen - Germany   tel&fax: +49 (0)201 787823  
  e-mail: ludi@folkwang.uni-essen.de                  
  http://www.folkwang.uni-essen.de/~ludi              
_________________________________________________________


Date: Mon, 8 Dec 1997 09:46:46 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971206213350.23481A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM/CMN note output method and chords
Cc: cmdist@ccrma.Stanford.EDU

if you transcribe from midi-events then you are always going to have to
"parse" chord information from the flow of seperate events. the alternative
would be to invent your own class of note that handles chords "atomically"
in cmn, and then provide a write-event method for midi if you also want to
hear it, ie somethinkg like

(defmethod write-event ((object whatever) (stream midi-port))
  ;; copy params to midi-note and output it
  (loop with msg = (object midi-note)
        for n in (slot-value object 'chord) ; object holds more than one note.
        do (setf (slot-value msg 'note) n)
           (write-event msg stream)))


>Is there a way in a CM write-event method for a note going to a cmn-file,
>to add a mark or CMN message to the chord the note belongs to?
>
>My specific problem is that I would like use the CMN fingering message to
>mark all notes with their index in their thread. However, I find that
>applying the fingering to the individual notes results in a mess, and I
>think I probably need to add the fingerings to the chord as a whole.
>
>I almost think that I am better off not using the midi-note method, but
>writing code that writes the thread as a whole (I would iterate through
>the notes myself). Is there a way to do this within the CM/CMN framework?
>
>Larry
>
>
>
>
>--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
>




Date: Mon, 8 Dec 1997 09:52:57 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971206224544.26383A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: CM 0-based vs 1-based object positions
Cc: cmdist@ccrma.Stanford.EDU


>Shouldn't stella count from zero as well? Is there some kind of parameter
>I can set to make this happen? (I vaguely remember seeing something about
>this, but at the time, I wasn't interested).

The functions are 0 based because that is consistent with Lisp programming.
However, my feeling was that people don't normally count 0 based so I made
the commands 1 based. It would probably be easy to fix the code to allow
both 1 and zero-based indexing in the commands as well. Ill put this on my
long list of things to look into if the semester is ever over...






Date: Mon, 8 Dec 1997 23:13:17 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: Ludger Bruemmer <ludi@folkwang.uni-essen.de>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: CM 0-based vs 1-based object positions
In-Reply-To: <348BDB70.B8C8E5AF@folkwang.uni-essen.de>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Mon, 8 Dec 1997, Ludger Bruemmer wrote:

> I just installed the new cmn version and was not able to get it to work
> with cm since there is a confusion about the cmn::data funktion which is
> sent to cmn but unknown by cmn.
> 
> ludi

I'm not using the latest version of CMN. I'm using one that seems to have
many files dated Nov 20. This version works for me.

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Mon, 8 Dec 1997 23:30:15 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: Rick Taube <taube@uiuc.edu>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: CM/CMN note output method and chords
In-Reply-To: <v03007802b0b162e18da0@[128.174.92.150]>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Mon, 8 Dec 1997, Rick Taube wrote:

> if you transcribe from midi-events then you are always going to have to
> "parse" chord information from the flow of seperate events. the alternative
> would be to invent your own class of note that handles chords "atomically"
> in cmn, and then provide a write-event method for midi if you also want to
> hear it, ie somethinkg like
> 
> (defmethod write-event ((object whatever) (stream midi-port))
>   ;; copy params to midi-note and output it
>   (loop with msg = (object midi-note)
>         for n in (slot-value object 'chord) ; object holds more than one note.
>         do (setf (slot-value msg 'note) n)
>            (write-event msg stream)))
> 

Ok, so you are suggesting making something like a midi-chord class. I
suppose that would be the best way to handle it. I just thought that as a
short-cut I could avoid creating a new class. I already have some parsing
routines for the stuff I want to do within CM - the only problem I have is
not having access to the correspnding CMN chord object, which from my
understanding, CMN is creating on the fly based on the note durations. 

So, yes, like you say, the correct approach would be to create a chord
class at the CM level, and then the method that writes to cmn-file could
use cmn::chord, and then presumably the "marker" slot in the cmn
stream, which I am
currently using to add the fingering, would add messages to a cmn::chord
if it is operating on a "chord" object.

Alas, this is too much work for me, especially since I could no longer
tread the thread in Stella as before - for example, mapping commands would
be much different since they would now have to deal with the chord
objects.


For now, I use map-simultaneous to resort events in each chord in pitch
order, and my marker function adds the fingering to only the top note in
each chord. This is working out fine for what I wanted it for, and in
fact is a lot less cluttered than the result would be even if I did
manage to mark the fingering for each note.

For anyone who is still reading at this point and cares, I am using
the fingering mark to mark notes with their position in the container.
 
So in effect, I'm using the CMN output as a sort of fancy "list" command.

> >Is there a way in a CM write-event method for a note going to a cmn-file,
> >to add a mark or CMN message to the chord the note belongs to?
> >
> >My specific problem is that I would like use the CMN fingering message to
> >mark all notes with their index in their thread. However, I find that
> >applying the fingering to the individual notes results in a mess, and I
> >think I probably need to add the fingerings to the chord as a whole.
> >
> >I almost think that I am better off not using the midi-note method, but
> >writing code that writes the thread as a whole (I would iterate through
> >the notes myself). Is there a way to do this within the CM/CMN framework?
> >
> >Larry
> >
> >
> >
> >
> >--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
> >
> 
> 
> 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Tue, 9 Dec 1997 19:18:51 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: Horrible CM archive bug!
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

It seems that changing the *print-length* setting on ACL/Linux affects the
archive command! 

After many painstaking hand-edits last night, it wasn't my intention to
only save the first 10 objects in each container, followed by three dots!

What's the best way to fix this? 

Larry


--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
Date: Wed, 10 Dec 1997 09:31:08 -0500 (EST)
X-Sender: taube@ux1.cso.uiuc.edu
In-Reply-To: <Pine.SUN.3.96.971209191405.29228A-100000@westnet.com>
Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
To: Larry Troxler <lt@westnet.com>
From: Rick Taube <taube@uiuc.edu>
Subject: Re: Horrible CM archive bug!
Cc: cmdist@ccrma.Stanford.EDU

depending on the value of *pprint-archive*, cm uses either WRITE or PPRINT
to print the external form of an object. The default for *pprint-archive*
is nil.  If your value is T try setting it to nil. If the problem presists
(I cant remember if WRITE respects *print-length* or not and I dont have a
cltl2 handy) then I guess archive-object should rebind that variable. In
that event, try changing its definition to

(defun archive-object (objects pathname &key (verbose t)
                                              (pprint *pprint-archive*))
  (let ((*print-length* nil))
    <CODE>
    ))




>It seems that changing the *print-length* setting on ACL/Linux affects the
>archive command!
>
>After many painstaking hand-edits last night, it wasn't my intention to
>only save the first 10 objects in each container, followed by three dots!
>
>What's the best way to fix this?
>
>Larry
>
>
>--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
>




From: Tobias Kunze <tkunze@tuba.kgw.tu-berlin.de>
Date: Wed, 10 Dec 1997 09:46:19 +0100
In-Reply-To: Larry Troxler <lt@westnet.com> "Horrible CM archive bug!" (Dec 9, 7:18pm)
References: <Pine.SUN.3.96.971209191405.29228A-100000@westnet.com>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Larry Troxler <lt@westnet.com>, cmdist@ccrma.Stanford.EDU
Subject: Re: Horrible CM archive bug!
Mime-Version: 1.0
Content-Type: text/plain; charset=us-ascii


I always disliked this default setting and thus have

  #+excl (setf tpl::*print-length* nil)

in my ~/.cminit.lisp.


To: cmdist@ccrma.Stanford.EDU
Subject: CM html-docs
Reply-To: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 11 Dec 1997 18:55:31 +0100
Lines: 52
X-Mailer: Gnus v5.4.37/XEmacs 19.16

Recently i appended together all cm/doc/dict/*.html files for an
outprint.

In the files without entries, J,K,X,Y,Z if i remeber right, theres an
annoying <CENTER> tag at the bottom which doesnt get closed.

Heres some code to concatenate the files together for anyone interested:


(setf files
      '(#p"/local/cm-sys/xcm/doc/dict/Intro.html"
	  #p"/local/cm-sys/xcm/doc/dict/Symbols.html"
	  #p"/local/cm-sys/xcm/doc/dict/A.html"
	  #p"/local/cm-sys/xcm/doc/dict/B.html"
	  #p"/local/cm-sys/xcm/doc/dict/C.html" 
	  #p"/local/cm-sys/xcm/doc/dict/D.html"
	  #p"/local/cm-sys/xcm/doc/dict/E.html"
	  #p"/local/cm-sys/xcm/doc/dict/F.html"
	  #p"/local/cm-sys/xcm/doc/dict/G.html"
	  #p"/local/cm-sys/xcm/doc/dict/H.html"
	  #p"/local/cm-sys/xcm/doc/dict/I.html"
	  #p"/local/cm-sys/xcm/doc/dict/J.html"
	  #p"/local/cm-sys/xcm/doc/dict/K.html"
	  #p"/local/cm-sys/xcm/doc/dict/L.html"
	  #p"/local/cm-sys/xcm/doc/dict/M.html"
	  #p"/local/cm-sys/xcm/doc/dict/N.html"
	  #p"/local/cm-sys/xcm/doc/dict/O.html"
	  #p"/local/cm-sys/xcm/doc/dict/P.html"
	  #p"/local/cm-sys/xcm/doc/dict/Q.html"
	  #p"/local/cm-sys/xcm/doc/dict/R.html"
	  #p"/local/cm-sys/xcm/doc/dict/S.html"
	  #p"/local/cm-sys/xcm/doc/dict/T.html"
	  #p"/local/cm-sys/xcm/doc/dict/U.html"
	  #p"/local/cm-sys/xcm/doc/dict/V.html"
	  #p"/local/cm-sys/xcm/doc/dict/W.html"
	  #p"/local/cm-sys/xcm/doc/dict/X.html"
	  #p"/local/cm-sys/xcm/doc/dict/Y.html"
	  #p"/local/cm-sys/xcm/doc/dict/Z.html"))

(let ((filer files)
      (ut "All-entries.html"))
  (with-open-file (str-ut ut
			  :direction :output
			  :if-exists :supersede)
     (dolist (fil filer)
       (with-open-file (inn fil :direction :input)
	   (do ((linje (read-line inn nil nil) (read-line inn nil nil)))
	       ((not linje))
	     (format str-ut "~&~A" linje))))))




Date: Thu, 11 Dec 1997 21:07:33 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: How to use INSERT clause in MAP?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

As you can see from the following log, I'm not at all sure how to use the
"insert" clause of the CM "map" command. "changes.txt" reffers me to
section 9.1 of the tutorial. Which would be fine, except that there is no
section labeled 9.1!

The description for the MAP command in the dictionary shows "{object}" as
the argument to the "insert" clause. Does this mean an expression that
returns an object? 

Well without further adieu, here's the problem I'm having. I can't get
"insert" to work at all, and "insert-at" sort of seems to work after
emitting an error message:

[begin Linux/ACL transcript]

Stella [Vamp3]: list 1:4
Vamp3:
     1. #<MIDI-NOTE | D3|   1/4|   1/4| 0.488| 0|> 
     2. #<MIDI-NOTE | F3|   1/4|   1/4| 0.165| 0|> 
     3. #<MIDI-NOTE | G3|     0|   3/4| 0.591| 0|> 
     4. #<MIDI-NOTE | F4|     0|   3/4| 0.488| 0|> 

Stella [Vamp3]: map 2:3 insert (object rest)
Error: attempt to take the length of a non-sequence:
       #<Interpreted Function (unnamed) @ #x8f816ca>

Restart actions (select using :continue):
 0: Return to Top-Level.
 1: Exit Top-Level.
[1] CM(25): :Tl

Stella [Vamp3]: list 1:4
Vamp3:
     1. #<MIDI-NOTE | D3|   1/4|   1/4| 0.488| 0|> 
     2. #<MIDI-NOTE | F3|   1/4|   1/4| 0.165| 0|> 
     3. #<MIDI-NOTE | G3|     0|   3/4| 0.591| 0|> 
     4. #<MIDI-NOTE | F4|     0|   3/4| 0.488| 0|> 

Stella [Vamp3]: map 2:3 insert-at @ (object rest)
New objects 
Error: No methods applicable for generic function
       #<STANDARD-GENERIC-FUNCTION SLOT-EXISTS-P> with args ((1 3)
CONTAINER)
       of classes (CONS SYMBOL)
  [condition type: PROGRAM-ERROR]

Restart actions (select using :continue):
 0: Try calling it again
 1: Return to Top-Level.
 2: Exit Top-Level.
[1c] CM(26): :tl

Stella [Vamp3]: list 1:8
Vamp3:
     1. #<MIDI-NOTE | D3|   1/4|   1/4| 0.488| 0|> 
     2. #<REST unset#x8f832aa> 
     3. #<MIDI-NOTE | F3|   1/4|   1/4| 0.165| 0|> 
     4. #<REST unset#x8f83322> 
     5. #<MIDI-NOTE | G3|     0|   3/4| 0.591| 0|> 
     6. #<MIDI-NOTE | F4|     0|   3/4| 0.488| 0|> 
     7. #<MIDI-NOTE |BF4|   3/4|   3/4| 0.559| 0|> 
     8. #<MIDI-NOTE | A3|     0|   3/4| 0.457| 0|> 

Stella [Vamp3]: 

[end transcript]

Any ideas? What is the correct syntax? Or is it a bug?

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


To: cmdist@ccrma.Stanford.EDU
Subject: Re: How to use INSERT clause in MAP?
Reply-To: cmdist@ccrma.Stanford.EDU
References: <Pine.SUN.3.96.971211210123.3296A-100000@westnet.com>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 12 Dec 1997 12:14:24 +0100
In-Reply-To: Larry Troxler's message of Thu, 11 Dec 1997 21:07:33 -0500 (EST)
Lines: 91
X-Mailer: Gnus v5.4.37/XEmacs 19.16

>>>>> "lt" == Larry Troxler <lt@westnet.com> writes:

    lt> Well without further adieu, here's the problem I'm having. I
    lt> can't get "insert" to work at all, and "insert-at" sort of seems
    lt> to work after emitting an error message:

This seems like a bug to me.  There are a couple of places in 'map.lisp'
which might be leftovers from a revision of some kind.  Until Rick or
someone has time to look at this you can use the diff included below.
The fix works for the time being. My transcript shows:

Stella [Vamp3]: list
Vamp3:
     1. #<MIDI-NOTE | E3|   1/4|   1/4| 0.100| 0|> 
     2. #<MIDI-NOTE | F3|   1/4|   1/4| 0.100| 0|> 
     3. #<MIDI-NOTE | G3|     0|   3/4| 0.100| 0|> 
     4. #<MIDI-NOTE | A3|     0|   3/4| 0.100| 0|> 

Stella [Vamp3]: map 2:3 insert (make-object rest)
New objects Vamp3[2,4]
Stella [Vamp3]: list
Vamp3:
     1. #<MIDI-NOTE | E3|   1/4|   1/4| 0.100| 0|> 
     2. #<REST unset#x108a82fa> 
     3. #<MIDI-NOTE | F3|   1/4|   1/4| 0.100| 0|> 
     4. #<REST unset#x108a8352> 
     5. #<MIDI-NOTE | G3|     0|   3/4| 0.100| 0|> 
     6. #<MIDI-NOTE | A3|     0|   3/4| 0.100| 0|> 

Stella [Vamp3]: map 5:6 insert-at @ (make-object rest)
New objects Vamp3[5,7]
Stella [Vamp3]: list
Vamp3:
     1. #<MIDI-NOTE | E3|   1/4|   1/4| 0.100| 0|> 
     2. #<REST unset#x108a82fa> 
     3. #<MIDI-NOTE | F3|   1/4|   1/4| 0.100| 0|> 
     4. #<REST unset#x108a8352> 
     5. #<REST unset#x108aa40a> 
     6. #<MIDI-NOTE | G3|     0|   3/4| 0.100| 0|> 
     7. #<REST unset#x108aa482> 
     8. #<MIDI-NOTE | A3|     0|   3/4| 0.100| 0|> 



Heres the output from the diff:

*** /tmp/map.lispa005gD	Fri Dec 12 12:04:52 1997
--- /tmp/map.lisp~a005gD	Fri Dec 12 12:04:52 1997
***************
*** 779,790 ****
              (push (list #'print-find-result op expr count cache width) 
                    *map-results*))
             ((:insert :append :insert-at :append-at)
!             (loop with sort = (when (consp (clause-forms clause))
! 				(> (length (clause-forms clause)) 2))
                    and container 
                    for additions in (nreverse cache)
                    do
! 	      (setf container (pop additions))
                ;; we process the (position . object) specs in additions 
                ;; in decending order.
                (when additions
--- 779,789 ----
              (push (list #'print-find-result op expr count cache width) 
                    *map-results*))
             ((:insert :append :insert-at :append-at)
!             (loop with sort = (> (length (clause-forms clause)) 2)
                    and container 
                    for additions in (nreverse cache)
                    do
!               (setf container (pop additions))
                ;; we process the (position . object) specs in additions 
                ;; in decending order.
                (when additions
***************
*** 801,807 ****
                                    do (incf off (if (consp (cdr x)) 
                                                     (length (cdr x)) 
                                                   1)))))
! 		  (print-external-references *standard-output* container nums 0))))))))
        (:analyze
         (setf *expr-length* 
           (max *expr-length* (length (clause-external clause))))
--- 800,806 ----
                                    do (incf off (if (consp (cdr x)) 
                                                     (length (cdr x)) 
                                                   1)))))
!                   (print-external-references container nums 0 nil))))))))
        (:analyze
         (setf *expr-length* 
           (max *expr-length* (length (clause-external clause))))

To: Tobias Kunze <tkunze@gigant.kgw.tu-berlin.de>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: ACL & Irix
References: <cop3ekdxe6n.fsf@pierre.uio.no> <9712011626.ZM17075@ulysses.stanford.edu>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 12 Dec 1997 15:40:22 +0100
In-Reply-To: Tobias Kunze's message of Mon, 1 Dec 1997 16:26:52 -0800
Lines: 36
X-Mailer: Gnus v5.4.37/XEmacs 19.16

>>>>> "tk" == Tobias Kunze <tkunze@ulysses.stanford.edu> writes:

[MIDI & SGI-6.2/6.3]    
    
    tk> I've tested it only on my 6.3 Indy, but it should run fine under
    tk> any Irix version 6.2 or higher.

This one returns the error on Irix-6.2 and ACL-4.3.1, while saying 'open
midi' to stella.  

midi/sgi/sgi-midi.c++:

   int driverOpen() {
     if (!gCMInterface) {
       gCMInterface = mdRegister(gClientName);
       if (!gCMInterface) {
	 Error("mdRegister(3dm) failed\n");
         .....


I havent really digged into this.  Id like to try to relink the .so-file,
but it seems to be missing some dependencies.  Do you have them
somewhere?

   #include "../mi-d.h"
   #include "../environment.h"
   #include "../driver.h"



(...

Btw.  Where on earth do you get all those netnames from?  Ive got at
least 7 pointing towards you now :)

-anders

From: Tobias Kunze <tkunze@greco.kgw.tu-berlin.de>
Date: Fri, 12 Dec 1997 16:18:13 +0100
In-Reply-To: Anders Vinjar <anders.vinjar@notam.uio.no> "Re: ACL & Irix" (Dec 12, 3:40pm)
References: <cop3ekdxe6n.fsf@pierre.uio.no> <9712011626.ZM17075@ulysses.stanford.edu> <coplnxq7hgp.fsf@pierre.uio.no>
Reply-To: t@ulysses.Stanford.EDU
X-Url: http://www.stanford.edu/~tkunze
X-Mailer: Z-Mail (3.2.3 08feb96 MediaMail)
To: Anders Vinjar <anders.vinjar@notam.uio.no>
Subject: Re: ACL & Irix
Cc: cmdist@ccrma.Stanford.EDU
Mime-Version: 1.0
Content-Type: multipart/mixed; 
              boundary="PART-BOUNDARY=.19712121618.ZM8638.kgw.tu-berlin.de"

--PART-BOUNDARY=.19712121618.ZM8638.kgw.tu-berlin.de
Content-type: text/plain; charset="us-ascii"


> 	 Error("mdRegister(3dm) failed\n");

i've noticed the same here on the machines in Berlin. For some
reason mdRegister fails sometimes and im very much inclined to
blame the  6.2 driver for it (mdRegister is new in 6.2, if im
not mistaken).  I did some tests and it seems as if kernel interface
structs are not freed properly: mdRegister works for some time,
then starts failing.  I still haven't figured out what fails
exactly, but in case you want give it a try, i attach a little
test program.  At any rate, mdRegister does not behave as it should.
Incidentally, mdUnRegister fails sometimes, too, but that is not
a showstopper.  Im in contact with SGI regarding this bug.

Anyway, try

  % stopmidi
  % startmidi -d internal -n "Software Synth"

to make sure midi is really running ok.  I've noticed that
registering works sometimes after having stopped and re-started midi.
you don't have to quit lisp to do that.


 > Id like to try to relink the .so-file,
 > but it seems to be missing some dependencies.  Do you have them
 > somewhere?

oops.  i have no idea how the sgi sources ended up in the cm archive.
we decided to distribute compiled binaries only, but ill make an
archive available some time this weekend. im currently writing up the
html documentation.   mail me if you need sources earlier, but i doubt the
register bug has anything to do with the fact that the library is
distributed as a binary.


 > Where on earth do you get all those netnames from?

They procreate!  Honestly!  But they all forward to me. :)


--PART-BOUNDARY=.19712121618.ZM8638.kgw.tu-berlin.de
Content-type: text/plain; name="mdRegister-test.c++"; charset="us-ascii"
X-Zm-Content-Name: mdRegister-test.c++
Content-Description: Text

//
// File:           mdRegister-test.c++ 
//
// Summary:        
//
// Author:         Tobias Kunze
// E-Mail:         tkunze@ccrma.stanford.edu
// Org:            CCRMA, Stanford University
//
// Orig-Date:       9-Dec-97 at 11:47:33
// Last-Mod:       12-Dec-97 at 15:48:29 by Tobias Kunze
//
// Description:    CC -fullwarn -o foo foo.c++ -lmd
//
#ident "$Revision: 0.0 $"
//
// Changes:
//    00-Jan-00    tk    created


#include <dmedia/midi.h>
#include <iostream.h>

char gInterface[] = "myInterface";

char gHelp[] = 
  " Usage:\n" 
  " h        display this help\n"
  " r        register test interface name\n"
  " u        unregister test interface name\n"
  " U        unregister whatever the last call to mdRegister returned\n"
  " i        info on all interfaces\n"
  " q        quit\n";

void main(void) {
  int n, i, res;
  char* interface = gInterface;
  char* name;
  char c;
  int quit = 0;
  
  n = mdInit();

  while (!quit) {
    cout << "> ";
    cin >> c;
    switch (c) {
    case 'r' :
      name = mdRegister(interface);
      cout << "register: " << (name ? name : "NULL") << endl;
      break;
    case 'u' : 
      res = mdUnRegister(interface);
      cout << "unregister \"" << interface << "\" returned " << res << endl;
      break;
    case 'U' : 
      res = mdUnRegister(name);
      cout << "unregister \"" << name << "\" returned " << res << endl;
      break;
    case 'i' : 
      n = mdInit();
      cout << n << " Interfaces:" << endl;
      for (i = 0; i < n; i++)
	cout << "   " << mdGetName(i) << endl;
      break;
    case 'q' : 
      quit = 1;
      break;
    case 'h' : 
    default : 
      cout << gHelp; 
      break;
    }
  }
}


//
// -*- EOF -*-

--PART-BOUNDARY=.19712121618.ZM8638.kgw.tu-berlin.de--

To: cmdist@ccrma.Stanford.EDU
Subject: Re: ACL & Irix
References: <cop3ekdxe6n.fsf@pierre.uio.no> <9712011626.ZM17075@ulysses.stanford.edu> <coplnxq7hgp.fsf@pierre.uio.no> <9712121618.ZM8638@greco.kgw.tu-berlin.de>
Mime-Version: 1.0 (generated by tm-edit 7.106)
Content-Type: text/plain; charset=US-ASCII
From: Anders Vinjar <anders.vinjar@notam.uio.no>
Date: 12 Dec 1997 16:47:53 +0100
In-Reply-To: Tobias Kunze's message of Fri, 12 Dec 1997 16:18:13 +0100
Lines: 13
X-Mailer: Gnus v5.4.37/XEmacs 19.16

>>>>> "t" == Tobias Kunze <tkunze@greco.kgw.tu-berlin.de> writes:

    t> I still haven't figured out what fails exactly, but in case you
    t> want give it a try, i attach a little test program.  At any rate,
    t> mdRegister does not behave as it should.  Incidentally,
    t> mdUnRegister fails sometimes, too, but that is not a showstopper.
    t> Im in contact with SGI regarding this bug.

Im in no hurry at all about this, and i dont think im to much use trying
to follow this myself.  Ill try things out as they come, and give you a
response as to bugs etc.

-anders

Date: Sat, 13 Dec 1997 20:19:26 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: cmn::bar doesn't work with CM?
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII


What's the trick to drawing bars in CM/CMN? In the following thread, for
example, after opening "test.eps" with the default parameters, "mix" does
indeed call cmn::add-data-1, but no bar-line is drawn.

I think this is some-how specific to "bar", because replacing the data
slot of list[3] with '((meter 2 4)) does result in a meter getting
notated.

Curiously, switching to the cmn package and entering the basic examples in
cmn.html, I find that the bars _do_ get drawn.




Stella [Test]: list
Test:
     1. #<MIDI-NOTE | C4|     1|     1| 0.200| 0|> 
     2. #<MIDI-NOTE | C4|     1|     1| 0.200| 0|> 
     3. #<CMN ((bar))#x8cd3d4a> 
     4. #<MIDI-NOTE | C4|     1|     1| 0.200| 0|> 
     5. #<MIDI-NOTE | C4|     1|     1| 0.200| 0|> 


Larry

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Sun, 14 Dec 1997 00:16:08 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: cmdist@ccrma.Stanford.EDU
Subject: More CMN "bar" stuff.
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

Ok, i found that by changing that last if clause in cmn::add-data-1 to
always do the push rather than call cmn::add-to-marks, the cmn "bar"
events now  get displayed on the score. IOW, in the distribution code, the
bar object was visible-p, hence add-to-marks was getting called,
presumably 
erroneously. (I will not even attempt to take a guess at the semantics
here).


However, this is only a partial victory, because the bars only get applied
to the treble staff of what is in this case, a treble/bass system. (The
CM thread in question is a MIDI import which CMN apparently automatically
scores as a treble/bass (piano-style) score)

So, can anyone help me out here? Am I really the only person on the planet
that is actually _using_ this stuff??

Larry



--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Mime-Version: 1.0
Content-Type: text/plain; charset="us-ascii"
Date: Sun, 14 Dec 1997 09:32:17 -0600
To: Larry Troxler <lt@westnet.com>
From: taube@ux1.cso.uiuc.edu (Rick Taube)
Subject: Re: More CMN "bar" stuff.
Cc: cmdist@ccrma.Stanford.EDU


>So, can anyone help me out here? Am I really the only person on the planet
>that is actually _using_ this stuff??

could be. ive cwrtainly used it in the past when i notate for real
instruments. but as i mentioned last week, i can only look at the cm/cmn
interface once my semester's obligations are over, i cant do anything until
then.  there is a (staff ) macro in cm that lets you specify the clef(s)
for channel-based layout.

Date: Sun, 14 Dec 1997 18:10:59 -0500 (EST)
From: Larry Troxler <lt@westnet.com>
To: Rick Taube <taube@ux1.cso.uiuc.edu>
Cc: cmdist@ccrma.Stanford.EDU
Subject: Re: More CMN "bar" stuff.
In-Reply-To: <v02130500b0b9aba1af05@[130.126.26.235]>
Mime-Version: 1.0
Content-Type: TEXT/PLAIN; charset=US-ASCII

On Sun, 14 Dec 1997, Rick Taube wrote:

> 
> >So, can anyone help me out here? Am I really the only person on the planet
> >that is actually _using_ this stuff??
> 
> could be. ive cwrtainly used it in the past when i notate for real
> instruments. but as i mentioned last week, i can only look at the cm/cmn
> interface once my semester's obligations are over, i cant do anything until
> then.  there is a (staff ) macro in cm that lets you specify the clef(s)
> for channel-based layout.
> 

Ouch. I sounded very demanding last night - in case there's any
confusion, please be assured that the
intended tone was simply late-night frustration; I didn't mean it to sound
like "I want some answers now, dag-gummit!". Of course, this "dag-gummit"
guy must really be a guru or something, since he's the one that everyone
turns to in desparation. So if anyone has his email address, ...

About the bar-lines, I've spent a couple of hours this lazy afternoon
meandering through the CM and CMN sources, and unfortunately I've got
nowhere.

My goal is simply to score a piano part from CM with normal bar lines that
apply to the treble-bass system and not just to one staff.

My observations so far:

1. It seems that inserting cmn objects with data ='((bar)) into the thread
doesn't work, because the division of the the thread into treble and bass
staves seems to be done very late in the process, under CMN control, and
the fact that there is more than one staff at play is invisible to CM.

2. Realizing this, I then tried to take the approach of duplicating the
original CM thread, keeping the treble events in one, and the bass events
in the other, and the bar events in both. I tried to use the "mute" flags
for this. However, this doesn't work, because the CMN class is note a
timed-event, IOW it is not assigned a rhythm or a start time. 

3. I think I'll shut down the 'puter and watch a movie instead.

  
Larry

> 

--  Larry Troxler  --  lt@westnet.com  --  Patterson, NY USA  --
  


Date: Mon, 22 Dec 97 08:57:51 PST
From: bil (To: cmdist)
To: cmdist
Subject: snd/clm news

I've added an envelope viewer/editor to Snd -- Edit
Envelope under the Edit menu. Also with much help
from Juan Pampin, the Snd recorder begins to work
with the newest OSS (we actually are getting input!).
Also a first stab at a port to the Sun, thanks to
Volker Kuhlmann.  Also, the fft frequency axis is 
now draggable.

Formnt-r added to CLM to make it easy to change the
formant radius at run time.  Juan Pampin suggests
the formnt generator be named formant -- I was
using Julius Smith's name for the thing from
Sambox days, but it begins to look old-fashioned.
Unless someone hollers, I'll change the name.

A few of Larry Troxler's many CM/CMN bugs have been
pushed around diligently -- I'll tackle this more
earnestly soon (it's the holidays, and so on).


Sender: jfm3@ix.netcom.com
Date: Tue, 23 Dec 1997 11:30:14 -0500
From: Joe Miklojcik <jfm3@acm.org>
Organization: Rutgers University ACS
X-Mailer: Mozilla 4.04 [en] (X11; I; Linux 2.0.30 i686)
Mime-Version: 1.0
To: bil@ccrma.Stanford.EDU, cmdist@ccrma.Stanford.EDU
Subject: snd license
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

I would like to make snd a package that can be distributed with Debian
GNU/Linux.
I need to know more about how snd is licensed to do so.
All I can see license wise so far is "This software is available to
anyone who is interested, free gratis for nothing, without warranties of
any kind."
Have you considered putting snd under a "freeware" license like the GPL?
Instructions for doing so can be found at
http://www.fsf.org/copyleft/gpl.html#SEC4 .
The GPL is the license most of Linux is under, and I think your software
would benefit from it greatly.
Thanks.



Date: Wed, 24 Dec 1997 00:22:37 +0100
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 2.0 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Bug in CMN (first note of each line)?
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello,

Are the versions of CMN labelled?

The only variable which name contains "VERSION" in 
the "CMN" package is AFAIR *cmn-version* which value
seems to be bound to the date when I built the system 
(Nov 19, 1997).  Anyway, it's not far from the date
when I downloaded CMN.

Is this a bug or am I doing something wrong?
When I run the example given at the end of this message
(or a more complex stuff) either as a :quickdraw output 
or as a postscript output, I still get an unexpected result: 
except for the first measure, the f2 (the first note of the 
first measure of the second voice of the second part of each 
line (ouf!)) is not drawn.  If I repeat the same measure many
times on a wider score, the bug occurs on each first note of 
the first measure of the second voice of the second part of 
each line.

Also, the documentation says that "if a staff has no clef,
it is given one [snip], but it is scaled (by 0 0) to be
invisible".  
Can you tell me why my second staff (the drum staff) shows 
a clef on each line but the first one?
Should I put an explicit (clef bass (scale 0 0)) ?

Thanks in advance
-- 
                                                             [jack]
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

(in-package "CMN")

(cmn
 (size 18)
 (output-type :quickdraw)
 (page-width 6)
 (staff-name-font-scaler 0.6)
 (layout :old-style)
 (section
  (system
   bracket
   (staff bass
          (staff-name "Bass")
          (meter '"2+2+1" 4 (beaming '(2 2 1)))
          (meter 5 4 invisible (beaming '(2 2 1)))
          (engorge (list (a2 (rq 3/4))
                         (rest (rq 1/4))
                         (d3 (rq 2))
                         (g3 (rq 1))
                         (e3 (rq 1)))))
   (setq |Drum-STAFF|
         (staff nil
                (staff-name "Drum")
                (meter '"2+2+1" 4 (beaming '(2 2 1)))
                (meter 5 4 invisible (beaming '(2 2 1)))
                (engorge (list (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)))))
   (staff (tied-to |Drum-STAFF|)
          (meter 5 4 invisible (beaming '(2 2 1)))
          (engorge (list (f2 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)
                         (a2 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down))))))
 (section
  (system
   bracket
   (staff bass
          (meter 5 4 invisible (beaming '(2 2 1)))
          (engorge (list (a2 (rq 3/4))
                         (rest (rq 1/4))
                         (d3 (rq 2))
                         (g3 (rq 1))
                         (e3 (rq 1)))))
   (setq |Drum-STAFF|
         (staff nil
                (meter 5 4 invisible (beaming '(2 2 1)))
                (engorge (list (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)))))
   (staff (tied-to |Drum-STAFF|)
          (meter 5 4 invisible (beaming '(2 2 1)))
          (engorge (list (f2 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)
                         (a2 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down))))))
 (section
  (system
   bracket
   (staff bass
          (meter 5 4 invisible (beaming '(2 2 1)))
          (engorge (list (a2 (rq 3/4))
                         (rest (rq 1/4))
                         (d3 (rq 2))
                         (g3 (rq 1))
                         (e3 (rq 1)))))
   (setq |Drum-STAFF|
         (staff nil
                (meter 5 4 invisible (beaming '(2 2 1)))
                (engorge (list (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)
                               (g3 (rq 1) nil stem-up)))))
   (staff (tied-to |Drum-STAFF|)
          (meter 5 4 invisible (beaming '(2 2 1)))
          (engorge (list (f2 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)
                         (a2 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)
                         (c3 (rq 1) nil stem-down)))))))

;; end of example

Date: Wed, 24 Dec 97 06:57:40 PST
From: bil (To: Jacques Duthen <duthen@club-internet.fr>)
To: Jacques Duthen <duthen@club-internet.fr>
Subject: Re: Bug in CMN (first note of each line)?
Cc: cmdist

That's a bizarre bug -- the clef has the correct (all zeros)
matrix, but somehow the following note (the f2, which does
exist correctly in the cmn data) is the thing that is made
invisible -- I'll have to poke around at this.

On the version number: I've been using a date as the version
for clm/cmn/snd all along -- version numbers like 18.55.12345 
have always struck me as silly.


Date: Tue, 30 Dec 1997 03:15:50 +0100
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 2.0 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist <cmdist@ccrma.Stanford.EDU>
Subject: Bug in CMN (21/8)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Happy new year everybody!

When I try the following example, the first two notes
are ok, but the following ones are displayed in the second
measure though they should be in the first one.  The remainding
notes are displayed outside the staff (after the right end).

Am I doing something wrong?

Or is this a bug?

Thanks for any help.

-- 
                                                             [jack]
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|

(in-package "CMN")
(cmn (output-type :qddirect)
     (size 18)
     (page-width 20)
     (layout :old-style)
     (section (system bracket
                      (staff nil
                             (staff-name "Drum")
                             (meter 21 8 invisible
                                    (beaming '(2 2 2 2 3/2 1)))
                             (engorge (list (f4 (rq 1/2))
                                            (f4 (rq 1))
                                            (rest (rq 5/2))
                                            (f4 (rq 1/2))
                                            (f4 (rq 1))
                                            (rest (rq 5/2))
                                            (f4 (rq 3/2))
                                            (f4 (rq 1)))))))
     (section (system bracket
                      (staff nil
                             (meter 21 8 invisible
                                    (beaming '(2 2 2 2 3/2 1)))
                             (engorge (list (f4 (rq 1/2))
                                            (f4 (rq 1))
                                            (rest (rq 5/2))
                                            (f4 (rq 1/2))
                                            (f4 (rq 1))
                                            (rest (rq 5/2))
                                            (f4 (rq 3/2))
                                            (f4 (rq 1))))))))

Date: Wed, 31 Dec 1997 01:45:50 +0100
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 2.0 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Bug in CMN (default clef in tied staves)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hello,

When a staff has no clef, an "intelligent" mechanism tries
to guess the best clef according to the notes on the staff.
When two staves are tied, this mechanism should decide for
the same clef for both staves, otherwise you get the bug
as in the following example:

(in-package "CMN")

(cmn (output-type :quickdraw)
     (size 24)
     (page-width 16)
     (staff-name-font-scaler 0.6)
     (layout :old-style)
     (section (system bracket
                      (setq |Drum-STAFF|
                            (staff nil
                                   (staff-name "Drum")
                                   (meter 2 4 (beaming '(1 1)))
                                   (engorge (list
                                             (c5 (rq 1) stem-up)
                                             (b4 (rq 1) stem-up)))))
                      (staff (tied-to |Drum-STAFF|)
                             (meter 2 4 invisible (beaming '(1 1)))
                             (engorge (list (f2 (rq 1) stem-down)
                                            (g2 (rq 1) stem-down)))))))

-- 
                                                             [jack]
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|


Date: Wed, 31 Dec 1997 01:54:57 -0800
From: "Richard V. Morris" <badger123@earthlink.net>
Reply-To: badger@cerfnet.com
X-Mailer: Mozilla 4.01 [en] (Win95; I)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Common Music in Franz Allegro Common Lisp 3.0.2 for Windows 95
X-Priority: 3 (Normal)
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Franz Allegro Common Lisp version 3.0.2 for Windows 95 includes a
real-time interface to a MIDI sequencer.  

Has anyone ported Common Music to ACLWIN 3.0.2?  This version of
ACLWIN also includes an implementation of CLOS.  I tried compiling 
the CM sources in cm.zip under ALCWIN 3.0.2, but was stopped by a
problem with class-finalized-p being considered as an undefined
function.  

Although I have a basic acquaintance with Lisp and a basic acquaintance
with object-oriented programming, I don't have enough familiarity with
Common Lisp or CLOS to undertake debugging this problem completely on
my own.

I do have ACLWIN 3.0.2 installed on a Pentium 200 MMX with plenty of
RAM and disk storage, and plenty of time to invest in getting CM to 
run on a Win 95 PC with real-time playback capability. I'd appreciate
some pointers on how to get CM running on this platform, if it hasn't
already been ported to the platform.

Thanks,

Dick Morris
<badger@cerfnet.com>

Date: Wed, 31 Dec 1997 13:28:22 +0100
From: Jacques Duthen <duthen@club-internet.fr>
X-Mailer: Mozilla 2.0 (Macintosh; I; 68K)
Mime-Version: 1.0
To: cmdist@ccrma.Stanford.EDU
Subject: Re: Bug in CMN (21/8)
References: <34A85956.69E8@club-internet.fr>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Jacques Duthen wrote:
> 
> When I try the following example, the first two notes
> are ok, but the following ones are displayed in the second
> measure though they should be in the first one.  The remainding
> notes are displayed outside the staff (after the right end).

I investigated a little:  it's a bug ;-)

This seems to be due to the 'rest' object: 

if I replace "(rest (rq 5/2))" by a note, say "(g4 (rq 5/2))",
the bug disappears.

or if I replace:
   (f4 (rq 1/2))   (f4 (rq 1))     (rest (rq 5/2))
by
   (f4 (rq 1/2))   (f4 (rq 1/2))   (rest (rq 3))
the bug disappears too.

Please, can you tell me if it can be fixed?
TIA                                                          [jack]
-- 
| # # | # # # | # # | # # # | # # | # # # | Jacques Duthen   [jack] |
| # # | # # # | # # | # # # | # # | # # # | duthen@club-internet.fr |
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|


Date: Wed, 31 Dec 97 06:19:37 PST
From: bil (To: Jacques Duthen <duthen@club-internet.fr>)
To: Jacques Duthen <duthen@club-internet.fr>
Subject: Re: Bug in CMN (21/8)
Cc: cmdist

> Please, can you tell me if it can be fixed?

Sure!  I'll be buried in family affairs for another
week I think, but then I'll fix it -- thanks for
tracking it down to the rest function (it's probably
trying to figure out how to tie an eighth rest
to a half rest and getting completely flustered).