[CM] mark-explode modifications

cristopher pierson ewing cewing@u.washington.edu
Wed, 23 Jun 2004 12:19:35 -0700 (PDT)

So here's my stab at the facility of naming exploded sounds after the
original sound they were created from:

(define (find-char string char)
	(do ((position 0)
		 (i 0 (+ i 1)))
		((= i (string-length string)) position)
	  (if (char=? char (string-ref string i))
	  	(set! position i))))

(define (trim-name name)
	(let ((start 0)
		  (end (find-char name #\.)))
	  (substring name start end)))

;;; -------- mark-explode
;;; write out each section of a file between marks as a separate file

(define (mark-explode snd)
  "(mark-explode) splits a sound into a bunch of sounds based on mark
  (let ((start 0)
	(file-ctr 0)
	(name (trim-name (short-file-name snd))))
     (lambda (mark)
       (let ((len (- (mark-sample mark) start)))
	 (array->file (format #f "~A-~D.aif" name file-ctr)
		      (channel->vct start len)
		      len (srate) 1)
	 (set! file-ctr (1+ file-ctr))
	 (set! start (mark-sample mark))))
     (caar (marks)))))

I'll try later to work on the problem of choosing an output file type
according to the input file type.  Can one set (default-output-type) from
inside a let statement so that it returns to normal after the let closes
and normal scope is returned?  I'll try to find out.


Cris Ewing
CME and Telehealth Web Services
University of Washington
School of Medicine
Work Phone: (206) 685-9116
Home Phone: (206) 365-3413
E-mail: cewing@u.washington.edu