-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog
executable file
·6922 lines (5619 loc) · 296 KB
/
log
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
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
------- ------- ------- ------- ------- ------- ------- ------- ------- -------
2022-08-15
- small redesign: when created, the eightStepSequencer will have all step
velocities set to '0.5' instead of '0.0'
2022-06-10
- fixed up audio workers. For some reason, its now not possible to transfer
wasm modules to a worker, so now I'm transferring the wasm code and having
the worker compile it.
There also seems to be some issue around holding onto the references of
array buffers, meaning that they need to be re-generated on every process
loop. From what I've heard this doesn't have a performace cost, but I
haven't tested this.
2021-06-24
- began work on audio_buffer_type_2, which has multiple playheads
2021-06-22
- finished off and moved audio_buffer_type_1 from workshop into production
2021-06-02
- moved integrated_synthesizer_type_1 from workshop into production
2021-04-01
- updates to the explainPage to add links to the help and github pages
- updated the FAQ page to include a section about the site not working on
some browsers (I should really test Edge and Opera)
2021-03-22
- modified the /help/getting_started site so that videos are only loaded when
their frame comes into view. Instead of the page loading all of them at the
same time in a random order
- added more items the faq, and changed the graphics a little of the whole
site to work better on different screens.. not perfect but certainly better
2021-03-20
- made the last of the documents
- re-rendered the covers into smaller png files, so that the library site
loads faster. The site now also recognises pixel densities, so there are
three covers available; full original resolution, 250px horizontal and
double 250px horizontal (so 500px)
2021-03-18
- more work on documents (added the momentary_amplitude_meter and
stable_amplitude_generator)
2021-03-14
- updated help/library layout code again. It's much better now, though really
the page could use a small redesign
2021-03-12
- more work on documents
2021-03-10
- updated help/library layout code.. which is only a little better and needs
more work
2021-03-08
- more work on documents
- added check to frequencyAmplitudeResponseAnalyser worklet, which checks to
see if there's any input before attempting to add that output to the
internal step data. This used to cause the F/AR Workstation to become
inoperable if you pressed the start button when nothing was plugged in
2021-03-04
- more work on documents
2021-03-02
- modified frequency_generator and data_controlled_frequency_generator unit
backing images to make the 'detune' dial markings match what the math is
actually doing
- more work on documents
2021-02-26
- more work on documents
2021-02-24
- more work on documents
2021-02-22
- added more documents (all Harbinger's documents are now in)
- fixed issue in the Harbinger RDP, where cut/copy/pasting didn't work
properly. Seems in some of the code, it would clear the clipboard. This
would happen immediately after cut and paste operations, and was a quirk of
the refreshLEDs function, which would reset the Unify button, which in doing
so would clear the clipboard.
Clearing the clipboard is important however, as otherwise while in unified
mode the pasting function will expect a multi-dimensional array in the
clipboard. If the clipboard wasn't cleared during the switch to Unified mode,
then the old single-dimension data structure will be present, causing an
error. The solution was to add an if statement to the unify button's code
that detects if the incoming value is different to the current one. If so,
the clipboard is cleared... it's admittedly a little messy.
- added the 'next' site, to hold the new software (well, test programs)
2021-02-10
- cleaned up what images the Harbinger units were using, plus replaced the
DSDS images with new ones
- fixed some issues with the Harbinger DSDS, where the preset buttons weren't
using the preset saver function correctly. There was a little confusion
over what numbers to use, so I made things easier by making them the same
as the preset selection function
- work on Harbinger's documents (dsds added, mrd underway)
2021-02-08
- some of harbinger's common images were misnamed
2021-02-04
- swapped the names on CurveTech's Multiplexer and Demultiplexer, as it turns
out I had them the wrong way around
- finished the Curve Tech devices document, and wrote the company paragraph
2021-02-02
- added a document for Curve Tech into the library, for the interface units,
and made a start on the devices
2021-01-31
- added a document for Curve Tech into the library, for the logic gates
2021-01-29
- added the audio combiner unit to the Alpha collection, and modified the
audio duplicator slightly to make it match in size
- changed the print name of curveTech to CurveTech
- changed the look documents in the library web page have when they are
hovered
2021-01-27
- changed the Reverb Unit to display that it's counting from 1 instead of 0.
Also changed it so that the dials both start at 0.5 instead of 0, which now
matches how the internal circuit starts
- renamed the miscellaneous section of the Alpha collection to Routing
- more work on the Alpha document
- updated Alpha's Amplifier and Audio Duplicator backing image
- began work on the Audio Combiner
2021-01-25
- repaired the needleOverlay control part. When it was to remove a needle, it
just removed it and assumed that the group of elements would still be
around. Unfortunately, this is not the case, as removing a group from a
group causes all the children to be destroyed..which in retrospect is not a
fantastic method. The problems arose when the needleOverlay part tried to
readd one of these needles, and only the group itself was there, thus it
was invisible to the user. I fixed it by making it make a new needle every
time. There was a similar problem with the area, which was fixed in a
similarly ham-fisted way I will need to redo how the remove function works
in core
- added the method currentPlayingState to the player circuit, which returns
data on whether playheads are playing or not
- fixed two problems with the audio file player
1. the needles were disappearing when you stopped/started them (see the fix
at the top)
2. the needle counter was giving the wrong number for multiplay mode. It
didn't understand that not-playing playheads shouldn't be counted. Adding
the currentPlayingState means that the unit can now figure out which are
actually relevant
- small correction to one of audio_file_player's voltage callbacks, which had
a mistake in spelling. "vconstcurrent = ..." instead of "let current = ..."
- more work on the Alpha document
2021-01-21
- removed the 'curve' logo from Alpha's Amplifier
- more work on the Alpha catalogue document, I've added it to the library (we
need to redo how those covers are being arranged, and how they hover)
2021-01-19
- more work on the Alpha catalogue document
2021-01-17
- started on the Alpha catalogue document
2021-01-15
- finished up (for now) on the CUIS document, created a section for the IEC
and added the document. Also added descriptions for groups
- added some words of encouragement to the main help page
2021-01-14
- modified the control layer's queryString section, to make the demo loader
only load demos, and have a separate url parameter finder for any address;
"autoLoadScene" (which I might change)
- began work on the CUIS document
2021-01-13
- added more options to the help section of the menubar
- modified library's functionListRunner to return a bool depending in whether
a function of the provided list was run
- modified the keyboard section of the system layer. Now in a key-down event,
if a function on the function list is run and the 'command' key was
involved (which only happens on MacOS) the "releaseAll" method is run to
release all keys. This is a rather ham-fisted solution to the browser not
sending key-up events for keys when a combination is released in a certain
order, specifically for the command key on MacOS.
For example pressing 'command' then 'z' will activate both keys; but
releasing 'z' first will not register the 'z' key-up event. 'command'
however will be when it is released. If 'command' is released first then
'z', both will be registered. In the first case, any subsequent presses of
'command' will be interpreted as 'command-z' as the 'z' key will apparently
still be pressed.
2021-01-12
- more work on the help site (added an FAQ page with neat drop down boxes, and
side-bar navigation to the 'Getting Started' page)
2021-01-11
- started work on the "Getting Started" section of the help site, making
little videos of things you can do (along the way discovering that pasting
doesn't work)
- fixed issue where the paste command wasn't working. The code that was being
called didn't have the information that was needed. It was trying to call
core.viewport.getMousePosition - which didn't exist as it had been renamed
core.viewport.mousePosition - but even then, there was no mouse position to
get as the values it would have been pulling from were never populated.
I've now moved this method to the callback section and have placed the
mousePosition method there. The callbacks which attach to the canvas are
now populating the mouse position data
- updated the help option in the menubar to have links to the help places
2021-01-10
- put together a document library site, which will showcase all the pdf
covers
2021-01-09
- more work on the Acoustic Research Sigmoid's Affecter document
2021-01-06
- started making a document for Acoustic Research Sigmoid's Affecter. This
is the first of the "technical" documents for the help section
2020-11-27
- changed connectionNode_audio again to have an outputChannelIndex value, a
lot like the inputChannelIndex from yesterday. This should be helpful to
audio nodes with multiple output streams
2020-11-26
- created a new unit for Acoustic Research; the Data Controlled Frequency
Generator, which is exactly the same as the Frequency Generator, but the
frequency is controlled by a data input. It uses the
integrated_synthesizer_type_1 audio node directly, so, I'll need to create
a circuit for it. Some very funky sounds are possible with this,
particularly if you have two of them and you feed them into each other
- modified connectionNode_audio to have a inputChannelIndex value, which can
be set like the audioNode one is. With it, you can select which channel
index the incoming audio node connection will be connected to on the
destination audio node.
This should remove the need for the "nothing" audio node, whose main job
was to be connected to the non-zero index channels of multi-input audio
nodes, in order to allow other incoming audio node connections to use the
index 0. Circuits will have to be re-written, though by removing the
'nothing' nodes we're reducing the number of audio nodes and thus the
amount of memory and processing time needed to have them (as little as
that probably was, considering how much they do (which is nothing (hence
the name)))
This also kind of removes the need for a 'circuit' for this audio node,
and probably other nodes will follow suit.
- modified Acoustic Research's gain node to use the gain audio node directly,
using the features added above
- modified the Point struct in the core wasm engine to have get_ref_x and
get_ref_y methods, which are then used in SimplePolygon's
intersect_with_point, in a mad bid for speed.. I'm not sure it's done
anything, though it hasn't hurt either
- modified SimplePolygon's intersect_with_simple_polygon__intersect_only
method to check to see if any of the a's points are within b - and vice
versa - early in the function. This has spend up the determine_if_visible
method in my test of moving the musical_keyboard around (in dev mode) from
~5.5ms to ~1.8ms. About 3 times faster. I've also copied all the
intersect_with_simple_polygon tests to make a set of
intersect_with_simple_polygon__intersect_only tests, which say that the
change has been successful
- I remember another reason for the circuits. They meant that the audio
inputs always had input, even if it was zero.. this probably was always a
bug but I just never discovered it somehow. I've fixed it in the
integrated_synthesizer_type_1 audio node by having that node check to see
if there is data for the input channel before attempting to copy it in.
I'll have to do similar moves on other audio nodes
2020-11-24
- modified the menubar (on the control layer) further to streamline the
styles (and not have copied data) Styles are now stored in a "styleLibrary"
Styles can be set using the _canvas_.control.gui.style.set method, with the
name of the desired style
- replaced the errorPage with an explainPage, which produces the same output
as the old errorPage, but you can now create "info" pages too, that are
less aggressive. You just need to set the "level" url argument to either
"info" or "error". Urls that once used the errorPage have been changed to
use explainPage, and the new "StartAudioContext" button thing in the
menubar, now has a "why?" button that opens up an explainer page about why
you need to activate the audio context
- slapped together a development unit for the integrated_synthesizer_type_1
2020-11-23
- modified the menubar (on the control layer) to have the ability to add
right-hand-side items. There is now a "side" attribute which can be set
to 'left' or 'right' (left being the default) The items stack right to left
and their drop downs are aligned on their right side (like a mirror of what
happens on the left)
- added a new styling option "important". One can now use the attribute
"important: true" when describing the dropdown menu to indicate that it
should use the 'important' styling
- added menubar item (on curve layer) to give the option to activate the audio
context. This item only appears on startup if the audio context is not
already running, and will disappear when clicked
2020-11-22
- oops! Used the wrong words in the synthesizer_2 circuit
- began work on a new audio node; integrated_synthesizer_type_1
- it seems that "exponentialRampToValueAtTime" works on chrome now, so I've
removed the console message that said it woueln't
- added error output to the connectionNode_audio _ondisconnect code, so, you
can see the errors in future, but they won't stop the whole program
2020-11-21
- created a circuit for the oscillator_type_1 (with the same name) and
changed the Frequency Generator to use that instead..I'm flip-flopping
around a bit, but I think the circuits are actually a good idea
- same as above, but for the amplitude_modifier, bitcrusher, gain,
lag_processor, sigmoids_affector and stable_amplitude_generator. Also the
stream_adder, though I'd missed that one yesterday, so I didn't need to
undo any work, only add the shutdown sections
- threw out the white noise generator audio node, as no one was using it and
you can get the same functionality from the oscillator_type_1 node
- only code that uses the old oscillator interface circuit is the
synthesizer_2 interface circuit, and no one uses that, so I've commented
out both (there's some interesting code in there regarding control of the
envelopes) These circuits weren't used originally (I think) because the
system wasn't able to keep up with the js-based audio nodes that they used.
Things are different now of course thanks to rust and wasm.
2020-11-20
- modified the "nothing" and "oscillator_type_1" audio nodes to have
'shutdown' methods, which stop the process loop, thus removing their load
from the audio rendering thread. I'll need to add this to all audio nodes
- updated the frequency generator to shutdown audio nodes on its deletion
- modified the amplitude_modifier, bitcrusher, gain, lag_processor, sigmoid,
stream_adder and stable_amplitude_generator audio nodes to have
'shutdown' methods
- modified a number of Acoustic Research's units to use audio nodes directly,
instead of the circuits from the interface layer. These units also shutdown
the nodes on deletion, which led to an issue with a double disconnect
attempt on the nodes when the unit is deleted (while still being connected)
I've had to add a "try/catch" statement around the disconnection node in
the interface layer's connectionNode_audio.. its a bit of a messy solution,
but it works.
2020-11-19
- put together new oscillator "oscillator_type_1" which uses wasm for
processing
- updated Acoustic Research's Frequency Generator to use this new oscillator.
It also skips over the interface section, so, things are a little more
involved, but it just as good
2020-11-17
- dark-mode / light-mode is now selected based on the time (on start up). So
between 8pm and 8am, dark mode will be activated. Of course, the url
argument still works as does the menubar's tool's checkbox
2020-11-15
- small modification to the image element in core, so that it now deals with
bitmaps and urls separately, and on initial creation, doesn't require the
url to be loaded (even if that url is blank) Thus stopping the need for a
double frame render to get the bitmap displayed
2020-11-14
- upgraded the lag_processor audio worklet to use wasm (upgrading the
interface circuit accordingly)
- upgraded the gain audio worklet to use wasm (upgrading the interface
circuit accordingly)
- fixed the import function for the stable_amplitude_generator
2020-11-13
- did a little renaming of produced wasm files, so that now they are of the
format "name"."mode".wasm. So, for example, you can have
"core_engine.development.wasm"
- shifted audio worklet rust compilation code into the main comp.sh file, so
now there doesn't have to be comp.sh files in every "rust" directory of
these audio worklet things
- simplified the way these new audio nodes request their wasm files, by
pulling that code out into the function
_canvas_.library.audio.audioWorklet.requestWasm. This removes repetitive
code and shrinks down the nodes nicely
- modified the bitcrusher to use a struct with lazy_static, which doubles
the size of the wasm file, but does mean that I don't have to use Vector
allocations and can just have static arrays defined upfront. I'm not sure
if it actually goes any faster, but it does remove some lines from the
processing code, and makes that a little simpler for me. You also don't
have to pass pointers back to the processing function either
- upgraded the sigmoid audio worklet to use wasm (upgrading the interface
circuit accordingly)
- removed all mention of the WebGl2textureFramebufferManager from the
system. The file for it is still there, and the system wasn't using this
code, but still an instance was being created and just passed around a
lot. There's still a lot of "framebuffer_active" values around though.
I'll just leave them for now. I've been watching the chrome debug output
- as the site has been crashing lately - and noticed errors related to
Framebuffers, so I figured I would just remove it, even if they weren't
actually in use..I don't think it's helped though
- upgraded the stream_adder and amplitude_modifier audio worklet to use
wasm (upgrading the interface circuits accordingly)
- slight change to the nothing audio node, now that I know that the .set
method exists
2020-11-12
- rearranged how the audio nodes section of the library is layed out, and
initialised on startup, all in prep for the new audio nodes that have wasm
elements.
- updated the comp.sh script to have options for compiling the new
wasm-infused audio nodes. Also rearranged the "wasm" folder in "docs" to
have subfolders for "core" wasm files and the upcoming audio node wasm.
Also also updated the comp.sh script report section to give information on
the compiled wasm files including when they were created, what size they
are, and the first 10 lines of the twiggy output
- wrote up a new version of the bitcrusher audio node which uses wasm to
process the data
- swapped out the old bitcrusher for the new one, in the interface circuit
2020-11-06
- redid the core library's geometry shapes. Now, the detect_intersect code is
all included in the shape's struct (with cross-back so all comparison
directions are covered) I've also updated this code quite a lot, improving
its accuracy and adding new information to the returned result.
Also the Polygon shape has been renamed to SimplePolygon, in preparation
of...
- added the Complex Polygon to core library's geometry shapes, which has
holes. The shape is defined as a "body" SimplePolygon with any number of
"hole" SimplePolygons
- polygon shapes have also had the "convert to sub-triangles" included into
their structs
- the polygon shapes detect_intersect code was a little sluggish - probably
due to the amount of work it had to do to gather all the information for
the result - so there is also a reduced version of one of the shapes
methods (simple poly on simple poly) that only returns the "intersect"
value, as in some cases this is all that is required
I need to get ComplexPolygon on ComplexPolygon comparison working, if I am
to get polygons with holes (or Swiss polygons) working (needed for looped
paths) I've spent a lot of time working on this new set of comparison methods
though, and it's honestly started to depress me with how difficult it is to
get working and how much detail and patience is required.. something I guess
I've ran out of after the last week. Luckily we can get away without this
shape for now and focus on other more exciting improvements and features.
In future I hope to make a return however, and finish this mess off
2020-10-27
- removed all the usage of framebuffer code, simplifying things (I'm going to
give it another try)
- core/beta added "Frame Skipping" activation control
- modified the mouse zooming code. For a mouse zoom you have to discover the
workspace point under the window point, make the scale change, then get the
new workspace point under the window point and perform a position change to
get the workspace point under the window point to be the same as it was
before the scale happened. This used to all happen in the mouse code over
in the control layer, but I've mode all that into a new viewport method
within the engine. This is faster, as the math can all be done in wasm
but more importantly; there isn't a double viewport change, thus no double
visibility calculations.
This new viewport function has to report back to the viewport
representation what the new position is, however, which is done through a
promise. Hopefully that will be fine.
2020-10-26
- subframe working much better now, thanks to a few webGL tricks. However it
is a little slow and so cannot be used for unit-by-unit subframes as I had
wanted.. more work needed. Also the whole system is working off the texture
one, where the root group should be using the renderbuffer-only one..
little things
2020-10-25
- work on the subframe. Still under development unfortunately. Modifications
have been made to the way that the framebuffer for the root group is
generated however, and there are new methods for the
WebGl2programConglomerate and WebGl2programConglomerateManager structures,
which need review...
2020-10-24
- updated comp.sh and the way compilation is done, a little. Comp.sh now can
produce two versions of the core-engine wasm file, or more accurately, it
saves the optimised and non-optimised versions under different names in
docs/wasm; core_engine_development.wasm and core_engine_production.wasm.
It also now modifies the min.js files to use this core_engine_production
file instead of the default core_engine_development one. This was done to
avoid the mistakes I was making of producing production versions of the
program, then accidentally making a development version which would
overwrite the optimised wasm file. This could make it look like the
optimised version wasn't all that fast, where in reality the system was
using the development version with the production js code. The updated
comp.sh clears this all up by keeping the production and development code
and files separate.
2020-10-22
- small modification to stop the arguments for a stats command from being
executed if stats is not active
- added way of setting whether the stats section should be active or not
- added _dump method to stats
2020-10-21
- updated the way timestamps are collected in the stats section, for better
accuracy (and no more infinite fps, unfortunately)
- added a stats section to core engine's wasm code, so it now can measure the
percentage of frame skipped. (I also made an attempt at calculating
something like this for all elements, but I think that might have been a
little close to the sun.. and a little unneeded)
2020-10-20
- slight change to the "frame" method in the rendering section of
core-engine's wasm code; which checks to see if the root group needs to be
rendered. If not, it bails out of the entire function. This in turn means
that no new frame is sent to the main thread, saving lots of time. This has
brought back the famous "potentially infinite fps" stat
- added "overscroll-behavior-x: contain;" to the same part of the engine that
deals with overflow, so it will automatically be added when the mouse enters
the canvas, though only when viewport.stopMouseScroll is active. This is to
stop accidental back/forward actions
- updated _canvas_.control.viewport.refresh so that it waits for the
_canvas_.core.meta.refresh() function to finish before refreshing the gui
- fixed issue with player circuit which caused new audio buffer's to be
generated constantly, not deleting any of the old ones and leading to issues
with searching for buffers that could be reused, finding none. Causing the
search to take longer and longer each time... I'll probably need to review
this circuit. Maybe create a more specific one for the playback of short
samples that don't need to be looped or to have the needle jump around
within them. The Player circuit might be a little too general-purpose
2020-10-19
- further work on full-frame render culling Seems to be working rather well
now. I also have it multisampling to deal with the aliasing. You can also
adjust the number of samples from the dev menu
- fixed issue with list radio items not being able to display the number zero
- updated comp.sh to use printf instead of echo for the report, as there was
some issue switching between bash and zsh (I was using the -e argument
with echo, which was fine on bash, but zsh was just printing it out like
it was just another part of the test to be displayed)
- fixed incorrect decimal point sizing on readout_sixteenSegmentDisplay
- fixed jumping numbers on the readout of the audio_recorder unit (padding
was set up wrong)
: results
-> core_engine
core_engine.js 1052kb
core_engine.min.js 346kb
reduced to 32.94% of original size
-> test
test.js 3601kb
test.min.js 1199kb
reduced to 33.32% of original size
-> core
core.js 1568kb
core.min.js 510kb
reduced to 32.54% of original size
-> system
system.js 1579kb
system.min.js 515kb
reduced to 32.63% of original size
-> interface
interface.js 2768kb
interface.min.js 824kb
reduced to 29.79% of original size
-> control
control.js 2911kb
control.min.js 874kb
reduced to 30.03% of original size
-> curve
curve.js 3817kb
curve.min.js 1207kb
reduced to 31.62% of original size
2020-10-18
- work on full-frame render culling (adding sections to determine whether
group's require a rendering, or if they haven't changed since the last
render)
2020-10-17
- modified updateGravity.sh to have a help argument and the ability to list
what versions are available
- modified comp.sh to have a help argument. There's a way of listing out what
wasm editions are available, and it now automatically gets the appropriate
js files for the selected wasm edition (and can tell you when an edition
doesn't exist)
- fixed mistake in how child visibility is determined when added to a group
(I was using the wrong value for parent_clipping_polygon)
2020-10-16
- updated core-engine
- Alot of offset calculation is now done when the arrangement is modified
instead of at render time.
- All render judgement has also been moved to not be performed at render
time, which has resulted in a noticeable boost to frame render speed.
- In addition the "heedCamera" status of a group has been expanded from
true/false to true/false/dontCare, which has allowed a more elegant
computation of camera heeding at all levels of an arrangement.
There's also a sort of master/beta/alpha file structure in the rust section,
just so I'm not irreversibly breaking everything
Noticed some issues with looping paths however. The system doesn't seem
to be able to understand them at all in-fact, instead producing a
regular polygon. Luckily this kind of shape doesn't come up that often
2020-10-04
- fixed issue where the connection nodes of units wouldn't be interactable
sometimes. Turned out there was an issue with the group element's
augment_extremities__remove function, which wasn't calculating the new
extremities correctly. Seemed I'd forgotten (again) what the arguments
were for BoundingBox::new, which was confusing the rest of the code
- fixed Alpha's basicSynthesizer so that it can do gain and detune wobbling
again. Detune was never implemented in synthesizer_2, so I've puled over
the old method from synthesizer_1. Gain wasn't working because the gain
node within synthesizer_2 wasn't set to the mode to have its value
controlled by another audio stream.
I've also adjusted the interface a little, to match what the
synthesizer_2 can actually do. Now, periods are only between 1 and 10 a
second (it is the basicSynthesizer after all)
- restructured things a tiny bit in the interface circuits. Now the
synthesizer_2 is actually called synthesizer_2 instead of being
referred to as synthesizer_2 but called synthesizer
- Acoustic Research's MomentaryAmplitudeMeter wasn't working, because the
momentaryAmplitudeMeter audio worklet was getting into trouble. Seems
the input sample array can be empty, which confused things. I've put a
check in so that the length has to not be zero before anything is done
2020-10-03
- replaced the old gravity with the new, fresh, sophisticated, educated,
elegant and rather attractive Rust based one (which now has its own github
repo https://github.com/metasophiea/gravity)
2020-09-30
- I've learned Rust and WebAssembly
- complete rewrite of the rendering engine (the core layer) to use
WebAssembly (written in Rust) and the primary method of getting work done.
Some necessary JS remains, though I will be working to remove as much as
possible (mainly library functions. Some of the more complex ones I didn't
try to convert, along with those that do the work of requesting multiple
items at once from URLs, which is much easier to do in JS..primarily because
there's no multi-threading in WebAssembly)
System is still using the console/engine concept, thus much of the rest of
the system can remain as it was, bar a few changes in naming. Overall the
new system is a lot like the old, with a few differences:
- the canvas element has been removed. Instead the Image is used in its
place which had all the bitmap update code needed anyway
- full-frame rendering culling has been removed. I plan on putting a
lesser version back in soon, but only temporarily as I work on a more
advanced sub-rendering solution which should improve render performance
greatly with respect to scenes where much - but not all - of the
on-screen content is unchanging, which would cause a full-frame to be
rendered in the old method
- the viewport positioning has been redone a little. Now the XY point
will be correct, though this has the effect of ruining any positions
that were in old saves. An easy fix if you just open that file,
reposition and save
- window scaling is being managed now. Before, I had assumed that there
were only two pixel densities; 1 and 2. Which made sense as my
desktop was 2 and my work laptop was 1. This is true for screens,
but if you adjust the zoom of a page it can become any number. The
engine can now account for this; adjusting the canvas size and pixel
density to match what should be on screen. In effect, when someone
with a screen of pixel density of 1, zooms the browser out to 50%;
the canvas is now running at double the pixel density on a canvas 4x
larger (2x in width and height) This now continues correctly for all
zoom types. I still need to test on a windows device however...I'm
quietly confident.
- improved the stop overflow activation code, so that now it additionally
activates when the mouse first rolls the wheel, though is smart enough not
to be constantly sending that css update. This was done, as if you refreshed
the page with your mouse over the canvas, the overflow wouldn't be changed
and mouse wheeling would cause the window to attempt to scroll. Not such an
issue on more browsers, but on Mac it caused an unsightly attempted-scroll
effect
- fixed issue with the MRD-16, where buttons and selectors wouldn't glow
appropriately when the scene was loaded
- added a viewport lock to the tools menu
2020-06-25
- perhaps something changed in chrome, but the tests weren't working anymore,
as when one of them attempted to create a canvas (for graphing, like the
library tests do) this would expand the number of canvases in the document,
causing the global code allocation loop to run again on this new canvas,
which would create a new canvas which would expand the number of canvases
in the document, etc.
It's fixed in the test.js file, but not the others. Something to watch
out for. test.js now collects all the canvas elememts, but then filters by
which have the "__canvasPrefix" as an attribute
- misc test loadFileFromURL returned fail..I think jst because the test was
wrong however. There had been some changes to the loadFileFromURL
function's arguments which weren't reflected in the test
- odd situation in the engine image element, where if you set the url to ""
from the start; the element would be fine with this, until the data had to
be called during render, which wouldn't be fine. Fixed it by setting the
initial value of the url to "undefined" and also telling the hidden timeout
thing to set the url to the defaultURL but I'm still interested in what was
causing the url to be set to "". I think initially, the console just sends
over all the information. It doesn't care if its defaults are the same as
the counterpart's
- updated the layer controller so that its more in charge of layering, and
responsible for calling the functions of layers when lower layers have
completed loading, taking this responsibility from the layers themselves
This is the one sort of update that doesn't bump any version number, as
this is a very low-level, basic, functional, managerial, funky sort of
part. Probably. Though it does require lines to be re-written in lots of
places so that they use the new system of starting, instead of their
internal ones.. also had to remove that internal start-up code from all
the layers.. just call me a bad programmer and move on
2020-05-10
- fixed some spelling mistakes, added words to the readme to say that I was
learning Rust and removed lots of redundant code from the workshop section.
Also emptied the trash
2020-03-21
- after some efforts, I've decided to switch back to the old synthesizer
which used the built-in oscillator. I just can't get the custom one to run
fast enough, or to not produce garbage collections. I've reinstated the old
synthesizer as synthesizer_1, and named the newer one synthesizer_2
- modified control.scene.unitManipulation.removeUnit to run the hidden
_onDelete method after the connections have been disconnected
- core_engine's arrangement.printTree service function didn't have the
correct arguments
- modified core so that when a group is removed, all its group children also
have the remove command run on them, and runs the "onremove" callbacks
- updated core's removal method, so that if the element to be removed isn't a
direct child of the group, nothing is done
- modified core's group element, to have a 'shift' method, which can be used
to move a child around in the rendering order (though, it's not quite
working during the delayed communication situation)
...sort of fixed it by removing the delayed communication situation code.
It seems that the delay code sets up a callback that is called when the
newly created element receives its ID from the engine, but the
append/prepend method is also doing this, and obviously you can't shift an
element in a group without it being part of that group; but creating that
callback overwrites the callback created by the append/prepend method,
thus stopping the element from ever being included. To fix, one would need
to turn the callback into a callback list or something, or create an
'insert' method that the append/prepend method uses, which would never
be overwritten be the shift method, only have the destination changed.
For now, it's pretty much fine. I have plans to rewrite core in webASM
anyway, so, we can put it on the docket for then. Plus core isn't going to
develop very far from here anyway, so we have space for these poor quality
fixes...for now
- all this, fixes a long running problem that I thought I had in the bug list,
but it seems wasn't there. When units were being removed, they weren't
removing their connection nodes correctly. This was because their
'onremove' callbacks weren't being called; only the 'onremove' callback
of the master group. Now, these callbacks are called for every element in
a group thus activating the connection node's 'onremove' callbacks, thus
removing them correctly from the scene
- removed some of the old workshop folders (they've safely stored away on
my desktop)
2020-03-18
- rewrote the 'perform' method of the synthesizer_3 circuit, to hopefully be
more reliable. There's still some note dropping though
- updated Alpha's launchpad unit, to better handle the sending of signals
(sending slightly less now. Less needless ones)
- updated the oscillator worklet to have envelope reporting as an option,
instead of on by default.. the 'process' itself, might be a little heavy
on the poor audio thread though
2020-03-17
- modified the custom oscillator to take a velocity value when activating
the start command
- modified the synthesizer_3 circuit to send velocity data to the oscillators
- finished jiggering around with Alpha's Basic Synthesizer, so that the new
synthesizer circuit fits into it nicely. Changed the range of the two period
dials, and their format too. Now, one can select how long the period is,
between 0.001 and 2 seconds.
synthesizer_3 circuit is better, but still a little weird. Sometimes on my
laptop it skips notes and I can't tell why.. also, the internal LFO and
external control system needs to be looked at, considering we had to fix up
some of the dutyCycle stuff in the custom oscillator along the way
2020-03-11
- cleaning (removing commented out code, and renaming items like "thing_3" to
"thing", if there's no other "thing_n" items around)
- began expanding the custom oscillator to have more wave creation modes.
Currently working on additive synthesis and phase modulation, which is
going rather well
- modified the oscillator and synthesizer circuits accordingly
- updated the basicSynthesizer unit to have access to the additive synthesis
features of the synthesizer/oscillator
- somehow messed up the synthesizer's ability to play many notes quickly
-thumbs up-
2020-03-10
- wrote a license, as I'm a cool person now
- trashed the "martinez.js" thirdparty code, as it wasn't being used
- updated the thirdparty code "earcut" and "opentype" to whatever the latest
version was (the other two haven't been updated in years) They seems
stable.. we'll find out I guess. I've kept the old versions around anyway
- replaced the internals of the basicSynthesizer unit, to use the newer
synthesizer (I'll probably need to redo the unit a little, as I've changed
the values of dials slightly)
- commented out the old synthesizer and oscillator circuits
- renamed those new synthesizer and oscillator circuits to remove the
numbering (making them, the default essentially)
2020-03-09
- updated synthesizer_3 to include a master gain
- updated the oscillator2 worklet to output all phases as they change
- updated synthesizer_3 to work with this new output (might need a little
testing)
- created the oscillator2 circuit, which houses the oscillator2 worklet
- changed how the oscillator2 worklet calculates the dutyCycle in an attempt
to balance out the different control inputs
- made a start at updating the Frequency Generator to use the oscillator2
circuit
2020-03-08
- put together the Acoustic Research's Frequency/Amplitude Response
Workstation (called "F/AR Workstation" because it's just a huge name) unit
- updated grapher display part to handle situations where there's no styling
information for a layer
- updated the F/AR Workstation to handle multiple graphs more elegantly (6
can be displayed simultaneously, though I think I'd like to remove that cap
and have older ones simply fade away as new ones are added)
- updated the frequencyAmplitudeResponseAnalyser worklet to return the
collected data when the stop command is received
- updated the F/AR Workstation to have LEDs which show progress, also all
controls now freeze when the analyses is running. Also also, previous graphs
can be stored on-screen (by not clearing them) and they will fade as new
graphs are added
2020-03-07
- more oscillator work. I'm pretty happy with it now
- oscillator is now even more advanced, with envelopes for the gain, detune
and dutyCycle aspects. They each use the graph slightly differently though,
so you need to be conscious of that
- put together a new synthesizer for the new oscillator (hopefully, it will
replace the current one)
2020-03-06
- more oscillator work (I think I might have cracked it)
2020-03-05
- more oscillator work
2020-03-04
- some adjustment to the positions of those voltage connection nodes from
yesterday, as I wasn't super happy with where some of them were
- began work on a new oscillator that includes an ADSR envelope. It's going
well, I'm a little iffy about how the logic is, but it seems to work
2020-03-03
- created a circuit for frequencyAmplitudeResponseAnalyser audio worklet
(originally wrote it using private values, but apparently that's a bit too
modern right now. So, I've re-written it in the old fashion way (like
"_value") but kept around the old code when the world catches up)
- updated all relevant Acoustic Research units to have signal and voltage
connection nodes, to adjust their various options
2020-03-02
- added "Reset Cursor" option to the dev menubar dropdown
- added 'active' parameter to the momentaryAmplitudeMeter worklet, which can
stop all calculations if set to false (0)
- new work on the new frequencyResponseMeasure circuit/worklet is going much
better
2020-03-01
- finished off the Frequency Generator unit
- added the momentaryAmplitudeMeter circuit
- tiny bug-fix in the momentaryAmplitudeMeter worklet
- added Acoustic Research's Momentary Amplitude Meter unit
2020-02-29
- created Acoustic Research's Stream Adder unit
- updated the custom oscillator to have a 'white noise' option (making the
whiteNoiseGenerator worklet obsolete, probably)
- created Acoustic Research's Frequency Generator unit
2020-02-28
- more work on the custom oscillator
- expanded the momentaryAmplitudeMeter audio worklet to include an on-request
mode
- set to work on the frequencyResponseMeasure circuit, but it's not totally
working out.. I'll have to try again
2020-02-27
- added the whiteNoiseGenerator circuit
- created the streamAdder audio worklet and circuit
- more work on the custom oscillator
2020-02-26
- created a circuit for the new oscillator and put together a test unit for
it.
- began experimenting with oscillator with multi level phase modulation,
which is pretty out-there and I've yet to figure out how to do it right
frequency = 1
phase1 = 4 amp1 = 1
phase2 = 3 amp1 = 1
phase3 = 2 amp1 = 1
phase4 = 1 amp1 = 1
func Z(x,freq,amp,phase,offset){
return sin(x*freq*phase + (pi/2)*amp*offset)
}
A = Z(x,frequency,amp1,phase1,0)
B = Z(x,frequency,amp2,phase2,A)
C = Z(x,frequency,amp3,phase3,B)
D = Z(x,frequency,amp4,phase4,C)
2020-02-25
- even better progress on the custom oscillator audio worklet; now there's a
way of skewing the triangle waveform into a sawtooth (in either direction)
thus reducing the waveform modes to 3, but keeping every originally planned
waveform and adding a lot of adjustability. There's also gain and detune
inputs (though I'm not too sure on how detune should work..) which, along
with the dutyCycle parameter can all be controlled normally or with an
audio stream. Such control
2020-02-24
- added a link to the "units" doc file to the menubar
- good progress on the custom oscillator audio worklet
2020-02-23
- wrote a new gain audio worklet which comes with the usual control, plus an
input channel for amplitude control
- updated the gain circuit to use the new gain worklet instead of the
built-in one