dont think you are crazy or stupid, just that doin destructive
operations isnt a good idea unless you really understand what you are
doing!
that said, you can use (shuffle ) orr whatever on subobjects to
scramble them, but if you want to put them back in the seq then you
will need to sort them first:
(defparameter mess (shuffle (subobjects myseq)))
...
(new seq :subobjects (sort #'< mess :key #'object-time))
alternately you can simply pass your unsorted list i to events
because events will schedule, or sort, the objects you pass it:
(events mess ...)
On Apr 10, 2007, at 7:22 PM, Landspeedrecord wrote:
So you don't think I am crazy/stupid I suppose I should elaborate
more.
Let's say a Seq has 10 midi notes in it. Each note is merely an
instance of the class "midi". Each note has slots for time, keynum,
duration, amp. My view of the seq is a like a jar of marbles. When
the seq is called by some function (list-objects or whatever), that
function then orders the marbles based on it's time slot. Or
alternately, the ordering happens whenever something happens to any
time slot value in a seq, like when a new midi note is inserted at the
beginning of the seq. Then all the marbles are rearranged and the seq
is resaved to be called upon later.
The point being that the ordering has to happen at some time based on
the time slot value and if so, then one should be able to rearrange
the time values.
Sorry for all the verbage, I just don't want anyone thinking that I am
trying to make time reorder. That is impossible. I am trying to make
the note's time values reorder which is a different thing.
Please let me know if I have this all wrong conceptually.
Thanks!
On 4/10/07, Landspeedrecord <[EMAIL PROTECTED]> wrote:
Thanks Rick! Using fold-objects in conjunction with cons would have
taken me weeks to figure out so I appreciate your help.
However, what I want to do is exactly what you are saying I
shouldn't.
The only thing I want to shuflle/reorder is the midi time. All the
other midi information (keynum, duration, amp, chan) is supposed to
stay together so that the notes remain the same but just come out
in a
different temporal order. Why do I want to do this? Because I am
trying to manipulate midi files that correspond to .rex files
(chopped
up rhythms produced by propellerheads recycle). If I can rearrange
the
midi file I can come up with endless variations of the looped audio
file.
I am confused. I thought the midi "time" value was just another
slot/keyword value of the MIDI class (i.e. the same as keynum or
duration). I figured that it was only until the seq was put into the
scheduler that the midi time became "cemented" in. Do I have it all
wrong?
On 4/9/07, Rick Taube <[EMAIL PROTECTED]> wrote:
> you shouldnt "rearrange the time values" of the seq's objects --
the
> purpose of a seq is maintain a time-ordered list of events!
>
> assuming you want to scramble keynumbers or something like that you
> could do this
>
> ;; create a seq of midis
>
> (defparameter myseq
> (new seq :subobjects (loop for i to 100
> collect (new midi :time i :keynum i))))
>
> ;; look at the first ten
>
> (list-objects myseq :end 10)
>
> 0. #i(midi time 0 keynum 0 duration 0.5 amplitude 64 channel 0)
> 1. #i(midi time 1 keynum 1 duration 0.5 amplitude 64 channel 0)
> 2. #i(midi time 2 keynum 2 duration 0.5 amplitude 64 channel 0)
> 3. #i(midi time 3 keynum 3 duration 0.5 amplitude 64 channel 0)
> 4. #i(midi time 4 keynum 4 duration 0.5 amplitude 64 channel 0)
> 5. #i(midi time 5 keynum 5 duration 0.5 amplitude 64 channel 0)
> 6. #i(midi time 6 keynum 6 duration 0.5 amplitude 64 channel 0)
> 7. #i(midi time 7 keynum 7 duration 0.5 amplitude 64 channel 0)
> 8. #i(midi time 8 keynum 8 duration 0.5 amplitude 64 channel 0)
> 9. #i(midi time 9 keynum 9 duration 0.5 amplitude 64 channel 0)
>
> ;; gather the keynumbers
>
> (defparameter seqkeys
> (fold-objects #'cons myseq '() :slot 'keynum))
>
> ;; now shuffle the keynums and put them back
>
> (let ((mixedup (shuffle seqkeys)))
> (loop for m in (subobjects myseq)
> for k in mixedup
> do (sv m :keynum k))
> )
>
> ;; look at them again
>
> (list-objects myseq :end 10)
>
> 0. #i(midi time 0 keynum 60 duration 0.5 amplitude 64 channel 0)
> 1. #i(midi time 1 keynum 68 duration 0.5 amplitude 64 channel 0)
> 2. #i(midi time 2 keynum 15 duration 0.5 amplitude 64 channel 0)
> 3. #i(midi time 3 keynum 51 duration 0.5 amplitude 64 channel 0)
> 4. #i(midi time 4 keynum 29 duration 0.5 amplitude 64 channel 0)
> 5. #i(midi time 5 keynum 52 duration 0.5 amplitude 64 channel 0)
> 6. #i(midi time 6 keynum 35 duration 0.5 amplitude 64 channel 0)
> 7. #i(midi time 7 keynum 74 duration 0.5 amplitude 64 channel 0)
> 8. #i(midi time 8 keynum 25 duration 0.5 amplitude 64 channel 0)
> 9. #i(midi time 9 keynum 16 duration 0.5 amplitude 64 channel 0)
> CM>
>
>
>
>
>
>
> On Apr 9, 2007, at 6:52 PM, Landspeedrecord wrote:
>
> > I having been trying to rearrange the time values of a MIDI
file, i.e.
> > rearrange the ordering of the notes while keeping all the
other MIDI
> > information intact. I can load the MIDI into a seq object but
from
> > there I hit a brick wall.
>
_______________________________________________
Cmdist mailing list
[email protected]
http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist