On Sun, 2007-06-03 at 08:11 -0700, David Kamp wrote: > Hi. > I am trying desperately to import midi events to lists but all examples in > CM dictionary and the various ways of doing it mentioned in mails on this > list (as well as the one quoted below) dont seem to work for me. I am > working in guile and all i get is an empty list. Does this work differently > in guile than in regular lisp?
Haven't done serious stuff in Guile for quite a while but a quick test here seems to show that everything works fine ... guile> (version ) "1.8.1" guile> (define midi-stream (import-events "/home/ralf/RedCap.mid")) guile> midi-stream #<seq "RedCap-track-0"> guile> (map-objects (lambda (n) (format true "Event ~A\n" n)) midi-stream) Event #i(midi-text-event time 0 type 3 text "RedCap.ume via MM/1 OS-9 UltiMusE-K.") Event #i(midi-text-event time 0 type 1 text "Simple circus organ march from April 2000") Event #i(midi-text-event time 0 type 1 text "March of the Red-Capped Penguins") Event #i(midi-text-event time 0 type 1 text "First two strains finished 10/8/2001") Event #i(midi-text-event time 0 type 1 text "Dedicated to the LINUX community.") Event #i(midi-text-event time 0 type 1 text "Or sing to \"Bomb the Taliban\" :-)") Event #i(midi-text-event time 0 type 4 text "Patch085=Voice Lead") Event #i(midi-text-event time 0 type 4 text "Patch057=Trombone") Event #i(midi-text-event time 0 type 4 text "Patch082=Calliope") Event #i(midi-text-event time 0 type 4 text "Patch063=Syn Brass Mello") Event #i(midi-text-event time 0 type 4 text "Patch073=Flute") Event #i(midi-text-event time 0 type 4 text "Patch062=Syn Brass Brite") Event #i(midi-text-event time 0 type 4 text "Patch071=Clarinet") Event #i(midi-text-event time 0 type 4 text "Patch058=Tuba") Event #i(midi-key-signature time 0 key 255 mode 0) Event #i(midi-time-signature time 0 numerator 2 denominator 4 clocks 24 32nds 8) Event #i(midi-tempo-change time 0 usecs 545454) Event #i(midi-program-change time 0 channel 0 program 62) Event #i(midi-program-change time 0 channel 3 program 63) Event #i(midi-program-change time 0 channel 2 program 57) Event #i(midi-program-change time 0 channel 4 program 58) Event #i(midi-program-change time 0 channel 1 program 82) Event #i(midi-program-change time 1.090908 channel 1 program 82) Event #i(midi time 1.090908 keynum 81 duration 1.29545325 amplitude 0.779527559055118 channel 0) Event #i(midi time 1.090908 keynum 72 duration 1.29545325 amplitude 0.779527559055118 channel 0) Event #i(midi time 1.090908 keynum 65 duration 0.74999925 amplitude 0.779527559055118 channel 2) Event #i(midi time 1.090908 keynum 53 duration 0.272727 amplitude 0.669291338582677 channel 3) .... > I want to collect keynums durations and amplitudes of a midifile in a list, > modify them and spit them back out, just like you wrote below. My first guess: you somehow broke the cristals in your warp-speed-transmogrifier :-) First rule of question posting to a ML: show us what you've done so far and tell us WHAT WENT WRONG. > thanks a lot. > > > > Rick Taube wrote: > > > > > > to collect lists of things, you map the objects rather than a slot and > > return what you want: > > > > (fold-objects (lambda (x l) (cons (list (sv x :time) (sv x :keynum)) > > l)) s1 '() :class 'midi) > > > > => ((18.0 77) (17.875 77) (17.75 77) (17.75 89) (17.625 75) (17.625 > > 86) ...) Note: this code will only work for sequences that contain midi note events - calling slot-value :keynum on a <midi-text-event> will throw yoiu into guile' debugger. HTH Ralf Mattes > > > _______________________________________________ Cmdist mailing list [email protected] http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist
