This is the main README for Common Music. After reading this file, read: if you use Macintosh with MCL: README.MCL if you use AKCL 6.15 on any machine: README.AKCL if you use Windows with CL/PC: README.WIN if you use Excl or Lispworks on SGI: README.SGI if you use CLISP on any machine: README.CLISP if you use DOS but not Windows: README.WIN (filename info) The file build/README contains complete installation instructions for Common Music, CLM and PCL. The file changes.text contains a summary of the most recent enchancements and bug fixes. Documentation about Common Music is located in the subdirectory doc/. The tutorial is in stella/tutorial/stella.rtf. Demo files are in stella/scripts and stella/examples/. ------------------------------------------------------------------------------- Common Music is known to work in the following hardware/os/lisp configurations: Machine OS Lisps ---------------------------------------------------------- NeXT 2.1,3.0 Franz ACL 3.1.2, 4.1 AKCL 6.15 CLISP Macintosh System 7 MCL 2.0 (final release) SGI Iris IRIX Franz ACL 4.1 Sun4 SunOS 4.1 AKCL 6.15 486 Windows 3.1 Franz CL/PC DOS CLISP ------------------------------------------------------------------------------- In addition to the source files located here, Common Music depends on two lisp utilities which may or may not be provided by the lisp you are using. The first of these utilities is the MIT or ANSI loop macro, which is widely available and included in most lisp vendor's distribution software. If you are running in Allegro Common Lisp, MCL, Lucid or Symbolics your lisp distribution contains a copy of it. If your lisp does not have the loop macro, try the one in utils/loop.lisp. The second utility you need is CLOS, the Common Lisp Object System. If your lisp does not contain CLOS, you may use PCL, which is a portable public domain implementation available through anonymous ftp on ftp.zkm.de pub/March-92-PCL-2c.tar.Z parcftp.xerox.com: pub/pcl/September-16-92-PCL-f.tar.Z ccrma-ftp.stanford.edu pub/Lisp/pcl.tar.Z ma2s2.mathematik.uni-karlsruhe.de (CLISP) pub/lisp/clisp/packages/pcl.sept92f.clisp.tar.z ------------------------------------------------------------------------------- Common Music directory structure: ./ - kernel build/ - build scripts. see build/README contrib/ - source files for extensions, tools, etc. doc/ - documention. see doc/README midi/ - source files for MIDI syntax midi/examples/ - example files for midi oldsys/ - old runtime system (defscorefile, etc) stella/ - composition editor stella/scripts/ - demo script files to load stella/tutorial/ - tutorial files stella/examples/ - example files stella/help - long help files used by editor utils/ - external utilities used by Common Music ------------------------------------------------------------------------------ A mailing list cmdist@ccrma.stanford.edu has been established for people interested in tracking Common Music, CLM and CMN. Send request to cmdist-request@ccrma.stanford.edu If you have any questions or comments please feel free to contact me: Rick Taube Zentrum fuer Kunst und Medientechnologie Ritterstr. 42 7500 Karlsruhe 1 Germany Net: hkt@zkm.de, hkt@ccrma.stanford.edu Fax: +49 721 9340 39 Vox: +49 721 9340 300
This file contains directions for building AKCL 615 on a NeXT (2.1 or 3.0) for use with Common Music and CLM. You can get the sources to akcl via anonymous ftp from guido.zkm.de in the directory pub/akcl. ------------------------------------------------------------------------ 1) On NeXT 3.0 systems, you'll need to get the dsp library from ccrma -- it's on the pub directory at ccrma-ftp.stanford.edu as: libdsp.a. 2) After ftp-ing the AKCL sources, read the file NeXT-akcl-1-615.README to learn about general installation procedures for NeXT/akcl. After following the instructions and restoring the tar files to their appropriate directories, read the file akcl.README. Then, before you run add-defs edit the following two files. In the file <kcl-home-directory>/akcl/h/NeXT.defs change the line: LIBS = -lsys_s -lm -lg to (NeXT 2.0 and 2.1) LIBS= -u libdsp_s -ldsp_s -u _midi_set_owner -u _midi_get_out_timer_port -u _midi_get_xmit -u _midi_get_recv -u _midi_set_proto -u _midi_set_sys_ignores -u _midi_get_data -u _midi_timer_error -u _port_set_allocate -u _port_set_add -u _timer_start -u _midi_error -u _port_set_deallocate -u _timer_stop -u _timer_set_quantum -u _timer_set -u _timer_quanta_req -u _midi_timer_reply_handler -u _midi_send_cooked_data -u _midi_clear_queue -u _midi_reply_handler -lmidi -lsys_s -lm -lg or to (NeXT 3.0) LIBS= -u _SNDReadSoundfile -u _SNDStartPlaying -u _SNDWait -u _SNDFree -u _SNDStop -u _SNDSetHost -u _SNDAcquire -u _snddriver_get_device_parms -u _SNDRelease -u _snddriver_set_device_parms -u _snddriver_get_volume -u _snddriver_set_volume -u _snddriver_set_ramp -u _DSPOpenNoBoot -u _DSPClose -u _valloc -ldsp -u _mutex_try_lock -u _mutex_wait_lock -u _MIDIBecomeOwner -u _MIDIClaimUnit -u _MIDISetClockMode -u _MIDISetClockQuantum -u _MIDISetSystemIgnores -u _MIDIRequestExceptions -u _MIDIGetAvailableQueueSize -u _MIDISetClockTime -u _MIDIStartClock -u _MIDIReleaseOwnership -u _MIDIStopClock -u _MIDIGetClockTime -u _MIDISendData -u _MIDIRequestData -u _MIDIHandleReply -u _MIDIClearQueue -u _cthread_detach -u _port_set_allocate -u _port_set_add -u _port_set_deallocate -u _name_server_port -lsys_s -lm These LIB entries must remain one line. Edit the file <akcl-home-directory>/h/NeXT.h and replace the line ADD_FEATURE("NeXT"); \ with the following 2 lines (NeXT 2.1): ADD_FEATURE("NeXT"); \ ADD_FEATURE("NEXT"); \ or the following 3 lines (NeXT 3.0) ADD_FEATURE("NeXT"); \ ADD_FEATURE("NEXT"); \ ADD_FEATURE("NEXT-3.0"); \ Replace the line: #define BIG_HEAP_SIZE 0x1000000 with the following three lines: #define BIG_HEAP_SIZE 0x2000000 #undef MAXPAGE #define MAXPAGE (2*16384) For NeXT 3.0 there there is one further change -- In akcl/c/NeXTunixsave.c, the declaration: extern struct section *getsectbyname(char *, char *); causes a fatal compiler error. The new declaration (in /NextDeveloper/Headers/bsd/lib.h) is: extern const struct section *getsectbyname( const char *segname, const char *sectname); ------------------------------------------------------------------------ 3) Follow the directions in akcl.README and finish building akcl. This will take about 2 hours. ------------------------------------------------------------------------ 4) If you will be using CM with CLM, comment out loading tl.lisp in the CLM build file all.lisp; CM will load the latest version from its utils directory. ------------------------------------------------------------------------ 5) If you are building Common Music with the MusicKit, you should compile the sources in two passes. For the first pass, compile all the syntaxes EXCEPT the MusicKit. In the second pass, compile ONLY the MusicKit syntax. This gives the akcl compiler a fighting chance. See build.lisp for more info. ------------------------------------------------------------------------ 6) Other stuff: You can get AKCL via anonymous ftp from sonata.cc.purdue.edu (128.210.15.30) in the file pub/next/2.0-release/binaries/AKCL-1-586-NeXT.bin.tar.Z The file akcl.README contains short directions on how to build kcl. You can get PCL via anonymous ftp from parcftp.xerox.com (13.1.64.94) in the tar file /pub/pcl/March-92-PCL-2c.tar.Z. you should not use a pcl version earlier than March-92. Don't use PCL'S SHIPPED FROM FRANZ. When an AKCL image with Common Music boots up it does not automatically place you in either the Common Music package or in Stella's command interpreter. To enter stella, type: (stella:stella) To go to Common Music, type: (in-package :cm) but you can reach everything in the Common Music package from the Stella package as well. ------------------------------------------------------------------------ 7) Known problems in AKCL: a) compiling fm2cnvimono and fm2pnvimono sometimes results in an error in the c compiler: Compiling /dist/cm/mk/fm2cnvimono.lisp. End of Pass 1. End of Pass 2. cc: Internal compiler error: program cc1obj got fatal signal 11 Correctable error: (SYSTEM "(cd /dist/cm/mk/ ;cc -DVOL=volatile -fwritable-strings -O -c -I. fm2cnvimono.c -w)") returned a non-zero value 1. ive commented these two files out for akcl, but you might be able to compile them on your machine.
This file contains information about running Common Music in CLISP 1) The system has been compiled and minimally tested in the NextStep version of CLISP, using black hardware, NeXTStep 3.0, 16 Meg. 2) You can use either PCL or CLISP's verion of CLOS. The choice is automatic; if PCL is around, the build script prefers it to the native version. If you use the native CLOS, there is a patch at the end of this README that must be built into CLISP before building Common Music. Directions on how to perform the patch are included. If you use PCL, get the version conditionalized for CLISP from: ma2s2.mathematik.uni-karlsruhe.de in the file: pub/lisp/clisp/packages/pcl.sept92f.clisp.tar.z note that the ".z" extension needs gzip, not uncompress. There are directions for installing PCL in build/README. 3) MIDI real time is not implemented in this port. It might be possible, but I don't yet understand the foreign function interface provided by CLISP. And if you are using CLISP on DOS or Linux I don't even know if there are midi drivers available for you. At any rate, its no problem to write midi files, or any other type of common music output file, which you can presumably then listen to using some other app. Since there is no connection to a driver you can't use Stella's PLAY command for midi files either, unless you redefine it to call some external player via a shell call, which would certainly be possible if you are on Unix. 4) To compile the system first add the CLOS patch to CLISP or install PCL. Then edit build/build.lisp and set the build parameters. Here is an example of what reasonable parameter settings might look like on a NeXT: (cm-directory "/lisp/cm/") (cm-image-name "/lisp/clisp/cm.mem") (clm-directory nil) (cmn-directory nil) (pcl-directory nil) (syntaxes '(:midi :csound :rt :musicKit)) [Also, if you are running under NextStep 2.1, search for next-3-0 in the same file and set it to nil.] On DOS it might look like: (cm-directory "c:\\cm\\") (cm-image-name "c:\\clisp\\cm.mem") (clm-directory nil) (cmn-directory nil) (pcl-directory nil) (syntaxes '(:midi )) [Note that the DOS directory delimiter \ must be doubled in strings since it is also a Lisp escape character] Next, boot CLISP and load build.lisp. This will compile all the sources. Compiling takes a long time in CLISP, so take a coffee break or two. 5) To save a final lisp image of Common Music, quit and restart Lisp, then load build.lisp again. This will load all the .fas files and save an image. You will then probably want to make script that boots clisp using your saved image. On Unix try something like: #/bin/csh -f /lisp/clisp/lisp.run -M /lisp/clisp/cm.mem $* on DOS, a CM.BAT would look something like: c:\clisp\lisp.exe -M c:\clisp\cm.mem %1 %2 %3 %4 %5 %6 %7 %8 %9 USING STELLA: To start up Stella, use the (stella:stella) function. To resume from error breaks, use the TL error command (see below). If you are new to the system, probably the best place to start is with the tutorial in stella/tutorial/stella.rtf. Other docmentation like the dictionary and midi.rtf help are in the doc/ directory. KNOWN PROBLEMS: 1) There is a low level CLISP readline bug that causes prompts to be multiply printed when running CLISP from a terminal. I've believe I've hacked around this problem. The real fix is to apply PATCH 2 below to the CLISP's C source code and then recompile run.exe. 2) No Midi real time in any CLISP port. Might be possible on NeXT. 3) For some reason the R1 restart does not return to stella even though it says it will. Use the TL break command instead, ie: Stella [Top-Level]: (car 1) *** - CAR: 1 is not a list The following restarts are available: R1 = Return to Top-Level. R2 = Exit Top-Level. 1. Break> tl <<< use tl Stella [Top-Level]: 4) Simple character printing to the terminal is slo-o-ow in CLISP, at least in its NeXTStep incarnation. 5) Actually, everything in CLISP seems slow to me. Oh well, you get what you pay for. To make runtime execution as fast as possible I've made the default setting for *compile-algorithms* T in CLISP (normally its nil). Since it appears that CLISP's byte compiler can handle any sort of function object, incuding lexical closures, there is really no reason to run interpreted. If you have problems set it back to NIL. See doc/dictionary.rtf for more info on *compile-algorithms* . CLISP PATCH 1: Fix CLOS (ignore if using PCL) -------------------------------closfix.lsp----------------------------- ;;; ;;; Fix CLISP to allow &optional and &key in methods. This patch must be ;;; built into CLISP before building Common Music. Do this by saving the ;;; code in a file called closfix.lsp, then executing two shell commands: ;;; clisp -c closfix ;;; clisp -i closfix -x '(saveinitmem)' ;;; the first command compiles the patch file, the second loads it and ;;; saves a new initmem.mem image. see CLISP's man page for more info. ;;; (in-package "CLOS") (defun compute-effective-method (gf &rest args) (let* ((signature (gf-signature gf)) (req-anz (first signature)) (req-vars (n-gensyms req-anz)) (req-args (subseq args 0 req-anz)) (restp (or (third signature) (> (second signature) 0))) (rest-var (if restp (gensym))) (apply-fun (if restp 'APPLY 'FUNCALL)) (apply-args `(,@req-vars ,@(if restp `(,rest-var) '()))) (lambdalist `(,@req-vars ,@(if restp `(&REST ,rest-var) '()))) (opt-vars '()) (key-vars '()) (lambdalist-keypart '()) (arg-order (gf-argorder gf)) (methods (gf-methods gf))) ; Determine the effective method: ; 1. Select the applicable methods: (setq methods (remove-if-not #'(lambda (method) (method-applicable-p method req-args)) methods ) ) (when (null methods) (loop (apply #'no-applicable-method gf args)) ) ; 28.1.6.4., 28.1.6.5.: Keyword arguments in generic functions (when restp ; Die generische Funktion hat &REST oder &KEY, also auch alle Methoden. ; "If the lambda-list of ... the generic function definition contains ; &allow-other-keys, all keyword arguments are accepted." (unless (fifth signature) ; "The specific set of keyword arguments accepted ... varies according ; to the applicable methods." (let ((signatures (mapcar #'std-method-signature methods))) ; "A method that has &rest but not &key does not affect the set of ; acceptable keyword srguments." (setq signatures (delete-if-not #'fourth signatures)) ; Keine Methode mit &key -> keine Einschränkung der Argumente. (unless (null signatures) ; "If the lambda-list of any applicable method ... contains ; &allow-other-keys, all keyword arguments are accepted." (unless (some #'sixth signatures) ; "The set of keyword arguments accepted for a particular call ; is the union of the keyword arguments accepted by all ; applicable methods and the keyword arguments mentioned after ; &key in the generic function definition." (let ((keywords (remove-duplicates (append (fourth signature) (mapcap #'fifth signatures)) :from-end t )) ) (setq opt-vars (n-gensyms (second signature))) (setq key-vars (n-gensyms (length keywords))) (setq lambdalist-keypart `(&KEY ,@(mapcar #'(lambda (kw var) `((,kw ,var))) keywords key-vars ) ) ) ) ) ) ) ) ) ; 2. Sort the applicable methods by precedence order: (setq methods (sort-applicable-methods methods req-args arg-order)) ; 3. Apply method combination: ; Nur STANDARD Methoden-Kombination ist implementiert. ; Aufspalten in einzelne Methoden-Typen: (multiple-value-bind (primary-methods before-methods after-methods around-methods) (partition-method-list methods) (when (null primary-methods) (loop (apply #'no-primary-method gf args)) ) ; Methoden zu einer "effektiven Methode" kombinieren: (labels ((ef-1 (primary-methods before-methods after-methods around-methods) (if (null around-methods) (ef-2 primary-methods before-methods after-methods) (let* ((1method (first around-methods)) (1function (std-method-function 1method))) (if (std-method-wants-next-method-p 1method) (let ((next-ef (ef-1 primary-methods before-methods after-methods (rest around-methods)) )) `(,apply-fun ',1function #'(LAMBDA ,lambdalist ,next-ef) ,@apply-args ) ) `(,apply-fun ',1function ,@apply-args) ) ) ) ) (ef-2 (primary-methods before-methods after-methods) (let ((next-ef (ef-3 primary-methods after-methods))) (if (null before-methods) next-ef `(PROGN ,@(mapcar #'(lambda (method) `(,apply-fun ',(std-method-function method) ,@apply-args ) ) before-methods ; most-specific-first ) ,next-ef ) ) ) ) (ef-3 (primary-methods after-methods) (let ((next-ef (ef-4 primary-methods))) (if (null after-methods) next-ef `(MULTIPLE-VALUE-PROG1 ,next-ef ,@(mapcar #'(lambda (method) `(,apply-fun ',(std-method-function method) ,@apply-args ) ) (reverse after-methods) ; most-specific-last ) ) ) ) ) (ef-4 (primary-methods) (let* ((1method (first primary-methods)) (1function (std-method-function 1method))) (if (std-method-wants-next-method-p 1method) (let ((next-ef-fun (ef-5 (rest primary-methods)))) `(,apply-fun ',1function ,next-ef-fun ,@apply-args) ) `(,apply-fun ',1function ,@apply-args) ) ) ) (ef-5 (primary-methods) (if (null primary-methods) 'NIL ; keine Funktion, NEXT-METHOD-P reagiert darauf `#'(LAMBDA ,lambdalist ,(ef-4 primary-methods)) )) ) (let* ((ef-form (ef-1 primary-methods before-methods after-methods around-methods)) (ef-fun (if (and (eq (car ef-form) apply-fun) (equal (cddr ef-form) apply-args) (null lambdalist-keypart) ) (cadr ef-form) `#'(LAMBDA ,@(if (null opt-vars) `(,(append lambdalist lambdalist-keypart) ,@(if key-vars `((DECLARE (IGNORE ,@key-vars)))) ) `(,lambdalist (APPLY #'(LAMBDA (&OPTIONAL ,@opt-vars ,@lambdalist-keypart) (DECLARE (IGNORE ,@opt-vars ,@key-vars)) ) ,rest-var )) ) ,ef-form ) )) ) ; (eval ef-fun) ; interpretiert ; (eval `(LOCALLY (DECLARE (COMPILE)) ,ef-fun)) ; compiliert (eval `(LET () (DECLARE (COMPILE) (INLINE FUNCALL APPLY)) ,ef-fun)) ) ) ) ) ) CLISP PATCH 2 (DOS): Diff for Fixing STREAM.D (CLISP implementation file) *** stream.d.orig Sat Jan 8 14:45:35 1994 --- stream.d Mon May 9 21:54:16 1994 *************** *** 3437,3444 **** }} # Wenn stdin und stdout beide dasselbe Terminal sind, kvnnen # wir davon ausgehen, da_ der Cursor in Spalte 0 steht. ! if (eq(TheStream(stream)->strm_terminal_isatty,S(equal))) ! { TheStream(stream)->strm_wr_ch_lpos = Fixnum_0; } # Nun fangen wir an, die Zeichen des Buffers zu liefern: goto restart_it; }} --- 3437,3446 ---- }} # Wenn stdin und stdout beide dasselbe Terminal sind, kvnnen # wir davon ausgehen, da_ der Cursor in Spalte 0 steht. ! if (eq(TheStream(*stream_)->strm_terminal_isatty,S(equal))) ! { TheStream(*stream_)->strm_wr_ch_lpos = Fixnum_0; ! TheArray(TheStream(*stream_)->strm_terminal_outbuff)->dims[1] = 0; # Fill-Pointer := 0 ! } # Nun fangen wir an, die Zeichen des Buffers zu liefern: goto restart_it; }}
This file contains information about building Common Music in MCL 2.0 (or higher) Lisp. SYSTEM & HARDWARE REQUIREMENTS _____________________________________________ The system has been tested on a IIci, SE/30, PowerBook 170, Quadra 700, 840av, Centris 650. It should run on all Macintoshes with a hard disk and at least 6 megabytes of RAM and 8 megabytes of disk storage, running Macintosh System Software 6.0.4 or later (including System 7) or A/UX 3.0 (but see the 'Known Problems' section below concerning A/UX 3.0). Here is a system configuration known to run Common Music with midi real time on the Mac: 1) System: System software v7.0 or later 2) Extensions (required): a) Apple Midi Manager extension b) Apple Midi Driver OR OMS Midi Manager Driver with OMS Midi System extension OR Midi Time Piece II driver 3) Memory: 8 MB physical RAM 32 bit addressing on Virtual memory on (12 MB logical RAM) 4) Common Music Memory: with MIDI syntax only: 6144 KB (the preferred image heap with both MIDI and CMN syntaxes: 8192 KB size, as set in the Command-I window) 5) (optional:) MPW C v3.2.1 or higher You must use the official MCL 2.0 release. The MCL 2.1 beta will not work. If you plan to use midi, you must also have installed the Apple Midi Manager and a midi driver (see (2) above) in your system folder. BUILD DIRECTIONS: __________________________________________________________ 1) If you are building Common Music with MIDI syntax, debinhex the already compiled object file midi/mcl-midi.c.o.hqx. Use Stuffit or Binhex. 2) Edit the file build.lisp in the build subdirectory and set the parameters. See the README in that directory for more information. Here is an example of what reasonable parameter settings in build.lisp might look like for MCL. The first two paramertes MUST be changed to reflect the actual Common Music source directory pathname on your machine.) (cm-directory "Disk:CM:") (cm-image-name "Disk:CM:CommonMusic") (clm-directory nil) (cmn-directory nil) (pcl-directory nil) (syntaxes '(:MIDI)) 3) If you want to define logical pathnames for use in Common Music, edit the file pathname-translations.lisp in the common music directory and add whatever pathnames definitions are appropriate for your situation. This step is optional. pathname-translations.lisp already contains two commented out logial pathnames that you might find useful: Home and CM. To use these on your machine, first uncomment them out and then change the portions of their directory definintions before the ":**" 4) Boot up MCL 2.0 and load the build.lisp file. I do this by: (load "HD 160:Lisp:Common Music:Build:build.lisp") but you can also load by selecting "Load" under the Eval menu. By loading build.lisp all the sources will be compiled and loaded. Ignore any warning messages. To save a lisp image with Common Music loaded, first quit and then restart lisp, and then load build.lisp again. The script will save an application after it loads all the binaries (if nothing needed recompiling). USING STELLA: ______________________________________________________________ To start up Stella, use the (stella) function. To resume from error breaks, type Command-. (period) repeatedly until you are back in Stella's top-level loop or select "Return to Top-Level" from the restarts menu item. MIDI USER VARIABLES: _______________________________________________________ *midi-preferences* <default value: '((:apple :oms :mtp) (:a :b))> A list of the known midi drivers and ports, sorted in descending order according to their relative preference. The variable's primary use is to provide midi-open with the means to discriminate between multiple possibilities, whenever it it is called withoput parameters (as done by the midi menu's open item). *midi-multitimbral-channels* <default value: 1> The number of available multitimbral channels. Used by the 'All Notes Off' and 'Test Midi' midi menu items and by the function ff-midi-all-notes-off. Midi data are only output within the range of channels from 0 to (*midi-multitimbral-channels* -1). *midi-flush-timeout* <default value: 3000> The time in milliseconds, for which the queueing mechanism stays in flushing mode, therefore ignoring newly scheduled events. Since flushing is achieved by dumping all pending note-off messages, it is possible for _huge_ amounts of buffered output to leave messages unprocessed. This may lead to hanging notes, if _very_ long notes that are already turned on happen to have their note-off message among this unprocessed chunk of midi data. Therefore, you may want to increase or decrease the value of *midi-flush-timeout*, depending on the overall musical structure you tend to produce. Note, too, that this parameter is semi-global only. That is, any changes to it come into effect only after the next time you open a midi port. KNOWN PROBLEMS: _____________________________________________________________ o When using OMS (Opcode Midi System) you will have to: o set its compatibility in the OMS MIDI Setup dialog to 'Use Apple Midi Manager', and o make your connections to the OMS Midi Driver (or another Midi application) manually using the PatchBay application. o As of version 3.0, A/UX does not support the Apple Midi Manager. Hence you will be unable to perform Midi I/O when running A/UX 3.0. [o For a more technical problem, see the file midi:mcl-midi.lisp.] Bug reports, suggestions, etc. concerning midi (mcl-midi.lisp and mcl-midi.c) are welcome. Please address electronic mail to tkunze@mvax.kgw.tu-berlin.de.
This file contains instructions for building Common Music with real time midi on an SGI. It has been tested in ACL 4.1, 4.2 and Harlrquin LispWorks. The midi realtime port was done by Fernando D. Mato Mira (matomira@di.epfl.ch). ACL 4.1, 4.2: 1) In order to build a lisp image linked to the midi driver you need the following G0 libraries: libmidi_G0.a, libmalloc_G0.a, libC_G0.a, libmpc_G0.a If you use CLM then you should get libaudio_G0.a as well. Some of these libraries may already be on your machine; look under /usr/lib. Otherwise get what you need from SGI support. 2) It is currently impossible to link to libmpc_G0.a from the common music build process, so you must rebuild the base cl image with a static link to this lib. There are two ways to do this. (The first method doesnt work on my machine.) Method 1: Complile <CMDIR>/midi/sgi/dummy.c and then rebuild cl by: sh config <CMDIR>/midi/sgi/dummy.o /usr/lib/libmpc.a Method 2: Edit cl/build Mf and add: -lmpc to the LIBRARIES statement, and: -u taskcreate to the USYMS statement, and then rebuild cl by: sh config 3) Edit <CMDIR>/build/build.lisp and set the build parameters. If your G0 libraries aren't in /usr/lib then search for g0-directory and set it to the proper directory. 4) That's it, now build common music as per normal building instructions. --------------- KNOWN PROBLEMS: 1) On the SGI you must actually start MIDI before attempting to open a port to the driver from lisp. To start MIDI, type: startmidi -d /dev/ttyd1 to the unix shell, assuming you are using MIDI on serial port 1. 2) You might have a midilib.a without actually having the midi development environment installed on your machine. If this is the case, the build.lisp script assumes that you have midi verion 1.0.
This file contains information about using Common Music in Windows 3.1 and Franz ACLPC Common Lisp. 1) Common Music has been tested with the following system configuration: Intel 486 33 MHz with 16 Meg RAM MSDOS 6.0 Windows 3.1 Visual C++ 2.0 Franz CL/PC Common Lisp with all patches loaded. 2) Some file extensions changed to accomodate DOS: Reasonable DOS ------------------- lisp LSP fasl FSL or FAS stella STL midi MID text TXT Because of DOS' max 8 character file name nonsense, many of the source files have odd looking names, but the system can still find everything. While I'm grumbling about filenames, remember that in Lisp the directory character \ must be written \\ inside Lisp strings, so take care when setting the build parameters in build.lisp...a source directory of "C:\CM\" would have to be specified as "C:\\CM\\". 3) The only useful output syntaxs for the 486 at this time are probably MIDI and Csound. 4) To compile the system, edit build\build.lsp and set the build parameters. Then boot lisp and load build.lsp to compile all the sources. Here is an example of what reasonable parameter settings might look like: (cm-directory "c:\\cm\\") (cm-image-name "c:\\cm\\cm.img") (clm-directory nil) (cmn-directory nil) (pcl-directory nil) (syntaxes '(:midi :csound)) 5) To save a final lisp image of Common Music, quit and restart Lisp, then load build.lsp again (you cannot save in the same session you compiled in) This will load all the compiled files and save an image. You will then probably want to make a "program link" in Window's Program Manager so that you can double click on an icon to boot Common Music: a) Go to Window's Program Manager b) Open the Franz CL/PC Application set. c) Select New under File d) Click on Program Item e) Set the Command Line field to something like: c:\allegro\lisp.exe c:\cm\cm.img depending on where your allegro and cm.img are. f) Click on OK. USING STELLA: To start up Stella, use the (stella:stella) function. To resume from error breaks, select Abort in the debugger's window. MIDI REAL TIME: The midi connection was implemented by Joe Fosco, fosco@ils.nwu.edu. Its .dll is supplied so you dont have to compile anything. The connection currently supports a maximum of 4000 future messages. KNOWN PROBLEMS: 1) Midi reading currently does't work because of a bug in ACLPC's foreign function interface. Hopefully this will work some time in the future. 2) The MIDI port must be specied as 0, ie (midi-open :port 0) 3) Only 4000 future messages can be written. 4) Some demo script files refer to .midi file extensions and midi port :A. Change these to .MID and 0 before playing around with the scripts. 5) Simple string output to the terminal is incredibly slow in ACLPC. 6) Pasting to the Listener is sometimes problematic.
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.