-
Notifications
You must be signed in to change notification settings - Fork 4
/
ChangeLog
executable file
·2993 lines (2447 loc) · 163 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
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
0.60.11 23 Jan 2013 Maintenance release
This release incorporates changes to the build process submittedd to the project
by Philippe Didier and the Mageia packers team.
It has no new features, it is intended to improve compatability with different
build processes.
0.60.10 27 Apr 2012 Maintenance release
Voices are given a small random detune. Pitchbend would lose this delta which
put the voices back in tune as soon as the pitchwheel moved. That altered the
width of the sound so added in the code necessary to maintain the delta values.
audiothread.c
Added in 'hi-res' skins for some of the emulators. This changes the rendering
to include a vector graphic stage where text and some line are rendered. It
makes the images far more scalable, ie, you can fullscreen them now without
getting pixel smashing.
Retuned the Mini filters. Fixed fastest attack rate to 0.5ms, the envelopes
were getting very 'ticky'. Increased the default Mini release stage to similar
values as note off were ticky unless Release was selected.
Jack MIDI configurations would only respond correctly on channel #1. Any other
channel would have the synth respond to the Jack MIDI messages but lose tracking
from the GUI, lose CC into the GUI as the channel identifiers could be lost in
the internal messaging.
0.60.9 25 Oct 2011 Maintenance release, fanning linear potentiometers
Reworked the envelope to default linear attack and with gentler control of the
decay/release times. The linear attack was a Moog thing but was not universally
appreciated - it does not work very well for long attack times. Several synth
manufacturers preferred the use of exponential for this and other reasons.
The actual envelope code does not have linear or exponential attack as a fixed
value, it can be configured by the emulator although at the moment they all just
take the default setting, now linear. There is a ./configure option to have them
default to exponential rather than linear: --enable-exp-attack
It is now also possible to build with an alternative ADSR max ramp duration,
the following will give you a maximum ramp of 30 seconds, default is 10.
./configure BRISTOL_RAMP_RATE=30
These changes were to correct an anomaly in the previous design where the
actual ramp was a function of the sampling rate, hence if you step up to 96KHz
or even 192KHz for the improved sound quality then the ramp times would change
(now fixed). If you want to use very long attack times then exponential attack
will give arguably better results, that is admittedly opinion.
NOTE that these envelope changes will affect existing patches to some extent.
Added code to have fanning linear pots. The further the mouse is from the axis
of the pot the finer the value changes become.
Resolved a error in midinote.c that broke the scala file support. A patch was
posted to SFDN a long while ago now, this just rolls it into a release.
MIDI Program Change events were not being filtered by channel - they were being
tracked as OMNI. Applied same change to Bank Select. Have not tested all the
multilayered synths, they have exceptions since some use separate memory
indeces and some use combined settings.
Reconfiguring the continuous controllers as things like inverse mappings were
failing. The issue was that both the engine and GUI might be using the same
mapping file, dual inversion negated the effect. Corrected this with only doing
the mapping in the GUI but added a token called modWheel for the 'mcm' file to
allow the engine to have alternative curves for the modulation wheel.
The request to have an inverted modWheel requires the following: Start the
engine with -tracking to prevent the GUI tracking some events. Edit mini.mcm
and add in
modWheel: 127 0.001
modWheel: 0 127.0
This file is emulator global, ie, to have different settings with the same
synth then a user would have to configure different bristol cache variables.
A better way to do this might be to have an ALSA event manager in front of the
bristol emulators.
Ported over some note loss fixes from the 0.70 (smartphone) stream where with
excessive system load there were lost notes. This was never actually reproduced
on Linux so will discuss the fix with end users. The original change resolved
the issue when seen on a 600MHz ARM A8 on Maemo/N900 from Nokia and which were
also tested/confirmed on Android. It concerned signalling between the note
allocation code and the ADSR envelope states.
The multilayered synths would lose tracking of the PitchWheel - the pitch was
correctly calculated but only applied to the first bristolAudio structure in
the chain.
The Polysix gives click/tick at high frequencies and mods. The cause was the
change from the precached buffers to recalculated buffers. The code was changed
to have the buffers always calculated/cached on note events as a fix to the
existing band limited oscillator code. The code change was only the prophetdco
but it could be pushed into the other oscillators.
The BME noise mix was all but silent, readjusted the gain settings for the mix.
The Pro1 and Prophet10 saved sequencer memory was not reloaded on restart. Had
to apply changes to a few different parts of the arpeggiator/sequencer code.
Gain levels seemed low on the ARP 2600 and the Direct Out final stage gain left
a signal that was almost inaudible.
Added the option to use a memory barrier over the jack ringbuffer. The issue
is that the JRB can be demonstrated to fail on ARM CPU due to them having weak
memory ordering. Intel should not be affected. AMD is a marginal case. The
config option is --enable-memory-barrier which defaults to no barrier since
most of the installs will probably be on Intel.
0.60.8 23 Dec 2010 Maintenance release, Hammond optimisations.
Made some changes to the way bristolrc is handled. If the file exists then a
seach is made for two tokens, PREARGS and POSTARGS. If they don't exist then
the same default behaviour takes place: all the contents are concatenated into
a set of options that are inserted before all the user parameters. If either
of these tokens are found then PREARGS are inserted before the user parameters
and POSTARGS are appended to the whole net commandline to the GUI and engine.
This gives a lot more flexibility to override default behaviour, for example:
PREARGS=-count 1024 -rate 48000
POSTARGS=-jackstats -jack -multi 0
Using such contents then the command 'startBristol -mini' would be expanded to
startBristol -count 1024 -rate 48000 -mini -jackstats -jack -multi 0
A part of the reason for the above change was that there were reports of issues
with the ARP 2600 and period sizes less than 1024. The culprit appeared to be
the -multi option, this defaulted to 4 for the 2600. Changed it to default to
zero with a need to then explicitly reconfigure it. The reconfigure can now be
automated in POSTARGS. The diverse Bristol front end appliations such as
monoBristol provide user arguments to the startup script, the current bristolrc
definitions can provide capabilities to extend how they operate as there are now
pre and post arguments that encapsulate the frontend parameters.
This release is noted as including hammond optimisations, these are not with
respect to CPU load, rather with respect to accuracy of the emulation:
Adjusted the B3 Preacher Compression code to provide a more pronounced non-
linear amplification. The results are interesting/different. It mixes well
with the new gearbox generated for a clean tonewheel (mostly sinewaves with
no crosstalk) and a mild crosstalk gearbox with some sliced tonewheel harmonics.
The control is not continuous, there are 3 stages which are selected as the
rotary changes position, this would normally be represented with radiobuttons
however the GUI previously only had a rotary control so this was used to prevent
a big reordering of the options panel layout.
The new tonewheel gearbox are in the factory shadow profiles, per default as
below. To test them then copy the target gearbox to your private memories
(these are the defaults, your installation may be different):
source: /usr/local/share/bristol/memory/profiles/tonewheel*
dest: ~/.bristol/memory/profiles/tonewheel
Also made few alterations to the B3 VC algorithm changing the tap gains and
LC filter values, altered the tap selections for the different 1/2/3 settings
and adjusted the selector mode to reconfigure LC and phase (which work in
combination) rather than the actual tapping points. More work could be done
but these do now give some different characteristics where previously VC3 was
the only useful setting. [Note: it would actually be quite easy to make even
further improvements here by using an alternative filter algorithm into the
different taps. The current one is a rooney which has weak phase modification,
it is similar to the original in as much as that could only introduce about
1ms of phase change however bristol has other algorithms that would give better
phase changes by frequency which would be closer to the Hammond vibra. The
current code overcomes the rooney limitation by taking the phase changed filter
signal (which has a phase change that is dependent on frequency) with an
additional phase change that is time constant. The issue is efficiency, the
rooneys are single pole and come almost for free. ffs]
Reintroduced some B3 code to give contact delays for each drawbar. The delay
is configured in the tonewheel file and is then a function of velocity. The
tonewheel file defines the maximum sample delay before any given harmonic is
activated and this delay is reduced depending on velocity. It is also possible
to configure a click sample per bus out of 4 available however the author
will state that none of the samples is accurate: click, thump, shelf, etc, is
not an accurate emulation. Depending on which source is considered authoritative
then the Hammond click may be a pure function of tonewheel position and its
activation point. This code emulates that effect with the option of adding in
extra effect as a combination of the tonewheel file samples and the overall
click setting. Note that the 'click' level does not affect the cut in points
of the harmonics, reducing the 'click' level will not affect the tick sound
when a drawbar contact is finally made. The harmonics do not have a constant
phase as per the original however the tonewheel file can override that to
emulate the L and M series spinets. With the current code, pressing a key very
slowly should result in the delays between the different busses being almost
audible, an effect that reduces with velocity. The configured Click is reduced
when the vibrachorus is on as is also heard on the originals.
This click code has actually been available for a few years, it was removed as
it affected other developments for gearbox optimisation. This optimisation was
to 'post generate' the tonewheels: if a harmonic was not needed then it would
never be generated. This was not condusive to busbar delays so now the decision
has been taken to drop the CPU optimisation in preference of a more accurate
rendition. At the same time the tonewheel damping was corrected so that, under
control of the Damp option, the summed levels of any given wheel is not linear
but is a function of the number of times it is tapped. It is noted here that
if no click is desired, at all, then the 'preacher' algorithm should be
disabled at which point notes are generated from zero point as per many of
the commercial emulators. Several of the later Hammond models reduced/eliminated
key click using various techniques, disabling the Preacher would give results
closer to the B2XX series organs. Disabling the preacher removes the damping,
busbar offsets, and all the other features of the tonewheel file.
Adjusted the click code to introduce changes to the bus offset delays by key
as well as velocity. The existing code used a single profile per gearbox but no
two keys would have had the same contact profile as this was based on aging of
the springs: the code now has semi-random delay selection. The 'semi' refers to
code that will select the same offsets if the same key is sounded sequentially,
this is how Jimmy Smith used to play key click with the same key - now the
delays for that sequential key do not change (they will if intermediate notes
are sounded which he also did and potentially the delay offsets may be prebuilt
for the whole keyboard rather than calculated, ffs). The different bus delays
only affect timing not the actual effect so if 'Click' is non-zero then the
sample selection per bus will be constant even though the delay changes. Now,
another affect of the bus delays is that if playing quickly it is possible that
a note will start and stop before even all the harmonics have sounded, this is
another trick of Smith when he played notes to not traverse the complete travel
of the key: not all harmonics would actually make contact and this is also
possible with bristol (depending on velocity, buffer size and configured bus
delays).
Added a -keytoggle flag, it affects GUI behaviour where a key is released when
the mouse button is released. Previously the key state latched which was useful
for polyphonic emulators but not necessarily for the monophonic ones. The
default operation is now not to latch the keys, this option overrides the new
default behaviour to give latching keys again.
There were some sticky keys and note 'ticks' when using the monophonic synths
with -nnp (no note preference). The polyphonic note logic could completely kill
notes when overvoice and if a keyoff event occurs for a voice on the new list
then some of the flags would get damaged. None of this happens with monophonic
note preference or with polyphonic synths (well, the ticks may still happen if
the polyphony is exceeded but get burried in the mix of multiple voices, ffs).
Bug report on some emulators defaulting to only one semitone of pitchwheel
depth. This turns out to be emulator aliases: the interface recognises some
alias names but it could not set defaults except on exact names. Incorporated
some changes to accept the known emulator aliases too.
Feature request that the SID should acknowledge pitchbend wheel as well as or
instead of pitchbend on the modwheel. Not a big change and the issue with the
MOD wheel is that it was difficult to tune having no notch. Currently both
controls can affect pitch but the modwheel can be turned on/off selectively.
There was a window when the global configuration options would not be sent to
the engine, a race condition. The result would be no output signal.
There was another race condition in the GUI library which for now has been
patched. The actual fix is a little larger but it will be left for future
research.
Found a bug in the MIDI handling code for NOTE_ON velocity zero being mapped
to NOTE_OFF velocity 64. When the ringbuffer was introduced the check moved to
the wrong side of the ringbuffer causing an endless loop at 100% CPU, for
some emulators quite a lot of nasty random noise and potential system 'hang'
for certain CPU configurations with RT scheduling. This had not been reported
which means either people did not bother or the use of NOTE_ON velocity zero
is not widely used.
Release 0.60.7 had an undocumented feature, undocumented because it was not
that big but it did go into the manual page. The option -jackstats will prevent
bristol from attempting to find out the current jack server settings, these
parameters would instead be defined with -count and -rate. This change fixes
some issues with jack connections, with LADI, and makes the GUI start a bit
faster as it does not have to poll the server from the script then reconnect
to the server from the audio thread.
The BME-700 Glide on/off switch was not active.
Roadrunner Vibrato was too deep, by a long way. Scaled back the tremolo at the
same time. Gentle vibrato was still possible but not under mouse control, it
had to be done with keyboard accel/deccel.
0.60.7 22 Oct 2010 Maintenance release, minor features
Added in an option called -memdump which will copy all memories for a given
synth (specified with -emulate) to a target location. That location is then used
as the session cache so further changes will be made to the dumped memories.
That is intentional: this can be used with Session Management using a target
location in the session directory so that the session will include all of the
synth memories. The copy operation of the user memories only happens once when
the directory is created.
Added in an option call -neutral, this will initialise the emulator with the
value zero for all parameters. This provides a clean sheet from which to start
sound generation. The code is generic and there are some exceptions to where
it is applied: the organs and pianos do not implement the option, some of the
synths are exceptions too (P800, BitOne, DX) as they have a non-intuitive
interface that does not lend itself to being zeroed. For testing the few that
do not implement the option then '-load -1' can be used as a potential
alternative.
Added a runcom file "bristolrc" located in ${BRISTOL_CACHE}/bristolrc which
may contain the parameters that are always provided on the command line. The
parameters will be placed before the command line arguments so that they can
be overridded but they provide the possibility to simplify the command line
that needs to be specified when bristol is invoked. The variable BRISTOL_RC
can override the default location and the -rc option will circumvent it.
The size of the voice table is now a configure time parameter. There were some
requests for optimisation and reducing the size of these tables is a small one.
./configure BRISTOL_VOICECOUNT=32 is the default. This is not the max table
size which continues to be 128 voices: the -voices option is a runtime parameter
that can be used to increase the size of the table above the VOICECOUNT limit,
this ./configure option is just the default.
Resolved an issue with the filter tuning of a few of the emulators, they were
using an incorrect keyboard tracking value which meant that with the filter at
high emphasis there was discordance in the oscillator vs filter waveform
frequencies.
Reworked the summary text for small changes to some of the synth names: they
are sometimes different from the switches used to start them however the actual
name is required to be able to use emulate correctly. The -summary list will
list the emulators that have been finished, --summary will list all of them
even though a selection do not actually operate yet.
Removed the empty pop-up menus. The code is still there however it is no longer
called by either GUI or library. There were diverse requests to stop posting
them as they had no purpose.
Added an initialisation watchdog timer. If the audio thread does not activate
in this period then the engine will gracefully exit rather than just hang
around waiting for somebody to talk to him. The default timer is 30 seconds
but can be changed with the '-watchdog <s>' parameter.
The ARP Axxe was about a semitone out of tune. The cause was the logic behind
the pitch buttons which was broken.
Glide parameter settings could be lost on restart, the 'glidemax' parameter was
not being correctly initialised so remained as zero.
Remedied a test failure for the jackd binary. If jack is requested as the audio
interface then we need to connect to it to find the correct sampling rates and
period sizes. The check for failure of this request was broken.
Fixed a very arbitrary race condition between the audio and midi threads
causing segfaults which only happens during initialisation with heavily loaded
CPU. Doubt if this will have been seen outside of development as the window
was extremely small.
There was a spurious 'newline' debug message when active sense was detected from
a keyboard. Bristol does not support active sensing (except from the GUI) and
whilst these messages did not cause any issue with the synth operation they
were a great annoyance for the command line interface users. The print statement
was put under a debug flag.
0.60.6 11 Aug 2010 Geometry configuration options, maintenance release
Was requested to implement a -geom option which would minimally allow for window
placement onto the screen. This seemed very reasonable so incorporated it. The
option will also take width and height parameters such as 500x200+100+100 and
where necessary break aspect ratio and configure antialiasing. If only one of
width/height is given then aspect ratio is maintained, and options such as
+100+100 will just affect window positioning. Options like -geom 640 will just
set the pixel width, maintain aspect ratio and take default placement, possibly
invoking antialiasing as well.
Randomised the TCP port numbers used to link the GUI to the bristol engine.
There remained an issue with the Jack Session Manager and configurations that
used multiple invocations of bristol: the TCP port identifiers would conflict
causing one of them to fail on reload. I think the option '-host unix:1234' is
a work around the issue as long as '1234' was always unique per bristol but
this only works on localhost as it uses unix domain sockets rather than TCP
domain. The longer term solution was to randomise the port numbers in the range
1024 to 16383, the transient service ports since otherwise there is still a
window for error if the TCP ports are not closed down cleanly (although that
is now finally a rare occurence). The port identifier can still be overridden
and will be inherrited by the JSM interface.
Resolved a few issues with different device drivers. OSS was actually broken for
a while due to incorrect flags and buffers and there were a few ALSA anomalies
although they were inadvertently correct.
Was requested to add a manual page for bristoljackstats for part of the debian
hurdles. Took the chance to also remove two ancillary binaries which generated
notes but were only for QA testing, not general distribution.
Added an option called -sleep which stalls the init process for <n> seconds.
This was too easy not to implement and may help to overcome what looks like a
race conditition when using a session manager to restart multiple Bristol
clients.
Corrected some ./configure options so that they correctly check for jack and
alsa header files rather than just the packages and libraries before including
them in the build. This change included adjusting the default drivers so that
OSS is configured when jack and alsa are not available.
0.60.5 08 Jun 2010 Maintenance release
Fixed an issue with the SID where double clicking on the memory Load button
would turn on the soft chip debug code. This was a development feature that was
not intended to be distributed.
The -mono noise mod was originally just the literal noise source, this is not
a great mod and does not mimic the original which I think used a S&H circuit
on the noise source clocked by Osc3. Reworked this into the emulator anyway,
the sonic qualities are better. This should actually also be put into a few of
the other emulators (Prophets too for example).
The monophonic note logic no longer respected -nnp due to incorrect flag
management. This needed to be corrected as it was backing off to HNP which
implied that the engine ran constantly.
Discarded a check in the ShmImage code so that the check for support in the
server was dropped. Most servers which apparantly support the SHM structures
seemed to be responding negatively to the capabilities request which caused
backoff to the Pixmap interface. The current situation is that when compiled
with SHM support brighton will attempt to use it. If the server really has
issues with that then the -pixmap options will have to be requested manually.
Resolved a timing issue that can occur at startup, the event manager needed to
wait for positive status on the control interface before proceeding. Only
affected single core systems due to threading, and was naturally intermittent.
Failure to initialise the operating gain of the envelope when in some monophonic
note conditions could result in apparant loss of signal until the note states
were fully completed. This would manifest itself as either no output, low output
or even as lost notes over MIDI channels.
Midi debug flags were not being parsed correctly in the engine. Should not have
affected runtime as it was only a debug which is not usually active.
Changed the startBristol shell to request /bin/sh in place of /bin/bash.
0.60.4 23 May 2010 Maintenance release
Coded an interface into the X11 SHM extensions under the configure switch
--enable-shmimage, some that was needed since the latest X11 servers have
dropped their support for XImage interfaces. This left only Pixmap which works
but is rather slow.
Added an option to restrict the rotary controller tracking to pure mouse up/down
rather than geometric positioning. This was on request and is -rud or -rotaryUD,
the value will be a fraction of the current window height. The code will respect
notched controls and similar stepped rotary types.
There was a bug in the event forwarding code that would damage intermittent
messages. The issue was masked for a few reasons: the key events did not use
this code path, controller events would be generated in such high volumes that
the loss was not visible. Program change was affected, also tacked on code to
address bank change events which were previously not distributed to the engine
although the way MIDI does bank management is not really consistent with bristol
memory management: bristol tends to work with banks of 8 or 10 memories as per
the old synths. MIDI runs with banks of 128 memories and the result will be some
overlap. It works as long as a single access method is used.
Added -stop as a method to reap any existing bristol processes. It will kill the
audio process if running which will result in any GUI dying due to the active
sensing. All processes will be terminated which may not be the target action if
multiple engine are being used, the options 'startBristol -kill -mini' will then
only terminate the engine and GUI associated with the mini emulator. This is
also not infallible as one engine could be running multiple emulators however
the goal was really just to terminate a daemonified engine rather than do any
really intelligent process management.
Added -cache as a runtime option to allow specification of the cache path for
memories and profiles.
0.60.3 12 May 2010 Maintenance release
Reincorporated code for channel pressure recognition. It had been dropped from
an earlier release due to dumping core when applying the channel change to all
the voices associated with that channel. Also fixed up some issues with the
poly pressure handling, I think it was want to hit 100% CPU. This was also
ported back to 0.50.8.
Fixed a bug that had been reported a while ago against the MG1/Realistic of
corruption of the GUI image and loss of sound. The GUI corruption was due to
incorrect bounds checking on some bitmap manipulations which were corrected,
a fix that is applicable to all the emulators. There were a couple of other
specific issues with the MG1 and RhodesBass that had other consequences, also
fixed. This was ported back to 0.50.8.
Added in another velocity map: no velocity sensitivity. That should have been
there from the first implementation of maps but I think I got carried away with
the ability to add hundreds of different curves that this got swept aside. It
can now be requested with '-curve 0' to give something like a -3dB constant
velocity level for all struck keys. Ported back.
Put the autozoom feature under a configure time option --disable-autozoom, some
issues were reported where it would be apparantly get activated unexpectedly,
ie, the windows would constantly flip in size even though the -autozoom was not
given as a run time option. The ./configure option also removes the Enter/Leave
tracking which was the more probable cause of the error. There may still be
some issues with KDE4.4 that were reported. This code was tested against 4.3
and it does deliver a lot of seemingly superfluous ConfigureNotify which were
giving the window a Postage Stamp effect. Filtered out the ludicrously small
window sizes that were being proposed.
Added a preinstalled version check to the build scripts to exit configure early
if bristol is already on the system. The issue is that library directories may
be different between the two, most notably when the system package manager has
been used to installed as a part of the OS. It can be overridden with the flag
--disable-version-check although I did consider hiding this under an obfuscated
parameter name as the issue has come up several times now.
Fixed a core dump that could happen without the X11 libraries and a window
request that failed. This would always happen unless the -window option was
given.
The Explorer and Voyager mod bus ramp was actually coded as a square wave. It's
S&H was also very low. This also lead to more changes in the filter cutoff vs.
keyboard tracking, it is now a bit less bipolar.
This version includes a manual page, a common one for bristol, brighton and
startBristol.
0.50.8 05 May 2010 Maintenance updates
Reincorporated code for channel pressure recognition. It had been dropped from
an earlier release due to dumping core when applying the channel change to all
the voices associated with that channel. Also fixed up some issues with the
poly pressure handling, I think it was want to hit 100% CPU. This was ported
back from 0.60.
Fixed a bug that had been reported a while ago against the MG1/Realistic of
corruption of the GUI image and loss of sound. The GUI corruption was due to
incorrect bounds checking on some bitmap manipulations which were corrected,
a fix that is applicable to all the emulators. There were a couple of other
specific issues with the MG1 and RhodesBass that had other consequences, also
fixed. This was ported back from 0.60.
Added in another velocity map: no velocity sensitivity. That should have been
there from the first implementation of maps but I think I got carried away with
the ability to add hundreds of different curves that this got swept aside. It
can now be requested with '-curve 0' to give something like a -3dB constant
velocity level for all struck keys. Also back ported.
0.60.2 28 Apr 2010 Command Line Interface Changes, maintenance release
Added a play mode to the CLI. It can be activated with ':set play' and provides
an alternative key path directly to the frontend to send midi note events. The
code is only monophonic due to the way the raw interface works - there are no
qwerty key 'off' events so they have to be interpreted. It does allow for quick
testing of patches without having to resort to having a keyboard attached to
the engine. Exit from 'play' mode is as with the others, either escape or ':'
which at the moment cannot be remapped, something that might be an issue for
internationalisation.
Andrew requested monophonic sustain pedal support. This does not really fit
into a monophonic instrument: if all notes sustain then with note precedence
the only note heard will be at the outer one. Using sustain with a polyphonic
assignment algorithm over one voice works. For the HNP and LNP another
algorithm was added that holds the other extreme note - the lowest with HNP or
the highest with LNP - this is the note that will fall back when no other keys
are held during sustaining notes. When a more extreme note is played it then
becomes the 'extreme' note.
Julien reported some lost note events which was a bit disconcerting. Reproduced
an issue where the events were not lost but their triggers could be: if a noteOn
event arrived it would set the trigger flags. If a noteOff occured in the
same sample period it would clear these flags which is incorrect for the
monophonic note logic. (to be confirmed). This required a couple more patches
for glide errata reported separately and largely related to inversion of the
glide rate when the pitch wheel was moved causing Inf to be generated.
Colin Fletcher requested that something be done about the device names in jack
and eventually ALSA midi. The fix is not straightforward as the engine does not
know a priori what it has to emulate when it opens the MIDI interface. The
current feature is that the engine recognise the -emulate <synth> and use the
synth name here for all registrations. Added to this another alias called
-register <name> which will set both audio and MIDI devices names to the given
name and can be used to override other settings.
Extended the CLI midi command set to include 'set midi controller <id> <value>'
to give access to the MIDI controller interface. May be of limited operational
use but as a debuging tool it is very helpful - with alias supported it can be
used to generate NRP, RP and the rest. This was implemented to debug Andrews
issues with CC #64 (sustain) and used it to also debug Juliens issue by the
same manipulation of the sustain flags.
Cleaned up the build processes so that they really do not need X11-dev to be
installed. The previous releases did require the X11 headers due to some stray
ifdef in the brighton header files, even if --disable-x11 was requested. Now,
for the correct build process it is necessary to define --disable-ximage too
although the ximage is really informational only, ie, it would not be compiled
anyway without X11 being enabled. It was left in as it gives an error message
regarding the missing X11-dev headers. May remove that in the future.
Cleaned the code up to remove the size warnings. They were almost uniquely on
printf statements. The only remaining warnings should be for some unused
variables which can be cleaned up later, and my explicit warnings for some
potential issues that may need to be taken care of (again, at a later date).
0.60.1 23 Apr 2010 Command Line Interface Changes
This release is primarily a cleanup to the CLI, first released in 0.60.0.
There were a few bugs that became evident, some incorrect cursor positioning
and hence occasional garbled output. A couple of CLI features were also added
which include extensions to the completion and the ability to add commands to
the accelarated keycodes in ESC mode.
Finalised the CLI command completion code such that it can pretty much complete
the whole tree with reasonable help information available.
Changed the CLI alias variable replacement such that variable $i is the param
of that index from the alias command line, the previous syntax was a little bit
unusual where a $ would just take the current variable index and % would make
the variable increment.
set alias trans Osc1 Transpose=$2; Osc2 Transpose=$1
set alias
trans: Osc1 Transpose=$2; Osc2 Transpose=$1
transpose 1.0 0.2
This will set Osc to 1-Octave transpose and Osc2 to 5-Octaves
Added the capability to set CLI key codes in ESC mode to call any :insert mode
command. The interesting feature is to be able to configure aliases in the
CLI and then give then single key accelerator codes:
1. set cli q quit
2. set alias panic set midi panic
2. set cli p panic
3. set alias clidata set cli
3. set cli ? clidata
The first will allow the use of 'q' to exit the emulator, trivial example but
the point is that the CLI :insert mode command 'quit' is now available in ESC
mode. The second one is potentially more useful, it links the ESC mode char p
into a MIDI panic event which causes alls- notes-off. The third one adds a help
function to escape mode: if you now type '?' it will list the CLI accelerator
keys and their functions.
This cli/alias feature can also be used to provide seach accelerators for
selected synth parameters:
set alias vol Volume
set cli v vol
Now when in ESC mode the single key 'v' will take the Cursor to the Volume
control rather than having to /search for it or use the Cursor left/right
motion. Several of these can be constructed to allow fast navigation through
the parameters, one to jump to filter parameters, another to envelope, etc.
Added some options for changing parameters from the :insert mode in addition to
the <Variable>=<value> that was implemented in 0.60.0. The new modes are '+' to
increment by 1%, ++ to increment by the 'set accel' value, and +=<value> to
increment in given steps. Decrement have similar actions too:
mini mem 0 chan 1 # Tune=0.5
00 Tune : 500
mini mem 0 chan 1 # Tune+
00 Tune : 510
mini mem 0 chan 1 # Tune++
00 Tune : 610
mini mem 0 chan 1 # Tune+=0.09
00 Tune : 700
mini mem 0 chan 1 # Tune-
00 Tune : 690
mini mem 0 chan 1 # Tune--
00 Tune : 590
mini mem 0 chan 1 # Tune-=0.09
00 Tune : 500
Some of the same syntax was added into the 'set brighton device <p> <o> <val>'
such that where previously value was an exact value it can now take +=<f> and
-=<f> to give relative changes to variables. This has some value for a few of
the synths (poly800, bit series) where different panels may be required for
data entry and parameter selection. The Poly800 has now been populated with
text names for its panel parameters however to make it useful please contact
the author to get hold of a suitable set of aliases for changing the data entry
controls.
The ARP Odyssey emulator now has a 'Dual' option on one of the VCO. This will
make one VCO assign itself HNP and the other LNP to get two note logic. This
is not really dual voice as there is still only one set of filters and amps. It
is not a feature of the original, it kind of emulates another emulator. To
prevent unexpected results the code is not applied when in polyphonic operation
as it relies on the monophonic note logic to decide which are the highest and
lowest notes being held down. The feature is gimpy but more fun could probably
be had by starting two independent Odyssey on the same engine and midi channel
then applying HNP to one, LNP to the other.
Several changes were again added to the log file processes to remove a race
condition on file open status. This only showed up on multicore configurations.
Patched up some compilation directive errors for FreeBSD distributions, also
removing a stray ALSA header that should have been placed under a compilation
ifdef for removing its support. This was primarily for debian support.
0.60.0 19 Apr 2010 Command Line Interface
Bristol now has a command line interface available from '-cli'. If the code is
built with --disable-x11 then it can be compiled without any X11 dependencies.
When built with X11 then specifying '-cli' will open both the CLI and the GUI.
The CLI is based on a VI type interface and will respond to the arrow cursor
keys: each parameter is available with Left/Right, and it's value can be changed
with Up/Down for accelerated control.
When started it is in escape mode and will also respond to the following keys:
CLI: h left
CLI: l right
CLI: ^k incmin
CLI: k inc
CLI: K incmax
CLI: ^j decmin
CLI: j dec
CLI: J decmax
CLI: M memUp
CLI: m memDown
CLI: r read
CLI: w write
CLI: x toggle
CLI: / search
CLI: u up
CLI: d down
CLI: U fineup
CLI: D finedown
CLI: : insert
These mappings are saved in the synth profile and can be edited to change the
them: '~/.bristol/memory/profiles/<synth>'. These mappings are additional which
means the above values represent the default mappings that always exist. There
is a keyword 'none' which will disable any key operations that you do not want.
They call also be configured from the command line with 'set cli <k> <action>'.
Typing ':' goes the the VI style command line in insert mode and will accept
the following commands:
GUI commands:
find: [free|load] synth memory search
read: load synth memory at the configured index
write: save current synth settings to memory
import: [path [mem]] read a file and save to memory
export: [path [mem]] save synth memory to external file
help: this screen
set: [line|debug]
midi: command set to engine (X)
debug: [on|off] CLI and engine debug settings (CLI only)
bristol: [cont/op/value|register] - operator commands
brighton: [panel|p/d/v] - GUI management commands
cli: [list|<key> action] navigation key management
alias: command aliases, %/$ signs will be remapped parameters
quit: exit application, terminate the emulator
The command line has a history buffer of the most recent 50 commands and any
consequtive duplicates are supressed. When in ':insert' mode then the cursor
motion keys will nagivate this history and give command line editing. The keys
'^p' and '^n' are also history forward and history backwards respectively.
There is a variable called 'set history <n>' which will limit the number of
history lines that are ever displayed, either with the 'history' or the
'set history' command, this is for small displays. The command line can be
edited with ^W (kill-word), ^U (Kill-Line), ^A (start-of-line) and ^E (end-of-
line).
The shell command line history can be re-executed with :!<n>, :<n><TAB>
will complete the line from the history buffer and leave it available for
editing.
When in ':insert' mode the <TAB> key will list available commands and complete
them where possible. Commands strings do not have to be complete to be executed,
they only need to be unique. If a command cannot be found from the above list
with the <TAB> key then the current line is used as a lookup into the synth
parameter list with the following syntax:
: LFO<TAB>
: Osc 3 LFO
: Osc 3 LFO=0.5
The tabbed search here is for the given string anywhere in the synth parameter
name, not at the start of the name. If the string is not unique then the matches
are listed.
When in Escape mode it is possible to search the emulator parameters with the
VI '/search' key and TAB is also available.
/lfo - find all parameters that contain the word lfo, complete if only one
/^lfo - find all parameters that start with lfo, complete if only one
To toggle from ':insert' mode to ESC mode either type ^C (Control-C) or <ESC>.
The CLI is available for the following emulators:
Mini
Explorer
Voyager
Odyssey
Axxe
B3
BME700
Realistic
Juno
Jupiter
PolySix
MonoPoly
OB-X
OB-Xa
Pro1
Prophet5
Prophet52
Prophet10
Sonic-6
Stratus
Trilogy
Sidney
Solina
Vox
VoxM2
RoadRunner
Rhodes
Rhodesbass
The arp2600, bm, bit1, bit99, bit100, dx and poly800 have not been converted
and are for future study. The bit and Poly need a separate interface due to
their input methods. The 2600 needs some method of representing the patch cable
configuration. Now the CLI can still be requested for all of the emulators but
only those listed above have (almost) descriptive text for each parameter.
There are a few CLI variables that can be set:
set history <n>
set savehistory on
set line <n> [CLI line width]
set accel <f> [Controller acceleration for Cursor motion]
The savehistory option will overwrite the emulator profile file with every
'quit' commands. The 'line' option defaults to 80 columns but is configurable
for small Braille displays.
The CLI supports alias definitions:
set alias trans Osc1-Transpose=%
The command 'trans 0.5' will cause a transpose request to be made to the
engine. Multiple commands can be aliased together using ';' between them.
Multiple parameters can be set such as
set alias trans Osc1-Transpose=%; osc2-transpose=%
trans 0.2 0.5
Here, the '%' is replaced with the alias options on the second line, each
% will move the argument list forward. The command will send two different
transpose events to the engine. Conversely:
set alias trans Osc1-Transpose=$; osc2-transpose=$
trans 0.2
Here the '$' does not move the variable forward so the same value is taken.
This will cause the same transpose value to different oscillators. Any defined
aliases will be added to the list of available commands and shown in the help
menu, as will the list of <ESC> mode keyboard shortcuts. Aliases can be deleted
with 'set noalias <name>'.
The CLI prompt can be configured. Typical values could be plain text for the
emulator type but there are also variables available:
set prompt mini
set prompt %algo%:
or more usefully
set prompt "mini %memory%: "
will give
mini 99:
The tokens 'channel', 'algo' and 'panelid' are also recognised.
It is also possible to give the name of any of the synth variables in the prompt
too in which case they are evaluated:
set prompt "%algo% mem %memory% chan %channel% # "
mini mem 23 channel 2 #
set prompt "%algo% layer %PanelSwitch%: "
obxa layer 0:
Fixed an aged issue with the Explorer/Voyager that they produce no sound by
default and even then they are very, very noisy. Not sure why it never got
reported. The noise was originally due to injection to make the filters self
oscillate but become noise after one of the many normalisation rounds.
After integration of the CV IO for the ARP it was time to change the diverse
Keyboard Tracking inputs for the oscillators and filter. Up to now they had been
inactive, the tracking was integral to the operators. Now they can be remapped
from any of the other outputs which gave some facilities to get modwheel to
frequency mapping and improve the filter keybaord tracking.
Change the MIDI device selection such that '-midi alsa' configures a SEQ
interface rather than ALSA raw. This has caused a few error reports from people
who have not got the expected result. Selecting a raw ALSA interface is now done
with '-midi rawalsa' or '-midi alsaraw'.
0.50.7 22 Apr 2010 CV Keyboard Tracking Frequency Control for ARP
After integration of the CV IO for the ARP it was time to change the diverse
Keyboard Tracking inputs for the oscillators and filter. Up to now they had been
inactive, the tracking was integral to the operators. Now they can be remapped
from any of the other outputs which gave some facilities to get modwheel to
frequency mapping and improve the filter keybaord tracking.
Several changes were again added to the log file processes to remove a race
condition on file open status. This only showed up on multicore configurations.
This was a 0.60 backported fix.
Backported the 0.60 fix for an aged issue with the Explorer/Voyager that they
produce no sound by default and even then they are very, very noisy. Not sure
why it never got reported. The noise was originally due to injection to make
the filters self oscillate but become noise after one of the many normalisation
rounds.
Patched up some compilation directive errors for FreeBSD distributions, also
removing a stray ALSA header that should have been placed under a compilation
ifdef for removing its support.
Since the release of 0.60 this stream is now in maintenance only.
0.50.6 08 Apr 2010 Multiple IO Channels for audio/CV, more NRP Controller Support, Jack Session Manager maintenance
Made the audio engine allow for registration of multiple ports into Jack. This
gives the stereo in/out that always existed plus up to 16 additional ports which
will be used according to the emulator requirements. In the short term this will
only be the ARP 2600 which will register 4 extra IO for CV inputs. Future code
will probably be the mixer that has been kind of waiting around for a while now.
The option '-multi <n>' specifies the number of channels that will be opened to
the jack daemon. The input and output signal levels can have a correction
applied to them, -migc and -mogc each take a floating point which will adjust
the gain on the signal, applying it to all channels. The default gains are 1.0.
The signals for this IO are normalised to +/-1.0f although the ARP shouldn't
have issues with a wider signal range. The tests executed in house used two ARP
both connected up to Jack, one driving CV into the other such that the Envelope
from the first was applied to the filter of the second for example. The signal
levels were within the range 0..1.0f from the envelope however AC signal will
have a negative range too. That may be an issue for some other targets that do
not want their CV to go negative so outputs 3 and 4 have a DC normalised signal
with clipping below zero. Extensions to the CV configurations for the other
emulators is for future study. The issue is not how to get the signals into or
out of the emulators but a question of how the routing should be defined. For
the ARP 2600 the signals can be patched as required.
A part of the IO functionality testing was done with session built by the Jack
Session Manager so that two ARP 2600 could be loaded and signals passed between
them. This lead to a number of fixes to parts of the naming structures, not
really bugs, just things that would only really have come to light when running
multiple instances of bristol with jack and jsm. The fixes included removing
any auto-connection options if there were any jsm options present, renaming the
windows so that the title includes the device name from the Jack interface to
help identify windows in duplicated setups, more small adjustments to the
parameters parsed to the JSM command line, some changes to the import and
export routines used to load the JSM saved memories.
Recoded the GUI NRP support so that it can track NRP parameters. It requires
the GUI be started with the -gnrp option. The code does not support ganging:
tying multiple GUI devices to the same NRP however that may change presently.
The existing CC control registration can be used for that purpose. The NRP
support is naturally affected by all the usual limitations of NRP: they are
assigned to MIDI channels not device targets (which SYSEX does do). This means
if two devices are on the same MIDI channel it is up to the user to ensure that
the NRP they use do not have conflicting actions. The NRP mappings are saved in
the same profile as the emulator CC, CM and keyboard mappings. Per default the
mapping table size has 128 entries which matches the CC counts and should be
enough for any of the current emulators. A parameter -nrpcc can be used to
change the table size.
The emulator settings will now be taken from the emulator header files rather
than pure runtime switches. This imposes the use of the '-emulate' option which
previously had this function. The choice was based on a discussion with Andrew
Coughlan: if we are emulating then consider defaulting the closest match to the
original, users can override options afterwards. This means a Hammond will start
with the maximum voice count available, for example, but a Mini Moog will start
with just one voice, highnote precedence. Changing the number of voices after
definition of the emulator can make the Mini run as a polyphonic instrument if
desired. The algorithm search is strict, ie, only the emulator names from
'startBristol -summary' are recognised. This is in contrast to the remaining
parameters that do take some aliases (-arp is the same as -arp2600 for example).
Needed to suppress a few more options from the command line presented by bristol
to the Jack session manager. These were port, rate and count which are all
dynamic parameters anyway. Not supressing them lead to their duplication and
some undesirable side effects of that.
Renormalised the trilogy output signal after some advice on their levels.
Changed the configure flags to include options for separate default audio and
MIDI drivers - Jack audio and ALSA MIDI was quite popular.
Fixes some repainting issues with the vertical sliding controls, they left a
trace of noise on the way down.
0.50.5 03 Apr 2010 Jack Session Manager Immediate fixes
The code now can actually save and reload sessions on request of the jack
session manager API. 0.50.4 will be delisted.
Added a -import flag which will take a file and load it into the synth at init
time. This may fail if the memory was for another emulator however it can ease
file/memory interchange. The memory is not directly saved into the bristol cache
but still needs to be saved to some (free) memory location in the emulator. The
flag is actually an alias for -jsmfile which was required to do the same for
the jack session manager.
Added in runtime options to support keyboard splits. Not sure why this took so