;; beat-alternate construct ;; Alternates between sources on each beat ;; ;; Usage in recipe: ;; (construct beat-alternate :path "constructs/beat-alternate.sexp") ;; (def segments (beat-alternate beats-data (list video-a video-b))) (define-construct beat-alternate :params ( (analysis :type any :desc "Analysis data with :times") (sources :type any :desc "List of source nodes to alternate between") ) ;; Body: map over time pairs, return segment descriptors (let [times (get analysis :times) pairs (zip-pairs (cons 0 times)) n-sources (len sources)] (map-indexed (fn [i pair] (dict :source (nth sources (mod i n-sources)) :start (first pair) :end (nth pair 1) :effects (list))) pairs)))