[CM] Parsing MIDI files with CM

Orm Finnendahl finnendahl@folkwang-hochschule.de
Fri, 17 Mar 2006 08:49:53 +0100

Am 16. März 2006, 19:10 Uhr (-0500) schrieb Doug Geers:
> I'm sorry if this is another newbie question, but I'm looking for help
> parsing existing MIDI files into a format that is easier for CM to
> handle, such as lists of (pitch velocity), or, even better, (pitch
> velocity duration) for all notes per channel.

It used to be possible with map-subobjects, using the :type keyword,
but this function seems to have disappeared although still somewhat
documented in the dictionary.

Try this instead:

(let ((result nil)
      (file "/tmp/test.midi"))
       #'(lambda (x) 
	   (when (eq 'MIDI (object-name x))
	     (push (list (sv x time) 
	     	   	 (sv x keynum) 
	     		 (sv x amplitude) 
	     		 (sv x duration)) nums)))
       (import-events file))
       (nreverse result))

You can adopt to your needs if you want to filter channels, remap etc...