-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog
979 lines (787 loc) · 36.2 KB
/
ChangeLog
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
--------------------------------------------------------------
Friday 19th August 2022 - wcnt-1.30.2022
FIXES:
* Build succeeds now
* Fixed various warning generated by G++
--------------------------------------------------------------
Tuesday 19th February 2008 - wcnt-1.26.4
CHANGES:
* LADSPA_PATH for ladspa based modules
if the LADSPA_PATH variable is set then wcnt will use
that as the location to find LADSPA plugins. Otherwise
wcnt will use "/usr/local/lib/ladspa/:/usr/lib/ladspa".
* ChangeLog
removed listed changes prior to 1.26 releases.
FIXES:
* default parameter value checking for pre-defined errors
now works - added missing break statements in switch.
--------------------------------------------------------------
Monday 18th February 2008 - wcnt-1.26.4
CHANGES:
* param_editor
can now make adjustments to parameter values aswell as
changing them entirely. for example:
edit osc1 freq + 100
will add 100 to the value already set for parameter freq
in the module named osc1. subtraction, division, and
multiplication are other options for doing this.
* setpar namespace
templatized functions. modified to allow param_editor
relative edits by specification of operator between
parameter name and value. ie edit osc1 freq + 10.
--------------------------------------------------------------
Wednesday 13th February 2008 - wcnt-1.26.3
FIXES:
* synthfilereader.cc
synth_file_reader data object stopped dead on
encountering a second wcnt_exit module - which in some
situations was what it should do. however, if the second
wcnt_exit was not meant to be created it should have
simply been ignored.
fixed by moving checks elsewhere within synthfilereader
class.
--------------------------------------------------------------
Tuesday 12th February 2008 - wcnt-1.26.3
CHANGES:
* fader module
changed out_trig to out_bar_trig to reflect the input
names.
* data object help commandline option
removed display of data object definition during it's
generation - should have done this before.
--------------------------------------------------------------
Thursday 7th February 2008 - wcnt-1.26.3
FIXES:
* removed references to cosine_wave module which no longer
exists - caused problems for --input-help <input_name>
cmdline options.
--------------------------------------------------------------
Wednesday 6th February 2008 - wcnt-1.26.3
CHANGES:
* removed bpm and time signature information from 'header'
only the sample_rate must be specified now.
* time_map
because bpm and time signature data is no longer created
as part of the header, the time_map now requires a
meter and tempo added to the meter_map and bpm_map
respectively.
added validation of tempo - so that relative tempo
changes won't take the tempo below or above the minimum
or maximum allowed tempos.
FIXES:
* jwmsynth no longer seg-faults when only a wcnt_exit
module is created.
--------------------------------------------------------------
Monday 4th February 2008 - wcnt-1.26.2
CHANGES:
* jwmsynth::run() no longer searches through the modlist
for the wcnt_exit module... wcnt_exit::init() is
friends with jwm_globals and sets exit bar and in bar
members of jwm_globals - jwmsynth get's them from here.
* synthmod base class has had the boolean members
valid, and, groupable, etc, removed and replaced with
an int member named flags which uses a new
synthmod::enum - for use by linkedlist requiring a
function object, or by more general usage with,
for example:
synthmod::flag(SM_UNGROUPABLE)
* #ifdef IO_DEBUG
disabled checking of inputs being set for a module
(it happened after validation i believe)
#endif
* #ifdef IO_PARANOIA
conditionally defined as IO_PARANOIA some other stuff
moaning about requesting setting of things without
things within synthmod base class .cc (ie the virtual
base class methods should never be called due to text
file ui reader etc)
#endif
FIXES:
* dynamic
was checking current vertex when it should have been
checking the next for existence...
NOTES:
* wcnt-1.26.2 is a ever so slightly slower than
wcnt-1.26.1. this is because the combiner, switcher,
spreader, mixer have been modified as mentioned
yesterday.
--------------------------------------------------------------
Sunday 3rd February 2008 - wcnt-1.26.2
CHANGES:
* state_gate_trig
added out_not_trig output for when in_play_state yields
off.
* connectorlist
new method, remake_connections. remakes the connections
for a specific module and specific output, to different
output.
* combiner, switcher, spreader are no longer restricted
to containing lists of wcnt_signal - as long as the
modules added each contain an out_output output type
everything is fine. also modified the array created
from the list of modules to contain the output rather
than the module( and then getting the output from the
module during run() ).
* mixer's list no longer restricted to containing mix_chan
modules, provided the added modules each contain the
out_left and out_right outputs.
NOTES:
* wcnt_signal and mix_chan modules need only be created
if user desires to use outputs other than out_output
or out_left/out_right respectively.
--------------------------------------------------------------
Thursday 31st January 2008 - wcnt-1.26.1
NOTES:
* getting ready to release this tonight...
FIXES:
* switcher
seg-fault caused when a single wcnt_signal was used
more than once in same switcher.
--------------------------------------------------------------
Wednesday 30th January 2008
CHANGES:
* wavfile_out
modified this to take into account that it should behave
in a similar fashion to the serial_wavfile_out if a)
it's trig and count inputs connect to a trig_counter
with counter wrapping on, and b) it is using
snapshot_mode. if (a) but not (b) then the same file
will just be continually over-written. Added MS to
time information added to filename in snapshot mode.
* trig_counter
the count parameter now specifies how many times to
count the triggers and output them. previously, it
let through count-1 triggers.
--------------------------------------------------------------
Monday 28th January 2008
NOTES:
* Debugging work - figuring out why some generated files
sound different between this version and the previous
version - besides the intentional differences.
CHANGES:
* user_wave
this sounded different - but due to a bug in previous
versions of wcnt. fixed that.
worked some more on the run() code. vertexs can now
collide with each other...
... they always get processed in the same order but one
might get modulated such that it moves behind another,
these get dropped out - and dropped back in again later.
added drop_check_range parameter - during tests I used
a value of two (less, and the drop-check fails and
nasty spikes occurr).
* wave_phase (i'm not sure about this)
--------------------------------------------------------------
Thursday 24th January 2008
NOTES:
* the templatization of the linkedlist class has created
many problems and has needed a lot of work to sort them
all out. so much work that i am infact still in the
process of debugging the bastard.
lastnight while working on wcnt i got distracted by my
test .wc files and started working on sound instead and
using the orbit module i kept on looking for that
perfect sound...
so today i took a break from debugging, and implimented
the following...
* there are now 81 modules within wcnt.
CHANGES:
* square_wave module
added rate parameter. has range between 0 and 1. using
a rate of 1 gives the harsh digital square wave of old.
a rate of around 0.5 adds some curvature, and very low
rate values add more curvature. when the square wave
runs, instead of instantly setting the output level
(-1 or +1), it sets these as a target. the current
output level is then processed as:
output += (target - output) * rate
the waveform therefor quickly accelerates toward the
target and slows as it approaches - providing the
curve. this was an idea from a few weeks ago based on
something i did many years ago in a much more random
fashion.
* wavfile_out module
added snapshot_mode parameter. when set to on, the
filename has the current date and time added to it.
so with snapshot_mode on, filename.wav will become
filename-20070124-233237.wav
so many times i have experimented with a .wc file trying
to find a particular sound and consequently lost some
good sounds - this new parameter means that even if the
means to generate the sounds is lost (due to editing)
the sounds themselves still remain. EXCELLENT!
* sample_climb
this is basically a sample and hold version of the rate
modification of the squarewave - but more like sample
and climb (to the sample at a given 'rate').
--------------------------------------------------------------
Friday 18th January 2008
NOTES:
* regarding the conversion to a templatized linked_list
class, this evening around 9pm was the first time the
whole thing compiled. so far it will display module
definitions via the commandline module help option -
but only if the module does not contain any dobj shit.
--------------------------------------------------------------
Thursday 17th January 2008
NOTES:
* performance
i noticed that after the recent additions of new modules
that wcnt has been getting increasingly slow. decided
to try and learn the STL and use <list> instead of my
own primitive linkedlist class. tested both handling int
data types and the STL list outperformed my own list
like a Ferarri F40 racing a Model T Ford.
so the STL list seemed without a doubt the way to go.
i started first of all, within jwmsynth::run by
moving the list of modules from the synthmodlist class
into an STL list<synthmod*> but, when running wcnt from
the commandline using the time command, the STL list
was thousandths of a second slower.
so i compared the performance of wcnt-1.26-pre2 (in dev)
with an old version - wcnt-1.25.5 and the older version
was infact faster. so deduced the decrease in speed in
newer versions is due to the increase in virtual methods
being used (by synthmod derived classes as new modules
are added).
in order to learn the STL i'd looked online, in the C++
annotations (recommended btw) and in the src code, and
decided it was rather complex - and my own linked list
code just needed a little optimization (more scraping).
eventually it dawned on me that the simplest way of
stepping through the list of modules when running the
generated synth would be to hold them in an array.
again, i did the conversion just inside jwmsynth::run()
and lo and behold! oh my! the processing time was
halved! by gum old chap! this made me happy.
one of the things i _had_ decided to do with the STL was
for (initially) the synthmodlist to inherit
list<synthmod*> and thus remove the generally redundant
accessing methods which all classes using my linked_list
had (because they used containment rather than
inheriting it).
so NOW, right NOW, as we speak, I am goddamit, in the
process of re-writing most of the classes that use my
linkedlist - NOT to use the STL, but to use a template
version of my linkedlist, and to inherit it instead.
**(snip)**
--------------------------------------------------------------
Sunday 13th January 2008
ADDITIONS:
* group_controller module
removes modules of specified group from the main
synthmodlist and into a private synthmodlist. using two
inputs (in_play_trig and in_stop_trig) the module
decides if it should run the modules or not run them.
in_play_trig ordinarily will connect to whatever
triggers the adsr within the 'hijacked' group.
in_stop_trig ordinarily connects to the out_off_trig
output of the same adsr which is triggered by the same
output as in_play_trig.
there is nothing to prevent the Wrong Thing ;-)
see examples/routed.wc for a demo.
CHANGES:
* synthmod (module base class)
added members set_empty_run(), has_empty_run(), and
empty_run for modules with empty run() methods to easily
let it be known they can be removed from the run list.
* synthmodulelist
new member method to remove modules from the list which
have been grouped to the specified group name. creates
and returns a new synthmodlist containing the grouped
modules.
two new member methods have been added, validate_modules
and init_modules, see jwmsynth below for why.
* jwmsynth
code to validate and initialise the modules has migrated
to synthmodlist so that a (planned) module can validate
and initialise the modules it has removed from the main
synthmodlist (see yesterdays notes regarding the planned
'voice' module) without duplicating the code to do so..
--------------------------------------------------------------
Saturday 12th January 2008
NOTES:
* polyphony
Have worked out some ideas on how to create polyphony
within wcnt. the very beginnings of this step begun
from ideas developed while creating the trig_counter and
trig_echo modules which aswell as outputing a trigger,
also output a count.
it is envisioned, that these two outputs will be used as
a basis for polyphony. the out_count output will dictate
which 'voice' is to be triggered.
currently, the only module to use these outputs in this
way is the trig_router (see below).
the next step will be to create a 'voice' module (needs
a less descriptive name?) which will, using a parameter
specifying a group name, remove all the modules within
that group from the main modulelist and add them to its
own private modulelist.
finally, create a polyphonic sequencer. also riffs may
need to be altered, or a new polyphonic riff type
created, but icrottomh.
ADDITIONS:
* trig_router module
a module which creates a number of wcnt_trigger modules
and connects them to it's internal hidden trigger
outputs. then using in_trig and in_count, determines
which of the triggers will trigger.
FIXES:
* removed module name setting for the newest non-ladspa
modules to outside of the WITH_LADSPA conditional.
CHANGES:
* trig_counter
added play_state output, and wrap parameter.
* removed call to synthmod::init from
jwmsynth::validate_synth and created
jwmsynth::init_synth instead - which is called
immediately before jwmsynth::generate_synth
* synthmodule (base class for all modules)
added member methods and variable to remove (default)
ability to be added to a group.
* removed groupability from wcnt_exit, trig_router, and
sequencer modules.
* linkedlist
scraped it about a little.
--------------------------------------------------------------
Friday 11th January 2008
FIXES:
* sanity_checks
the inputs/outputs/params checking failed to correctly
ascertain when a module had failed the first or second
test when the second or third test had passed.
* constant_note
changed member variable note from
char* [jwm_init::note_array_size] to dynamic char** so
it works as an output now.
* commandline options: --input-help
re-ordered code in main. has the disadvantage that some
things are created unnecessarily in some instances...
it's that or --input-help causing a segmentation fault.
ADDITIONS:
* trig_echo module
the trig echo module echos a trigger input to it's
output. each successive instance of an echo outputs
an increasing count, and a decreasing velocity, aswell
as the echos of the trigger. the user specifies how many
echos should occurr, and if the input trigger should be
sent as output also.
* inspector module
has two inputs and a message parameter representing each
of the input/output category/data types. one of the
inputs is a trigger to tell the module that this is when
the corresponding message and input value should be
displayed. it is for inspecting the values coming from
outputs ;)
* trig_counter
counts how many times it's in_trig triggers. the count
parameter sets the maximum number of times it will allow
the input to the trigger out_trig...
...added pre_count parameter to ignore the first few
triggers, added out_not_trig to trigger when out_trig
should not. and added in_reset_trig to reset the state
of the counters.
CHANGES:
* nonezero module
ie the module whose outputs are used when an input is
turned 'off'. added 'off' ability for inputs who expect
a string (char*) - ie in_notename etc. the inspector
module brought this about.
--------------------------------------------------------------
Wednesday 1st January 2008
CHANGES:
* modifier module
modifier module now works differently. the modifier has
always been unclear as to what it's intentions are, but
now, it takes two signals and creates a third which is
some kind of modification of the two - rather than them
just being mixed together.
* adder, subtracter, modifier, and multiplier modules had
previously, a pair of inputs named in_signal and
in_modifier - these have now become in_signal1 and
in_signal2.
ADDITIONS:
* balance module
the balance module takes two signals and creates a third
which is a balance of the two. if both input signals are
within -1.0 to +1.0 range, then the output will be
within that range also.
--------------------------------------------------------------
Monday 31st December 2007
FIXES:
* peak_detector
fixed msg display for when in_signal > sig_range_hi to
display upper bound instead of lower.
ADDITIONS:
* --no-title commandline option
--------------------------------------------------------------
Sunday 30th December 2007
ADDITIONS:
* constant_freq (module)
From a single parameter - freq - the module outputs
the frequency, and the phase step for that frequency
* constant_note (module)
The same as the constant_freq module, except it has a
an extra output - out_notename, and a parameter for
specifying a name of a note instead of frequency.
NOTES:
* I really don't know why I have not thought of creating
the constant_freq and constant_note modules before.
There has been countless times when I really would have
benefited from them.
CHANGES:
* synthmodlist class has been updated to unlink the two
new constant modules.
* linkedlist::unlink_item now only sets current to the
very first item in the list if the unlinked item was the
first item in the list - otherwise current points to the
item previous to the unlinked item.
--------------------------------------------------------------
Saturday 29th December 2007
NOTES:
* removed the sine module created yesterday.
CHANGES:
* removed sine_wave, and tri_wave modules. Replaced them
with...
ADDITIONS:
* wave module. four waveform types to choose from:
one, sine, tri, and saw - and three more 0.0 ~ 1.0
versions. the module is quick and simple to use. it is
wave table based.
* wave_phase module. this also has the same wave table
types to choose from. this module has the features the
old sine_wave and tri_wave modules had. you can have
a phase step from a clock running at a different
frequency to where the phase trig comes from. there is
also shaping functionality which requires it's own
phase_step input, and, the shaping can be sync'd with
the primary phase_trigger. a further parameter not found
in the old sinewave and triwave modules is the
invert_alt parameter which when on means every other
'phase' is inverted. works much better than the old
modules.
--------------------------------------------------------------
Friday 28th December 2007
ADDITIONS:
* sine module
This is a stripped down version of the sine_wave module.
It uses a lookup table, with code derived from Richard
W.E. Furse's sine plugin from the Computer Music Toolkit
(CMT) LADSPA plugin library.
CHANGES:
* Renamed all deg_size inputs, outputs, and parameters to
phase_step, which is more standard, and also removes the
reference to degrees... which I might change the inputs
and outputs to pass radians instead of degrees so that
the conversion from degrees to radians is no longer
required within modules with in_phase_step inputs.
* Code within the dc_filter and rms modules now does the
calculations in a sensible manner rather than in a very
slow and brainless stupid way. Harsh, but true.
NOTES:
* The sine module is only marginally faster than the
sine_wave module. The benefits don't really amount to
much until complex wcnt synths are created, and then its
only shaving a few seconds off the time. I'm assuming
it would be faster if wcnt did not do so many virtual
function calls - ie 1 call per module for every sample
processed - but that will not change.
--------------------------------------------------------------
Thursday 27th December 2007
NOTES:
* Still in the process of removing module help out of the
compiled program and into text files...
* Been playing around with wcnt too much...
FIXES:
* synthfilereader::skip_remarks only detected EOF within a
remark (which surely, thinking about it, is impossible).
it now detects EOF properly.
* consequently, when an input_editor or param_editor
definition had a missing editlist (causing EOF) wcnt no
longer crashes. Note: EOF is unavoidable when the
terminating editlist (of the edits) is missing - due to
the nature of the params the editlist consists of.
* comment processing was handled incorrectly. comments
cannot any longer be created with just a single /
character.
* minor memory leaks fixed in duplicate_module methods of
combiner, spreader, stereo_mixer, switcher, and
trig_switcher modules.
* fixed segfault occurring when EOF occurred unexpectedly
in a circumstance (outside of skip_remarks or
read_command) which i've almost certainly immediately
forgotten.
CHANGES:
* (experimental) added reflect parameter to sine_wave
module. this does nothing under normal circumstances,
but when phase_cycles is not set to 1.0, it 'reflects'
the waveform (negating and travelling backwards) when
reflect set to on.
* added start_bar parameter to sequencer. using this, you
may instruct the sequencer to start at whatever bar you
like. good for when you quickly want to hear a new riff
added at the end of a sequence.
NOTES:
* start_bar remains in sequencer despite me thinking it
should be within the time_map. having it in the
sequencer is less restrictive i think, and, i might
change the time_map to also use a start_bar parameter.
this could require several changes in a number of
modules - and,,,, well,,,, you can't expect miracles.
--------------------------------------------------------------
Sunday 16th December 2007
NOTES:
* The orbit module's output differed because one version
of wcnt I tried it with was compiled with -ffast_math
while this version was not. The -ffast_math is what
causes the problem, probably better off without it.
CHANGES:
* Begun writing module help text to display along with the
module definition when requested from the command line.
Currently this help text is part of the executable, maybe
it should be in text files for example in ~/.wcnt_help ?
--------------------------------------------------------------
Saturday 15th December 2007
NOTES:
* Should be out Christmas shopping...
* Is the outputlist only used (when asked from the command
line) to display a module definition? --see orbit fix.
BUGS:
* I noticed a while ago that the output of orbit.wc
differed between this version and the wcnt-1.26-test
version - which I should say are exactly the same. So I
create a .wc file with only three modules, one of which
is the orbit module. I use this wcnt and wcnt-1.26-test
wcnt both with verbose so the orbit::init test results
display.
CHANGES:
* Created tests for checking modules inputs/outputs and
params.
* Added extra methods to fixstrparam, to get a count of
substrings, and to get a substring from an index no.
FIXES:
* Discovered on_off_trig::get_out was not returning
out_attack_state or out_release_state.
* orbit module was returning it's out_x and out_y outputs
despite the outputs having not been added to the output
list. Which confused me slightly.
--------------------------------------------------------------
Friday 14th December 2007
TODO:
* Write conditionally compiled testing code. Something to
set and get inputs and parameters to make sure they are
referenced correctly within each module and data object.
Write code to spot unused inputs/outputs/params.
NOTES:
* Yesterday I got sidetracked writing some code based on
the collumnize function, but to collumnize C++ code and
for it to still compile. This required checking for
quotes etc.
* Tonight I can't remember what else there is to do. I
*know* there is something, somewhere, that I put to the
back of my mind for when I had finished whatever it was
I was doing when I thought of it, but I can't remember
whatever it was that I should be going back to. Lots of
late nights coding. I half asleep at work, am nearly
always late. I wake up when I get home - when I need to
be awake... Such is the life of a hospital porter.
* I'm starting to learn a few more things about gdb now.
Things I've never tried before like conditional breaks
and watches, small things. Which reminds me, I need to
do more memory leak testing for various things.
* I've spent a lot longer on this version and done more
to it than I planned to when I half released the
1.26-testing version. The way it's going seems to be
heading toward, or preparing the way for the new port
class to handle option input/param pairs and groups.
Things tidied up - not everything. Certainly
re-aquainting myself very well with the code I'd
written.
CHANGES:
* Created collumnize function such that when wcnt is asked
from the command line to display a list of types (such
as modules, inputs, data objects) the list is sorted
alphabetically into collumns.
FIXES:
* The memory leak when using
synthfilereader::set_wc_filename
was fixed several days ago now. Was not actually caused
by set_wc_filename, but by synthfilereader::open_file()
causing set_wc_filename to inadvertantly copy using
src == dest.
--------------------------------------------------------------
Thursday 13th December 2007
CHANGES:
* Finished updating header files, and changing access of
certain content to be handled via jwm_globals.
* Removed the creation of the ladspa_loader and
synthmodlist classes from jwm_globals and instead have
them created within main(). However, they are still
accessed via jwm_globals. There was a problem with
dlclose when the ladspa_loader class was created/deleted
within an object (jwm_globals) at global scope. - and all
synthmodules must be deleted before ladspa_loader.
* Removed commandline processing from jwmsynth and created
cmdline class with improved command line handling and
message display. Still needs some work on the logic of
it's functioning. Some options when invoked require
modules or data objects to be created and one option
requires a .wc file to be read - this latter option:
the workings of - was formlerly within jwmsynth...
* Some new command line options:
--dont-run
--help
--longhelp
--about
* Settings like --verbose and --dont-run are accessible to
modules and data objects via jwm_globals (jwmsynth will
simply _not_ run() modules when --dont-run is used).
--------------------------------------------------------------
Sunday 9th December 2007
CHANGES:
* Renamed globals.h to jwm_globals.h. Created jwm_globals
class. Creates instance named jwm. This used instead of
jwm namespace. This is because the classes created,
(formerly by jwmsynth) need to be created in the correct
order.
* Removing includes from header files not required for
declarations. Using forward declarations where possible,
and including in src files only those includes required
for compilation.
NOTES:
* This process to achieve the above changes is also quite
tedious and slow going. It has to be done.
--------------------------------------------------------------
Saturday 8th December 2007
NOTES:
* This reorganization is proving very very very tedious.
It's at times like this I wish I knew how to use grep,
but I can't help thinking that much of what needs doing
is a manual job... Whatever. Tediumus Extremus.
CHANGES:
* Removing static data and methods from dobj, now. It was
mostly the same as that which appeared in synthmod. Into
globals jwm namespace it goes...
* Tidying up the very silly things going on in some of the
set_ and get_ methods...
--------------------------------------------------------------
Friday 7th December 2007
CHANGES:
* Removing static data from synthmod... Or beginning to.
I never really liked how it looked in synthmod...
The data, along with the methods to access it is being
moved to globals.h & globals.cc. The classes are no
longer pointers, but returned as references from
functions with static data...
synthmod class should hopefully look a little more like
how it should - less cluttered.
* Turning synthmod virtual functions for getting inputs,
parameters and outputs to const. Again, this is tricky
because the compiler does not warn that the non const
versions (declared in derived classes) are not the
right ones...
* Removing (mostly 99%) unused non-generic methods for
setting and getting inputs/parameters/outputs (ie
specific set & get methods for specific parameters,
inputs, and outputs). This is because the generic
methods are (mostly) the only methods used (ie the ones
which pass void* data and paramnames, inputnames, and
outputnames types).
* Renamed PAR_TYPE enumerations so they no longer begin
with PAR_ (ie paramnames::PAR_LEVEL becomes
paramnames::LEVEL). Renamed synthmod::SYNTH_MOD_TYPE
enumerations to no longer begin with MOD_.
* Changed synthmod's virtual get_input, get_output and
get_param methods to const... Slowly changing derived
classes...
* Removed number_id member from synthmod, it has always
been unused.
* Removing counts of specific module types. The counts
were used to initialise a particular modules's number_id
member - which was never used for anything except
slightly variating certain error messages.
--------------------------------------------------------------
Thursday 6th December 2007
CHANGES:
* Changed class structure of inputnames, outputnames,
paramnames, dobjnames, synthmodnames, and iocat
(formerly iocat_names). These now include a privately
declared struct to incorporate the name, iocat (for
input/output/param names) and the type (enum). storing
the enum is a small waste of memory but it helps keep
things clear and allows a check (conditional #DEFINE)
to take place to help maintain (for sanity) the correct
order of indices and names (getting these mixed up would
cause trouble).
Within the .cc files for these classes, the layout of
setting the name to the type is now much easier to
read. Lastly, the member functions for these classes
are now const.
* the IOCAT (enum) type is now placed within the iocat
class and the IOCAT enumerations no longer begin with
"CAT_". (ie CAT_DOUBLE is now referred to as
iocat::DOUBLE).
* Am generally going const crazy...
--------------------------------------------------------------
Saturday 1st December 2007
CHANGES:
* Removed lp_average and hp_average filters. These were
the basic implimentations of the original lp_filter and
hp_filter modules. Instead of a frequency, the number of
samples to average was specified. No modulation (the
filters click when modulated). These filters did not
appear in wcnt-1.25, and were just ideas.
FIXES:
* Removed blank paramnames which were laying about from
testing ideas - these caused segmentation faults.
* Some of the new LADSPA interfacing modules were not
validating all of their parameters. They are now.
--------------------------------------------------------------
Friday 31st November 2007
ADDITIONS:
* adsr_scaler - data object - scales the time lengths of
the adsr envelope within an adsr. very basic: you specify
the adsr module to operate on, and then individual amounts
to scale the attack, decay, and release sections.
CHANGES:
* Sure, there's been some, somewhere.
NOTES:
* Added other modules which interface with LADSPA plugins.
--------------------------------------------------------------
Wednesday 20th November 2007
ADDITIONS:
* LADSPA - very early stages here. I'm taking the easy
route, there is no LADSPA module to handle _any_ LADSPA
plugin. I'm selecting plugins I consider important and
then hardcoding them within specialised modules...
* glame_butterworth is a hardcoded LADSPA plugin module
implimenting the GLAME butterworth high and low pass
filters. (But not the x-over filter from the same lib
because it has a different number of ports).
CHANGES:
* added extra check for module validity after the call to
synthmod::init() in jwmsynth. this because LADSPA
modules instantiate the LADSPA plugin within their init
method.
NOTES:
I've rehashed the plugin loading code by Richard Furse
from the LADSPA SDK, into a simple C++ class.
--------------------------------------------------------------
Tuesday 20th November 2007
It's been a long time. I was beginning to think I'd never code
on wcnt ever again (yeah right, as if).
CHANGES:
* now using libsndfile for file input/output. so that...
* some inputs/outputs which were previously 16bit, are now
double precision floating point. other inputs/outputs
which were 16bit are gone altogether.
* in other words all audio signals are around the range of
-1.0 to +1.0 instead of some being in the 16bit integer
range of -32767 to +32767.
* orbit module: fractal orbits for modulating purposes.
nice.
* some other silly little modules barely worth the hassle
which actually i coded a few months prior to this.
--------------------------------------------------------------
*************** CHANGES PRIOR TO 1.26 REMOVED ****************
--------------------------------------------------------------