Μεγάλη δραστηριότητα τις τελευταίες μέρες παρατηρείται στη κοινότητα του TOPLAP 1 σχετικά το TOPLAP Clock Protocol 2. Η συγκεκριμένη προσπάθεια έχει ώς σκοπό να βρεθεί ένα πρωτόκολλο για διανομή συγχρονισμένου ορολόγιου (clock synchronization) και μουσικού μέτρου (musical metre). Πιο συγκεκριμένα η κοινότητα του TOPLAP έχει ως σκοπό να παράξει έναν μηχανισμό οποίος θα μοιράζεται μεταξύ των μελών για να συγχρονίζονται χρησιμοποιόντας ο καθένας την αρχιτεκτονική του.

H ομάδα ανάπτυξης του περιβάλλοντος Extempore 3 έχει δοκιμάσει το παραπάνω πρωτόκολλο και παρακολουθεί την ανάπτυξη του. Ο κώδικας του παραδείγματος είναι ο παρακάτω:

;;
;; metronome test for topclock.
;;
;; run this on several machines at once.
;;

(sys:load "libs/core/topclock.xtm")
(sys:load "libs/core/instruments.xtm")

(bind-func dsp:DSP 1000000
  (let ((t 0.0))
    (lambda (in time chan dat)
      (if (= t 0.0) (set! t time))
      (if (< chan 1.5)
          (+ (fmsynth in time chan dat)
             0.0)
          0.0))))

(dsp:set! dsp)

;; turn off all effects
(fmsynth_fx.wet .0)
(fmsynth_fx.dfb .0)

;; any client can send tempo/cycle changes
(define test
  (lambda (beat dur)
    (if (and (= (modulo beat 4) 0)
             (> (random) .8))
        (topclock-bpm (*metro* beat) (random 80 280) beat (random '(6 5 4 3))))
    ;; 'pos returns the metric position in the current cycle
    (println 'beat: (*metro* 'pos beat))
    (if (= (*metro* 'pos beat) 0)
        (play fmsynth (random '(63 65 67 70 72)) 80 .1)
        (play fmsynth 60 80 .1))
    (callback (*metro* (+ beat (* .5 dur))) 'test (+ beat dur) dur)))

(define teststart
  (lambda ()
    (test (*metro* 'get-beat 4) 1)))

;; give topclock a few seconds to get sync'd
(callback (+ (now) (* *second* 10)) 'teststart)
blog comments powered by Disqus