[CM] CMN : glissando+final-note

Bill Schottstaedt bil@ccrma.Stanford.EDU
Fri, 28 Jun 2002 04:49:45 -0700

> At the end of a glissando-line I wish to put  a sort
> of auxiliary note (without duration). Is it possible ?

You could make a version of auxiliary-note that uses the
outer note's x1 value, rather than x0 -- i.e. change two
characters in auxiliary-note: (code reformatted to try
to keep the mailer from inserting bogus <cr>s)

(defun auxiliary-note-at-end (&rest objects)
  (let ((nt (apply #'note objects)))
     :argument nt
     #'(lambda (owner note)
	    :name :auxiliary-note
	    :source (format nil "(auxiliary-note ~A)" note)
	    #'(lambda (mark outer-note score &optional justifying)
		(declare (ignore mark))
		(let* ((grace-scale
			(if (and (matrix note) (not (identity-matrix-p note)))
			    (first (matrix note))
		       (inverse-scale (/ 1.0 grace-scale))
		       (old-separation *staff-line-separation*))
		  (if (not justifying)
			(setf *staff-line-separation* (* inverse-scale old-separation))
			 score grace-scale
			 (* (+ (box-x1 outer-note) ; x1 here
			       (vis-dx outer-note))
			    (scr-size score))
			 (* (staff-y0 outer-note) (scr-size score))
			 (setf (staff-y0 note) 0.0)
			 (setf (line note) (place-of-note-given-note outer-note note))
			 (setf (box-y0 note) (* (line note) *staff-line-separation*))
			 (setf (center note) .143)
			 ;; can this be a chord? if so, see grace note centering case.
			 (setf (box-x0 note) 0)
			 (display note nil score))
			(setf *staff-line-separation* old-separation))
		    (moveto score (+ (box-x1 outer-note) ; and here
				     (vis-dx outer-note)
				     (vis-dx note))

(cmn (size 24) (glissando-thickness 0.03)
   (staff bar (treble (text "sul E" (font-size 10) (dy 1.25) ))

	(e6   q begin-glissando)
	(gs5  e end-glissando begin-glissando)
	(c6   e end-glissando begin-glissando)
	(e6   h. end-glissando
	      (glissando-to fs5)
	      (auxiliary-note-at-end fs5 no-stem))
    ); end-staff
); end-cmn