-
Notifications
You must be signed in to change notification settings - Fork 12
/
TODO.txt
352 lines (352 loc) · 15.1 KB
/
TODO.txt
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
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
plugin ideas:
- Mult with labels
- so I can route a distance output to mult and label
it as 'main seq gate output' to avoid tracing cables
- event log
- visualization of past triggers/gates
- time series or sparkline-ish
- more or less a scope but without y values and
a very long time
- could do diff colors for gates/triggers
- or gates up and triggers down
- wide module
- multiple time view zooms
- 1x, 2x, 5x, 10, 20x, 50x, etc
- mostly for appearance or troubleshooting/debugging event stuff
- could evolve to supporting playing the the history back
- 1x speed or faster/slower
- scrubbing?
- multiple channels of events
- Table module
- "an oscillator is a phasor and a table"
- phasor input (0.0 -> 1.0) or other scaled
- value output
- on step, read phasor value, look for a match
in the table, output the value
- ui
- just a scrollable list?
- columns
- phasor
- start range
- end range
- output value
- buttons to add delete entry
- a x, y graph display showing phasor in volts on X
and table volts out on Y
- load table from json in context menu
- uses:
- feed a sawtooth osc output into it to
create rudimentary wave table
- arbitrary quantizer
- building block
- fancy options
- entries that map a range of phasor input
values to a range of output values
- map ranges could be linear/log etc
- linear
- slope
- offset
- sub ranges could be cos/sine/exp/some distribution etc
- (similar to the old GIMP color gradient editor)
- likely could use gimp gradient (ggr) files as a type of table
- modulating the table offset or value amplitudes
- credits module
- widget that shows author, create/mod date, urls, license, other metainfo
- would save into vcv file as module json data
- use a rack_credits.json in ~/ or rack doc root to set the default
- list of author/credit metadata
- would get appended to if modified by new author
- how to only update on 'save' or 'save as' ?
- don't want to append on every autosave.vcv write
- track a single 'last_edit' to persist on every toJson
- then on load/fromJSON, add last_edit to author list
- if there is a way for plugin to distinquish a 'real save' vs
an 'autosave', then could use that.
- how to tell when a patch has been 'modified'?
- needed to avoid adding info on every save or autosave
- slightly klugey way:
- For v2, https://vcvrack.com/manual/Migrate2#3-4-Store-large-data-in-the-module-s-patch-storage-directory
sounds like the right approach
- if plugin knows the patch it is in, could load patch .vcv/json
data and compare to 'previous'.
- chksum would be simplest
- but could do a smarter/deeper compare diving into the data
- uses:
- a patch with the module includes the author info
- if patch is shared (via patchstorage for ex), and modified
by a different author, the module json would include info
for the original author and modification author
- just as a display widget when sharing a screen capture
- concerns:
- could probably be better implemented as a feature of the core vcv serialization
- 'Equal and opposite'
- two eqs with 'opposite' settings and an effects loop in between
- before eq, after eq
- same bands and q's, but opposite gain
- ie, if 'before eq' boosts bass and treble by 10db and cuts mids by 12db
then the 'after eq' would cut bass and treble by 10db and boost mids by 12db
- an effects send and return in between
- munge audio signal, send it to effect (a distortion for ex) and unmunge on the way out
- the before/after transforms would automatically mirror each other
- otherwise pointless since it could be done with other modules
- other variations could exist for other reversible-ish transforms
- dont have to be perfect or lossless
- compress/expand
- bitcrush / 'bit extropalate' (is that a thing?)
- forward/reverse delay?
- pitch shift (probably most interesting, but
- transport gui module
- play/stop/pause/fast forward/reverse/record buttons
- gate and trig outputs for them
- just buttons, but with a explicit purpose
- uses
- generative patches that need a 'press play to start'
- specific values
X - (mostly implemented in 'Specific Value' module)
X - module with just text entrie fields for entering a float value
and an output for that value
- possibly with text widget in combo with a dial or inc/dec
buttons (spinbox widget)
X - or 'click and drag to change value'
X - up/down for small value
X - left/right for multiplier (middle = 1x, left = 0..1.0x, right >1.0x multi)
X - 'up and to the left' for fine grained adjustments
X - fancy
X - maybe automatically also show CV v/oct freq or note equiv
- incremental mode for voltage dial, to jump between quantized values,
in particular between note values. Built in quantizer basically.
- maybe gate out and button to click to send value and gate output together
- Seq with per step gate length and rest length between steps
- 'rest' steps basically
- A cv 1v/oct display -> freq hz -> period secs -> bpm.
- (more or less a multiple version of 'Specific Value')
- ( could display v passed through and/or let you specify as text)
- CV out
- button to send gate
- basically a keyboard with text/entry widgets to let you specify
CV voltage/hz/period/note name
- other possible things to display/select
- midi note number
- # of steps from a root
- interval from a root ( third, flat fifth, etc)
- staff / note
- bpm (for a LFO or general nerdery)
- SpecificNote
- choose a specific note from options
- possible UI that could be implemented like a
imagemap (ie, use x,y of where clicked to pick note)
- piano keyboard image
- piano key style but 2d, with stacked one
octave keys (kind of accordian-ish)
- musical staffs
- possibly with areas along X to indicate note length?
- maybe left side of X axis for flat, middle for natural, right
for sharp
- just a grid
- various alternative keyboard styles (hex, axis64, starrlab, jammer keyboard)
- could use multiple instances and a 'Whats New Now' to combine them
- generic voltage quantizer
- based on 'table' module
- except input CV is 'rounded' to edge of maps
- see 'fancy options' for table module above
- 'Attached file' module.
- GUI file picker
- add base64 of file to data to store in plugin Json.
- Could be a list
- would need to sort out how to only serialize/persist on 'real' save
vs autosave (to avoid constantly saving the whole thing to autosave.vcv)
- 'Attached Preset' module
- more or less 'Attached File' but tweaked for including vcvm presets
- automatically write out presets to current presets folder?
- well, not automatically, but more or less just one interactive step
like a 'save to presets folder' button
- can a ModuleWidget subclass customize fromJson to allow a module to
accept 'paste preset' from any plugin?
- would be easiest UI for attaching a preset
- 'Maze Table'
- wave table, but with a maze
- instead of phasor indexing an array, would "index" into
a path along the maze graph
- could have breadth first and depth first paths as options
- use DAG style mazes (one and only one path out, no loops or cycles)
- though cycles in maze could be analog for loops in waveform playback
- maybe something hilbert curve esque?
- Matrix clock
- N x N matrix
- each row defaults to a clock division
- each column defaults to clock multiply
- 0,0 defaults to 1x1 quarter note for tempo
- rows default to 1,2,3,4,6,8,12,16, division
- ditto for columns multi
- but row/columns mult/div could be changed to anything
- XY pad matrix mixer
- matrix mixer with a JL-Modules/kaosspad/reactor style XY pad
at each cross point
- 1,1 -> top output and right output
- 1,0 -> just top output
- -1,-1 -> inverted output to top and right output
- Matrix Mixer with multiple scenes that morph/interpolate
- more or less like Bidoo ACNE except values morph
between scenes insted of
- 2.5 dimension matrix / mixer
- 8x8 matrix but with an output at
each crossing point
- possibly with knob/param for output level
of each output
- maybe a per cross mute/solo
- Much like the movies, the first one was the best.
- text Notes module with CV/trigger control and multiple messages
- like a plain notes module, but can react to input from
patch
- use case would be describing stages of a generative patch
- or for adding info to screencast videos
- Gate Divider
- like gate length, but instead of generating one gate, it
generates multiple gates that add up to gate length
- how to seperate?
- some fixed inbetween interval ("kerf")
- divide into on and off gates
- divide a 1s gate by 1 -> one .5s gate then a .5s 'rest'
(and vice versa / inverse 10 or 01)
- divide by 3 -> one .3333s gate, one .3333s rest, one .3333 gate
( ie, 101 or 010)
- divide by 4 -> .25 gate, .25 rest, .25 gate, .25rest
(1010, 0101)
- divide by 5 -> .20 on, .20 off, .20 on, .20 off, .20 on
(10101, 01010)
- kind of similar to Walsh codes
" Experimental Electronic Music Devices Employing Walsh Functions",
"BERNARD A. HUTCHINS, JR"
"JOURNAL OF THE AUDIO ENGINEERING SOCIETY, October 1973"
(https://pdfs.semanticscholar.org/6b9c/30f94551aaf05f077aa491f31b196898cd90.pdf)
- "Sequency" - theres a module name if I ever heard one.
- Add DC blocker option to Big Mute Button ?
- Whats New Now
- multiple inputs, detect, choose and output the most recently change value
- use to multiple multiple controllers (like Specific Value) together and
use the 'active' one
- for each input, track previous (N?) input value[s]
- on each step, compare current value to previous
- if different, it's 'new'
- compare to some value precision (ie, the epsilon to use when comparing floats)
- compare to some time precision (running average of last N values?)
- if only one new/changed input, send the new value to the output
- if multiple new/changed inputs, need to pick which to use
- most recently chosen for output? ie, stick with input that first started changing
- least recently chosen? kind of round robin
- value that most recently started changing? (track how long each input has been changing,
and choose the one that just "woke up")
- output a trigger when output value is changing (for ex, a new cv note was detected, send a trigger
to potentially start a gate...)
- almost surely already exists with different name/terminology
- maybe envelope followers and logic?
- uses:
- allow multiple CV controllers to be used (ie, a midi-to-cv, a SpecificValue, a TwelveKeys) with
the final output being DWIM for user (ie, whatever changed last)
- kind of multiplexing?
- bet it would make weird noises at audio rate
- options:
- way to avoid discont/aliasing in output?
- interpolation?
- miniblep?
- gate out for 'something is changing right now'
- default output value (0?) if nothing is changing?
- Blocked In DC!
- just DC blocker, but I like the name
- The Big VUte Button
- The Big Mute Button, but with clickable
stereo VU meters
- CV Key Splitter Switch
- one CV input
- 12 (* N) outputs, one for each chromatic note
- if CV in is 1.0V, then only the 'C' output sends signal
- split a CV into output for each note
- one octave 'small' version could do it for any octave
(ie, C0, C-4, C5 all go out the C output)
- larger versions
- 5X 5x12 outputs
- outputs correspond to specific note@octave
- ie, C0 goes to C0 out, C4 goes to C4 out
- 10X 10x12 outputs, for -5.0V to 5.0V coverage
- possibly include a oct adjustment
- maybe a fine tune
- ie, a440 vs a437 etc
- SpecificValue style text box?
- possibly note-on/note-off style trigger outputs
- ditto for a gate
- start gate when new output is chosen, end it
when the next note is detected
- maybe some sort of keyboard like widget?
- CV Key Range
- like CV Key Splitter Switch except outputs to a set
of range/group outputs
- each note has choice of which group/range it goes to
- set of N (4?) buttons? (could go to more than one range...)
- a knob with detents?
- in some way range would just be a more specific version the
Table module with CV/note specific UI
(ie, a map of an input to one or more output values)
- incoming CV split into N ranges
(bass/treble, bass/baritone/alto/soprano)
- ranges can overlap
- two knob/param for each range (low and high)
- could use FloatFiend/NoteName field from SpecificValue
for text entry
- presets/default for
- bass/treble
- bass/baritone/alto/soprano/tenor
- rumble or sub bass / bass / treble
- below human / human / above human
- Audio Key Splitter/Range
- like CV Key stuff, except with audio inputs
- needs fft magic likely (or at least filters)
- detect the main harmonics of audio and send output to
note specific output
- possibly more than one harmonic
- ie, audio with fundamental at C4, and another strong harmonic at
G5 would output from C4 and G5 outputs
- outputs could be trigger/gate or corresponding CV value
- or out to some set/group/range of outputs
- CV value would be Pitch-To-CV
- Etch-a-Sketch like visualizer
- X and Y inputs
- trigger in for 'turn upside down and shake' / reset
- more or less stylized oscilliscope
- Timing tuner / temporal heatmap
- visualizer of where in a 'beat' different inputs (gates/triggers) happen
- display would be bar graph / histogram like
- X range would be time between beats
- X=0 start of clock beat, x=1.0 end of clock beat (assuming 0->1,0 for
arbitrary range)
- Y value would be count of other event inputs
- kind of specialized oscillioscope that accumulates values and is
triggered for each clock pulse
- why?
- might look neat?
- use for 'tuning' / tweak multiple event sources
- Timing Chart? Beat Map? Splay Visualizer? Beat Tuner?
- 2d Scatter Plot
- visualizer
- 2 CV/audio inputs (X, Y)
- Clock or trigger input
- on trigger, grab the values of each input, plot on graph
- more or less just an oscillioscope with very short sample
- Increment / Counter
- dedicated 'count triggers since reset' module
- freq counter-ish
- can be implemented with other modules, but dedicate UX might
be useful (seems to be a commonly asked question)
- CV Value to trigger
- converts cv value into distinct trigger outputs
- CV in
- Range param
- Increment param / Divisions
- Some large number of trigger outs
- for ex, range of 4, increment of .25.
- CV in of 0.0 would send trigger to out 1
- CV in of 1.25 would send trigger out 5
- Triggers to CV value
- opposite of CV Value To Trigger
- lots of trigger inputs
- one CV output
- for values above, input on trigger 5 would send 1.25, etc