[CM] With-sound question
cristopher pierson ewing
cewing at u.washington.edu
Mon Oct 21 17:35:13 PDT 2002
I have a macro that writes calls to an instrument:
(write-ins my-instrument-gen)
> (my-instrument 0 4 440) ;;this might ba an simp-type instrument that
;; implements a simple oscilator.
If i place a call to this macro in the spot where a normal instrument call
would be in a with-sound:
(with-sound () (write-ins my-instrument-gen))
The results are rather odd. No error is returned, but the output
soundifle is only 1 sample in length.
I tried running a macroexpand on this with-sound call, and the results
seem to indicate that my macro is never expanded. I've included the
results of that macroexpansion below.
Does with-sound support the use of macros inside itself? Can it expand a
macro properly before it executes it's own code, or do I need to come up
with a wrapper that expands the macro first and then inserts the results
into the with-sound.
EEEEEEEEEEKKKKK!!
********************************
the output of (macroexpand '(with-sound () (write-ins joe)),
where "joe" is the name of an instrument I have created:
(LET ((CLM::*VERBOSE* T)
(CLM::*OFFSET* 0)
(CLM::*INTERRUPTED* 0)
(CLM::*STATISTICS* NIL)
(CLM::*CLM-SCALED-AMP* NIL)
(CLM::*NOTEHOOK* NIL)
(CLM::*FORCE-RECOMPUTATION* NIL)
(CLM::*CLM-WITH-SOUND-BODY* (AND NIL '((WRITE-INS JOE))))
(CLM::*CHANNELS* 1)
(*SRATE* 44100)
(CLM::*HEADER-TYPE* 56)
(CLM::*DATA-FORMAT* 1)
(CLM::*CLIPPED* T)
(CLM::*EXPLODE* NIL)
(CLM::*EXPLODE-LIST* NIL))
(CLM-INITIALIZE-LINKS)
(SETF *CLM-INS* NIL)
(LET* ((CLM::OLD-OUTPUT *OUTPUT*) (CLM::OLD-REVERB *REVERB*))
(IF CLM::OLD-OUTPUT (CLOSE-OUTPUT CLM::OLD-OUTPUT))
(IF CLM::OLD-REVERB (CLOSE-OUTPUT CLM::OLD-REVERB))
(UNWIND-PROTECT
(LET* ((CLM::OUT-FILE
(OR *OPEN-INPUT-EXPLICIT-OUTPUT*
(NAMESTRING (FULL-MERGE-PATHNAMES "~/SND/test.aiff"
*CLM-FILE-NAME*))))
(CLM::*CLM-WITH-SOUND-DEPTH* (1+
CLM::*CLM-WITH-SOUND-DEPTH*))
(CLM::OUR-SRATE 44100)
(CLM::OUR-TYPE 56)
(CLM::OUR-FORMAT
(LET ((CLM::FIRST-GUESS 1))
(IF (AND (= CLM::FIRST-GUESS MUS-BSHORT)
(= CLM::OUR-TYPE MUS-RIFF))
MUS-LSHORT
(IF (AND (= CLM::FIRST-GUESS MUS-BINT)
(= CLM::OUR-TYPE MUS-RIFF))
MUS-LINT
CLM::FIRST-GUESS))))
(CLM::OUR-REVERB (OR NIL 'NIL))
(CLM::OUR-REVERB-DATA (OR NIL 'NIL))
(CLM::REVERB-FILENAME
(CONCATENATE 'STRING
(SUBSEQ CLM::OUT-FILE 0
(- (LENGTH CLM::OUT-FILE)
(LENGTH
(PATHNAME-TYPE CLM::OUT-FILE))))
"reverb"))
(CLM::REVF
(IF (OR NIL CLM::OUR-REVERB)
(OR NIL *OPEN-INPUT-EXPLICIT-REVERB*
CLM::REVERB-FILENAME)))
(CLM::*WS-REVERB-FILE* CLM::REVF))
(IF (AND CLM::OLD-OUTPUT
(STRING= CLM::OUT-FILE (CLM::IO-NAME CLM::OLD-OUTPUT)))
(WARN "we're about to overwrite ~A..." CLM::OUT-FILE))
(SETF CLM::OUT-FILE
(CLM::BEGIN-WITH-SOUND CLM::OUR-SRATE 1 NIL CLM::OUT-FILE
CLM::REVF NIL NIL 1 CLM::OUR-TYPE
CLM::OUR-FORMAT T NIL
(CLM::MAKE-DEFAULT-COMMENT
NIL
NIL
NIL)))
(TAGBODY (RESTART-CASE (CATCH :FINISH (WRITE-INS JOE))
(NIL NIL :REPORT "close files and return to
top-level."
(PROGN (CLM-RESET) (GO CLM::ALL-DONE)))
(NIL NIL :REPORT "jump past remaining notes."
(GO CLM::NORMAL-FINISH)))
CLM::NORMAL-FINISH (SETF CLM::OUT-FILE
(CLM::END-WITH-SOUND NIL CLM::OUT-FILE
CLM::REVF NIL
CLM::OUR-TYPE
CLM::OUR-FORMAT
CLM::OUR-REVERB
1.0
CLM::OUR-REVERB-DATA
1 T NIL))
CLM::ALL-DONE)
(IF CLM::OLD-OUTPUT
(SETF *OUTPUT* (REOPEN-OUTPUT (CLM::IO-NAME
CLM::OLD-OUTPUT))))
(IF CLM::OLD-REVERB
(SETF *REVERB* (REOPEN-OUTPUT (CLM::IO-NAME
CLM::OLD-REVERB)))
(SETF *REVERB* NIL))
CLM::OUT-FILE)
(PROGN (SETF *CLM-INS* NIL) (SETF CLM::*FORCE-RECOMPUTATION* NIL)
(CLM::CLM-CHECK-FOR-RESET)))))
********************************
Thanks for info,
Cris
********************************
Cris Ewing
CARTAH Assistant
University of Washington
Home Phone: (206) 365-3413
E-mail: cewing at u.washington.edu
*******************************
More information about the Cmdist
mailing list