Files
@ 37cbb245d93c
Branch filter:
Location: light9/www/2014-design-notes.txt
37cbb245d93c
7.4 KiB
text/plain
fix tests. add logging, some mypy types.
Ignore-this: 61371f65438a4e77f70d21cc5d5193bf
Ignore-this: 61371f65438a4e77f70d21cc5d5193bf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 | curvecalc, with all curves:
music /\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\/
music_smooth /\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\//\/\/
slider1 (song02)
slider2 (end_scene)
slider3 (cyc)
pad1x (effect_strobe)
pad1y (effect_strobe[rate])
pad1p
-----------------------------------------------------------------------------------------------------------
curvedb has access to the curves and can write them. temporary edit
state like the selection and view area is held in the gui. curvedb
ensures that points have increasing and unique times. api:
observable visibleCurves(song), can change later
getRange(curve, t1, t2) may also take resolution. this is for gui to
draw and for effect preview to show off an effect. also returns
markers
liveInputPoint(curve, t, value) a controller has asked for this value. wipe out old points as appropriate.
addPoint(curve, t, value) a gui has added a point. this may cause a new curve to start existing.
movePoint(curve, t, newT, newValue) gui has tried to edit a point. we might not allow it.
transformPoints(curve, ts, scale, newStart, newEnd, newWidth) multi-point operations. input point list by their times.
observable curveUpdated(curve) curve or marker data changed. This might return a version number for the curve data.
-----------------------------------------------------------------------------------------------------------
curveedit draws the curves and manages selection. It draws current
playback time. Song->curves mapping comes from rdfdb. current playback probably does too.
state:
song
viewRange times
currentCurve: for highlighting on gui or quneo when you edit it
selection: points on curves, but do they have to get updated
constantly as you drag them around? could use pt indices but
that might get awkward at other resolutions
graphs (each graph may have multiple curves in it)
api:
selectPoint(curve, t)
startRangeSelect(curve, t)
dragRangeSelect(curve, t)
endRangeSelect(curve, t)
edit markers too.
mute happens in here? maybe i never used it.
rows never scroll out of view; they can just get very tiny. maybe
support multiple curves in the same row, like for one effect.
rows appear when you use them in the song.
from a curve you need to see what effects use it. just a single intensity on a single sub is a common case.
-----------------------------------------------------------------------------------------------------------
data model:
show
controlMapping (describes how this control should initially behave in a song)
[
control: pad5
effect: [
type: chase
code: out ???? don't know curves yet
]
]
song1
controlMapping
[
control: pad5
curve: curve1
]
row1 (only used for display)
curve1
curve1
points
effect1
type: sub
code: out = sub('stageleft', intensity=curve1)
effect2
type: sub
code: out = sub('stageright', intensity=curve2)
effect3
type: chase
code: out = ... (curve3)
-----------------------------------------------------------------------------------------------------------
many controls are mapped to standard subs or effects.
using an unmapped slider gives you a default (or random) new sub, to be changed later to the right look.
touching anything should accent its row in curvecalc; touching a CC row shuold light up its pad on quneo.
touching anything starts recording it. when you let go, points stop
being made, and they might connect to what was there before. when
you're holding a pad down at all, existing points you pass over get
deleted. sliders have this too, but instead of reading pad pressure,
they have a fixed amount of time that they erase after each value
change (and no slider output is attempted).
CC expressions are drawn in their rows. most exprs are no
row structure (settings are per-song):
input controller name (slider1 or pad1x)
points: ...
connect_to_input: song01.intensity
or
connect_to_input: chase.offset
or
connect_to_input: chase.speed
you can connect to multiple inputs.
a thing to be able to do quickly:
have
slider1 -> song02.intensity: ___/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\___
want to add in some silhouette, so we need this new mapped curve row:
slider1 -> song02.intensity: ___/~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\___
slider8 -> silhouette0.intens: __________________________________________
then i animate to this:
slider1 -> song02.intensity: ___/~~~~~~~~~~~\___/~~~~~~~~~~~~~~~~~~~\___
slider8 -> silhouette0.intens: _____________/~~~\_______________________
to add that row, i went to CC, 'add row', picked from not-yet-used
input controls, picked from all the effect types (including subs),
made a new instance of silhouette, and made a new row that's all
zeros.
Input picker:
+------------------------------------------------------------+
| Existing nodes: |
| song02 |
| cyc |
| blink0 |
| + intensity |
| + term1 |
| + term2 |
| |
| Make new node (and connect to its 'intensity' input): |
| blink |
| song03 |
| song04 |
+------------------------------------------------------------+
-----------------------------------------------------------------------------------------------------------
separate effect program:
goals:
visualize effects, including time-based ones
make new expression effects
state:
current effect being shown (follows the last-touched effect in curvecalc, or you can pick one)
vis of a chase effect (readonly):
beat | | | | | | | | |
chan1 __/~~\__/~~\__/~~\__/~~\__/~~\__/~~\__/~~\__/~~\
chan2 ___/~~\__/~~\__/~~\__/~~\__/~~\__/~~\__/~~\__/~~\
you'd edit the incoming offsets, fade speeds, etc according to what the effect supports.
this ui also shows you what input params you could be editing, and what quneo sliders they're mapped to:
( ) ( )
| | | |
| | | |
cyc_strobe effect mapping:
padx "music sensitivity"
pady "intensity"
slider1 "music time offset"
slider2 "sustain"
slider3 "side separation"
vis of a rgb effect:
color1: (rgb stripes)
color2: (rgb stripes)
-----------------------------------------------------------------------------------------------------------
blink to music:
'blink' sub effect:
subs: [cyc]
intensity: (envelope curve)
term1: (music curve)
term2: (another curve)
term3:
output = intens * (term1 + term2 + term3)
-----------------------------------------------------------------------------------------------------------
quneo settings UI webpage:
shows pad mappings.
-----------------------------------------------------------------------------------------------------------
how do you make a button that drops the stage to just blue light?
is a Pi camera good for taking stage shots? or just my DSLR?
see inputmapping.html
|