Add instanced 8625 stage with independent audio controls
This commit is contained in:
parent
a611b86c0d
commit
ffb95543a3
15 changed files with 507 additions and 48 deletions
|
|
@ -222,8 +222,18 @@
|
|||
(is (seq (ch/problems {:animated? true :keys {0 1}
|
||||
:dense {:store "x" :offset 0 :stride 1 :frames 1}}))
|
||||
"one shape at a time")
|
||||
(is (seq (ch/problems {:animated? true :interp :linear :keys {0 1}}))
|
||||
"only :hold is implemented"))
|
||||
(is (empty? (ch/problems (ch/keyed {0 0.0, 10 1.0} :linear)))
|
||||
"scalar controls can interpolate")
|
||||
(is (seq (ch/problems (ch/keyed {0 :a, 10 :b} :linear)))
|
||||
"a cut or tone cannot interpolate"))
|
||||
|
||||
(deftest numeric-channels-can-ramp-between-keys
|
||||
(let [c (ch/keyed {0 0.0, 10 1.0} :linear)
|
||||
cursor (ch/cursor c)]
|
||||
(is (= [0.0 0.5 1.0 1.0]
|
||||
(mapv #(ch/value-at c %) [0 5 10 15])))
|
||||
(is (= [0.0 0.5 1.0 0.2]
|
||||
(mapv #(ch/sample! cursor %) [0 5 10 2])))))
|
||||
|
||||
(deftest component-reads-vectors-and-typed-arrays-the-same-way
|
||||
(is (= 3 (ch/component [3 4] 0)))
|
||||
|
|
|
|||
57
frontend/test/arthur/domain/symbol_test.cljs
Normal file
57
frontend/test/arthur/domain/symbol_test.cljs
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
(ns arthur.domain.symbol-test
|
||||
(:require [cljs.test :refer [deftest is]]
|
||||
[arthur.demo.stage :as stage]
|
||||
[arthur.domain.channel :as ch]
|
||||
[arthur.domain.clip :as clip]
|
||||
[arthur.domain.leaf :as leaf]))
|
||||
|
||||
(def source
|
||||
{:name "source" :fps 30 :width 320 :height 200
|
||||
:timelines
|
||||
{:main {:id :main :frames 4
|
||||
:nodes {:root {:id :root :kind :group :z "a1"}
|
||||
:mark {:id :mark :kind :rect :parent :root :z "a1"
|
||||
:channels {[:xform :pos] (ch/keyed {0 [0 0] 1 [10 0]
|
||||
2 [20 0] 3 [30 0]})
|
||||
[:geom :size] (ch/framed 4)
|
||||
[:style :color] (ch/framed :brow)}}}}}})
|
||||
|
||||
(deftest two-instances-own-their-frame-and-placement
|
||||
(let [document
|
||||
(-> source
|
||||
(assoc-in [:timelines :main]
|
||||
{:id :main :frames 6
|
||||
:nodes {:root {:id :root :kind :group :z "a1"}
|
||||
:left {:id :left :kind :symbol :of :sym/test
|
||||
:parent :root :z "a1" :span [0 4]
|
||||
:channels {[:xform :pos] (ch/framed [100 50])}}
|
||||
:right {:id :right :kind :symbol :of :sym/test
|
||||
:parent :root :z "a2" :span [2 6]
|
||||
:time {:mode :map :at 2 :in 0 :rate 1}
|
||||
:channels {[:xform :pos] (ch/framed [120 50])}}}})
|
||||
(assoc-in [:timelines :sym/test]
|
||||
(assoc (get-in source [:timelines :main]) :id :sym/test)))
|
||||
resolve (clip/resolver document nil)
|
||||
at (fn [f] (mapv (juxt :node :cx) (resolve f)))]
|
||||
(is (empty? (clip/problems document)))
|
||||
(is (= [[[:left :mark] 110]] (at 1)))
|
||||
(is (= [[[:left :mark] 120] [[:right :mark] 120]] (at 2)))
|
||||
(is (= [[[:right :mark] 150]] (at 5)))
|
||||
(is (= document (leaf/clip "stage" (leaf/leaves "stage" document))))))
|
||||
|
||||
(deftest stage-fixture-keeps-source-as-one-symbol
|
||||
(let [document (stage/compose source)]
|
||||
(is (empty? (clip/problems document)))
|
||||
(is (= #{:main :sym/face-8625} (set (keys (:timelines document)))))
|
||||
(is (= :sym/face-8625 (get-in document [:timelines :main :nodes :left :of])))
|
||||
(is (= :sym/face-8625 (get-in document [:timelines :main :nodes :right :of])))
|
||||
(is (= [48 280] (get-in document [:timelines :main :nodes :right :span])))
|
||||
(is (= :right (get-in document [:timelines :main :nodes :voice-right :linked-to])))
|
||||
(is (= [48 260] (get-in document [:timelines :main :nodes :voice-right :span])))
|
||||
(is (= 0.5 (ch/value-at
|
||||
(get-in document [:timelines :main :nodes :voice-right
|
||||
:channels [:audio :gain]]) 54)))
|
||||
(is (< -0.8 (ch/value-at
|
||||
(get-in document [:timelines :main :nodes :voice-right
|
||||
:channels [:audio :pan]]) 110) 0.7))
|
||||
(is (= document (leaf/clip "stage" (leaf/leaves "stage" document))))))
|
||||
Loading…
Add table
Add a link
Reference in a new issue