[Fluxus] MIDI clock
Greg
gowiththeflow at free.fr
Sun Dec 12 07:55:20 PST 2010
OK guys, I've implemented (midi-set-signature upper lower),
(midi-clocks-per-beat) and (midi-beats-per-bar).
I see no practical use for (midi-signature)...
Here's an example script. A little yellow ball will perform a circular
revolution in exactly two bars, whatever the time signature:
----------------------8<----------------------
(define (animate)
(let* (
(pos (midi-position))
(bar (vector-ref pos 0))
(beat (vector-ref pos 1))
(clock (vector-ref pos 2))
; duration of a bar in clocks
(bar-in-clocks (* (midi-beats-per-bar) (midi-clocks-per-beat)))
; period of our animation = 2 bars
; compute how many clocks will be received during 2 bars
(period-in-clocks (* 2 bar-in-clocks))
; compute how many clocks have been received since the
beginning of the animation cycle
(position-in-period (+ (* (modulo bar 2)
(midi-beats-per-bar) (midi-clocks-per-beat)) (* beat
(midi-clocks-per-beat)) clock))
; convert to a real between 0.0 and 1.0
; multiply by 1.0 to get a real result and not a fraction
(animdelta (/ (* 1.0 position-in-period) (* 1.0
period-in-clocks)))
)
(draw-sphere)
(with-state
(rotate (vector 0 0 (* 360 animdelta)))
(translate (vector 5 0 0))
(colour (vector 1 1 0))
(draw-sphere))))
(every-frame (animate))
----------------------8<----------------------
Goodbye magic numbers!
As I now have access to git, thanks to Dave, you'll soon be able to toy
with the new functions :)
--
G.
More information about the Fluxus
mailing list