I'm looking for a method/function which changes the velocity only for notes that are repeating.
In other words, if I have a sequence like this:
'(c4 eb4 g4 ab4 ab4 ab4 d4 eb4) I would like to be able to create a crescendo/decrescendo or set a custom velocity for just the Ab notes.
In the past I've customised a Pattern Matching function from Stephane to change the velocity for specific note lengths:
(defun velocity-map-omn (map omn &key (otherwise '-)) (do-verbose ("velocity-map-omn") (let ((plist (disassemble-omn omn))) (setf (getf plist :velocity) (pattern-map map (getf plist :length) :otherwise otherwise :swallow t)) (apply 'make-omn plist)))) And I think this should be very close to what I want, however, I have no idea how to tell OM to process repeating notes only.
Is there anyone who already has a function like this or can steer me in the right direction? Hope this makes sense, any help is very welcome!
i'm a excited beginner with OM!
Just exploring and modifying the turotials.
What would be a good approach to sort the notes which are generated from the snippet below to, say, a scale.
In other words: The outoot below is chromatic. How can i turn it into a scale, eg. d-phrygian)
(setf size 60) (setf vector (gen-sine size 1 '(0.5 0.4 0.3 0.6) :modulation (gen-sine size 1 0.3 :phase 180))) (setf pitchvec (vector-to-pitch '(g1 g6) vector))
Revising some older code of my I noticed that the function length-divide changed its behaviour somewhat and became more likely to cause an error.
In a previous version, where the arguments count and divide where given separately, it was possible to set the count to some very high number, say, 1000, simply to mean that all notes the function can split (depending on its other arguments) will be split.
Meanwhile, the function have been revised to introduce control over intervals (thank you 🙂), but since then it seems it is not possible anymore to set an arbitrarily high count value anymore. For example, the following code now results in an error. I would prefer the previous behaviour, if only because it is more forgiving and stable.
(length-divide '(1000 2) '(q ab3 num1+leg c4 leg e ab3 leg g3 leg ab3 num1+leg c4 leg)) Error: The value ab3 is not of the expected type sequence.
In case it helps: my debugger tells me the functions gen-repeat and then maybe-section are called (perhaps within a nested function of length-divide* ?) with an argument sequence bound to ab3 (i.e. a plain pitch), and a call (length ab3) then causes this error.