1
2    0.60.10 27 Apr 2012 Maintenance release
3
4Voices are given a small random detune. Pitchbend would lose this delta which
5put the voices back in tune as soon as the pitchwheel moved. That altered the
6width of the sound so added in the code necessary to maintain the delta values.
7audiothread.c
8
9Added in 'hi-res' skins for some of the emulators. This changes the rendering
10to include a vector graphic stage where text and some line are rendered. It
11makes the images far more scalable, ie, you can fullscreen them now without
12getting pixel smashing.
13
14Retuned the Mini filters. Fixed fastest attack rate to 0.5ms, the envelopes
15were getting very 'ticky'. Increased the default Mini release stage to similar
16values as note off were ticky unless Release was selected.
17
18Jack MIDI configurations would only respond correctly on channel #1. Any other
19channel would have the synth respond to the Jack MIDI messages but lose tracking
20from the GUI, lose CC into the GUI as the channel identifiers could be lost in
21the internal messaging.
22
23    0.60.9 25 Oct 2011 Maintenance release, fanning linear potentiometers
24
25Reworked the envelope to default linear attack and with gentler control of the
26decay/release times. The linear attack was a Moog thing but was not universally
27appreciated - it does not work very well for long attack times. Several synth
28manufacturers preferred the use of exponential for this and other reasons.
29The actual envelope code does not have linear or exponential attack as a fixed
30value, it can be configured by the emulator although at the moment they all just
31take the default setting, now linear. There is a ./configure option to have them
32default to exponential rather than linear: --enable-exp-attack
33
34It is now also possible to build with an alternative ADSR max ramp duration,
35the following will give you a maximum ramp of 30 seconds, default is 10.
36./configure BRISTOL_RAMP_RATE=30
37These changes were to correct an anomaly in the previous design where the
38actual ramp was a function of the sampling rate, hence if you step up to 96KHz
39or even 192KHz for the improved sound quality then the ramp times would change
40(now fixed). If you want to use very long attack times then exponential attack
41will give arguably better results, that is admittedly opinion.
42
43NOTE that these envelope changes will affect existing patches to some extent.
44
45Added code to have fanning linear pots. The further the mouse is from the axis
46of the pot the finer the value changes become.
47
48Resolved a error in midinote.c that broke the scala file support. A patch was
49posted to SFDN a long while ago now, this just rolls it into a release.
50
51MIDI Program Change events were not being filtered by channel - they were being
52tracked as OMNI. Applied same change to Bank Select. Have not tested all the
53multilayered synths, they have exceptions since some use separate memory
54indeces and some use combined settings.
55
56Reconfiguring the continuous controllers as things like inverse mappings were
57failing. The issue was that both the engine and GUI might be using the same
58mapping file, dual inversion negated the effect. Corrected this with only doing
59the mapping in the GUI but added a token called modWheel for the 'mcm' file to
60allow the engine to have alternative curves for the modulation wheel.
61
62The request to have an inverted modWheel requires the following: Start the
63engine with -tracking to prevent the GUI tracking some events. Edit mini.mcm
64and add in
65
66modWheel: 127 0.001
67modWheel: 0 127.0
68
69This file is emulator global, ie, to have different settings with the same
70synth then a user would have to configure different bristol cache variables.
71A better way to do this might be to have an ALSA event manager in front of the
72bristol emulators.
73
74Ported over some note loss fixes from the 0.70 (smartphone) stream where with
75excessive system load there were lost notes. This was never actually reproduced
76on Linux so will discuss the fix with end users. The original change resolved
77the issue when seen on a 600MHz ARM A8 on Maemo/N900 from Nokia and which were
78also tested/confirmed on Android. It concerned signalling between the note
79allocation code and the ADSR envelope states.
80
81The multilayered synths would lose tracking of the PitchWheel - the pitch was
82correctly calculated but only applied to the first bristolAudio structure in
83the chain.
84
85The Polysix gives click/tick at high frequencies and mods. The cause was the
86change from the precached buffers to recalculated buffers. The code was changed
87to have the buffers always calculated/cached on note events as a fix to the
88existing band limited oscillator code. The code change was only the prophetdco
89but it could be pushed into the other oscillators.
90
91The BME noise mix was all but silent, readjusted the gain settings for the mix.
92
93The Pro1 and Prophet10 saved sequencer memory was not reloaded on restart. Had
94to apply changes to a few different parts of the arpeggiator/sequencer code.
95
96Gain levels seemed low on the ARP 2600 and the Direct Out final stage gain left
97a signal that was almost inaudible.
98
99Added the option to use a memory barrier over the jack ringbuffer. The issue
100is that the JRB can be demonstrated to fail on ARM CPU due to them having weak
101memory ordering. Intel should not be affected. AMD is a marginal case. The
102config option is --enable-memory-barrier which defaults to no barrier since
103most of the installs will probably be on Intel.
104
105    0.60.8 23 Dec 2010 Maintenance release, Hammond optimisations.
106
107Made some changes to the way bristolrc is handled. If the file exists then a
108seach is made for two tokens, PREARGS and POSTARGS. If they don't exist then
109the same default behaviour takes place: all the contents are concatenated into
110a set of options that are inserted before all the user parameters. If either
111of these tokens are found then PREARGS are inserted before the user parameters
112and POSTARGS are appended to the whole net commandline to the GUI and engine.
113This gives a lot more flexibility to override default behaviour, for example:
114
115PREARGS=-count 1024 -rate 48000
116POSTARGS=-jackstats -jack -multi 0
117
118Using such contents then the command 'startBristol -mini' would be expanded to
119
120startBristol -count 1024 -rate 48000 -mini -jackstats -jack -multi 0
121
122A part of the reason for the above change was that there were reports of issues
123with the ARP 2600 and period sizes less than 1024. The culprit appeared to be
124the -multi option, this defaulted to 4 for the 2600. Changed it to default to
125zero with a need to then explicitly reconfigure it. The reconfigure can now be
126automated in POSTARGS. The diverse Bristol front end appliations such as
127monoBristol provide user arguments to the startup script, the current bristolrc
128definitions can provide capabilities to extend how they operate as there are now
129pre and post arguments that encapsulate the frontend parameters.
130
131This release is noted as including hammond optimisations, these are not with
132respect to CPU load, rather with respect to accuracy of the emulation:
133
134Adjusted the B3 Preacher Compression code to provide a more pronounced non-
135linear amplification. The results are interesting/different. It mixes well
136with the new gearbox generated for a clean tonewheel (mostly sinewaves with
137no crosstalk) and a mild crosstalk gearbox with some sliced tonewheel harmonics.
138The control is not continuous, there are 3 stages which are selected as the
139rotary changes position, this would normally be represented with radiobuttons
140however the GUI previously only had a rotary control so this was used to prevent
141a big reordering of the options panel layout.
142
143The new tonewheel gearbox are in the factory shadow profiles, per default as
144below. To test them then copy the target gearbox to your private memories
145(these are the defaults, your installation may be different):
146
147	source: /usr/local/share/bristol/memory/profiles/tonewheel*
148	dest: ~/.bristol/memory/profiles/tonewheel
149
150Also made few alterations to the B3 VC algorithm changing the tap gains and
151LC filter values, altered the tap selections for the different 1/2/3 settings
152and adjusted the selector mode to reconfigure LC and phase (which work in
153combination) rather than the actual tapping points. More work could be done
154but these do now give some different characteristics where previously VC3 was
155the only useful setting. [Note: it would actually be quite easy to make even
156further improvements here by using an alternative filter algorithm into the
157different taps. The current one is a rooney which has weak phase modification,
158it is similar to the original in as much as that could only introduce about
1591ms of phase change however bristol has other algorithms that would give better
160phase changes by frequency which would be closer to the Hammond vibra. The
161current code overcomes the rooney limitation by taking the phase changed filter
162signal (which has a phase change that is dependent on frequency) with an
163additional phase change that is time constant. The issue is efficiency, the
164rooneys are single pole and come almost for free. ffs]
165
166Reintroduced some B3 code to give contact delays for each drawbar. The delay
167is configured in the tonewheel file and is then a function of velocity. The
168tonewheel file defines the maximum sample delay before any given harmonic is
169activated and this delay is reduced depending on velocity. It is also possible
170to configure a click sample per bus out of 4 available however the author
171will state that none of the samples is accurate: click, thump, shelf, etc, is
172not an accurate emulation. Depending on which source is considered authoritative
173then the Hammond click may be a pure function of tonewheel position and its
174activation point. This code emulates that effect with the option of adding in
175extra effect as a combination of the tonewheel file samples and the overall
176click setting. Note that the 'click' level does not affect the cut in points
177of the harmonics, reducing the 'click' level will not affect the tick sound
178when a drawbar contact is finally made. The harmonics do not have a constant
179phase as per the original however the tonewheel file can override that to
180emulate the L and M series spinets. With the current code, pressing a key very
181slowly should result in the delays between the different busses being almost
182audible, an effect that reduces with velocity. The configured Click is reduced
183when the vibrachorus is on as is also heard on the originals.
184
185This click code has actually been available for a few years, it was removed as
186it affected other developments for gearbox optimisation. This optimisation was
187to 'post generate' the tonewheels: if a harmonic was not needed then it would
188never be generated. This was not condusive to busbar delays so now the decision
189has been taken to drop the CPU optimisation in preference of a more accurate
190rendition. At the same time the tonewheel damping was corrected so that, under
191control of the Damp option, the summed levels of any given wheel is not linear
192but is a function of the number of times it is tapped. It is noted here that
193if no click is desired, at all, then the 'preacher' algorithm should be
194disabled at which point notes are generated from zero point as per many of
195the commercial emulators. Several of the later Hammond models reduced/eliminated
196key click using various techniques, disabling the Preacher would give results
197closer to the B2XX series organs. Disabling the preacher removes the damping,
198busbar offsets, and all the other features of the tonewheel file.
199
200Adjusted the click code to introduce changes to the bus offset delays by key
201as well as velocity. The existing code used a single profile per gearbox but no
202two keys would have had the same contact profile as this was based on aging of
203the springs: the code now has semi-random delay selection. The 'semi' refers to
204code that will select the same offsets if the same key is sounded sequentially,
205this is how Jimmy Smith used to play key click with the same key - now the
206delays for that sequential key do not change (they will if intermediate notes
207are sounded which he also did and potentially the delay offsets may be prebuilt
208for the whole keyboard rather than calculated, ffs). The different bus delays
209only affect timing not the actual effect so if 'Click' is non-zero then the
210sample selection per bus will be constant even though the delay changes. Now,
211another affect of the bus delays is that if playing quickly it is possible that
212a note will start and stop before even all the harmonics have sounded, this is
213another trick of Smith when he played notes to not traverse the complete travel
214of the key: not all harmonics would actually make contact and this is also
215possible with bristol (depending on velocity, buffer size and configured bus
216delays).
217
218Added a -keytoggle flag, it affects GUI behaviour where a key is released when
219the mouse button is released. Previously the key state latched which was useful
220for polyphonic emulators but not necessarily for the monophonic ones. The
221default operation is now not to latch the keys, this option overrides the new
222default behaviour to give latching keys again.
223
224There were some sticky keys and note 'ticks' when using the monophonic synths
225with -nnp (no note preference). The polyphonic note logic could completely kill
226notes when overvoice and if a keyoff event occurs for a voice on the new list
227then some of the flags would get damaged. None of this happens with monophonic
228note preference or with polyphonic synths (well, the ticks may still happen if
229the polyphony is exceeded but get burried in the mix of multiple voices, ffs).
230
231Bug report on some emulators defaulting to only one semitone of pitchwheel
232depth. This turns out to be emulator aliases: the interface recognises some
233alias names but it could not set defaults except on exact names. Incorporated
234some changes to accept the known emulator aliases too.
235
236Feature request that the SID should acknowledge pitchbend wheel as well as or
237instead of pitchbend on the modwheel. Not a big change and the issue with the
238MOD wheel is that it was difficult to tune having no notch. Currently both
239controls can affect pitch but the modwheel can be turned on/off selectively.
240
241There was a window when the global configuration options would not be sent to
242the engine, a race condition. The result would be no output signal.
243
244There was another race condition in the GUI library which for now has been
245patched. The actual fix is a little larger but it will be left for future
246research.
247
248Found a bug in the MIDI handling code for NOTE_ON velocity zero being mapped
249to NOTE_OFF velocity 64. When the ringbuffer was introduced the check moved to
250the wrong side of the ringbuffer causing an endless loop at 100% CPU, for
251some emulators quite a lot of nasty random noise and potential system 'hang'
252for certain CPU configurations with RT scheduling. This had not been reported
253which means either people did not bother or the use of NOTE_ON velocity zero
254is not widely used.
255
256Release 0.60.7 had an undocumented feature, undocumented because it was not
257that big but it did go into the manual page. The option -jackstats will prevent
258bristol from attempting to find out the current jack server settings, these
259parameters would instead be defined with -count and -rate. This change fixes
260some issues with jack connections, with LADI, and makes the GUI start a bit
261faster as it does not have to poll the server from the script then reconnect
262to the server from the audio thread.
263
264The BME-700 Glide on/off switch was not active.
265
266Roadrunner Vibrato was too deep, by a long way. Scaled back the tremelo at the
267same time. Gentle vibrato was still possible but not under mouse control, it
268had to be done with keyboard accel/deccel.
269
270    0.60.7 22 Oct 2010 Maintenance release, minor features
271
272Added in an option called -memdump which will copy all memories for a given
273synth (specified with -emulate) to a target location. That location is then used
274as the session cache so further changes will be made to the dumped memories.
275That is intentional: this can be used with Session Management using a target
276location in the session directory so that the session will include all of the
277synth memories. The copy operation of the user memories only happens once when
278the directory is created.
279
280Added in an option call -neutral, this will initialise the emulator with the
281value zero for all parameters. This provides a clean sheet from which to start
282sound generation. The code is generic and there are some exceptions to where
283it is applied: the organs and pianos do not implement the option, some of the
284synths are exceptions too (P800, BitOne, DX) as they have a non-intuitive
285interface that does not lend itself to being zeroed. For testing the few that
286do not implement the option then '-load -1' can be used as a potential
287alternative.
288
289Added a runcom file "bristolrc" located in ${BRISTOL_CACHE}/bristolrc which
290may contain the parameters that are always provided on the command line. The
291parameters will be placed before the command line arguments so that they can
292be overridded but they provide the possibility to simplify the command line
293that needs to be specified when bristol is invoked. The variable BRISTOL_RC
294can override the default location and the -rc option will circumvent it.
295
296The size of the voice table is now a configure time parameter. There were some
297requests for optimisation and reducing the size of these tables is a small one.
298./configure BRISTOL_VOICECOUNT=32 is the default. This is not the max table
299size which continues to be 128 voices: the -voices option is a runtime parameter
300that can be used to increase the size of the table above the VOICECOUNT limit,
301this ./configure option is just the default.
302
303Resolved an issue with the filter tuning of a few of the emulators, they were
304using an incorrect keyboard tracking value which meant that with the filter at
305high emphasis there was discordance in the oscillator vs filter waveform
306frequencies.
307
308Reworked the summary text for small changes to some of the synth names: they
309are sometimes different from the switches used to start them however the actual
310name is required to be able to use emulate correctly. The -summary list will
311list the emulators that have been finished, --summary will list all of them
312even though a selection do not actually operate yet.
313
314Removed the empty pop-up menus. The code is still there however it is no longer
315called by either GUI or library. There were diverse requests to stop posting
316them as they had no purpose.
317
318Added an initialisation watchdog timer. If the audio thread does not activate
319in this period then the engine will gracefully exit rather than just hang
320around waiting for somebody to talk to him. The default timer is 30 seconds
321but can be changed with the '-watchdog <s>' parameter.
322
323The ARP Axxe was about a semitone out of tune. The cause was the logic behind
324the pitch buttons which was broken.
325
326Glide parameter settings could be lost on restart, the 'glidemax' parameter was
327not being correctly initialised so remained as zero.
328
329Remedied a test failure for the jackd binary. If jack is requested as the audio
330interface then we need to connect to it to find the correct sampling rates and
331period sizes. The check for failure of this request was broken.
332
333Fixed a very arbitrary race condition between the audio and midi threads
334causing segfaults which only happens during initialisation with heavily loaded
335CPU. Doubt if this will have been seen outside of development as the window
336was extremely small.
337
338There was a spurious 'newline' debug message when active sense was detected from
339a keyboard. Bristol does not support active sensing (except from the GUI) and
340whilst these messages did not cause any issue with the synth operation they
341were a great annoyance for the command line interface users. The print statement
342was put under a debug flag.
343
344    0.60.6 11 Aug 2010 Geometry configuration options, maintenance release
345
346Was requested to implement a -geom option which would minimally allow for window
347placement onto the screen. This seemed very reasonable so incorporated it. The
348option will also take width and height parameters such as 500x200+100+100 and
349where necessary break aspect ratio and configure antialiasing. If only one of
350width/height is given then aspect ratio is maintained, and options such as
351+100+100 will just affect window positioning. Options like -geom 640 will just
352set the pixel width, maintain aspect ratio and take default placement, possibly
353invoking antialiasing as well.
354
355Randomised the TCP port numbers used to link the GUI to the bristol engine.
356There remained an issue with the Jack Session Manager and configurations that
357used multiple invocations of bristol: the TCP port identifiers would conflict
358causing one of them to fail on reload. I think the option '-host unix:1234' is
359a work around the issue as long as '1234' was always unique per bristol but
360this only works on localhost as it uses unix domain sockets rather than TCP
361domain. The longer term solution was to randomise the port numbers in the range
3621024 to 16383, the transient service ports since otherwise there is still a
363window for error if the TCP ports are not closed down cleanly (although that
364is now finally a rare occurence). The port identifier can still be overridden
365and will be inherrited by the JSM interface.
366
367Resolved a few issues with different device drivers. OSS was actually broken for
368a while due to incorrect flags and buffers and there were a few ALSA anomalies
369although they were inadvertently correct.
370
371Was requested to add a manual page for bristoljackstats for part of the debian
372hurdles. Took the chance to also remove two ancillary binaries which generated
373notes but were only for QA testing, not general distribution.
374
375Added an option called -sleep which stalls the init process for <n> seconds.
376This was too easy not to implement and may help to overcome what looks like a
377race conditition when using a session manager to restart multiple Bristol
378clients.
379
380Corrected some ./configure options so that they correctly check for jack and
381alsa header files rather than just the packages and libraries before including
382them in the build. This change included adjusting the default drivers so that
383OSS is configured when jack and alsa are not available.
384
385    0.60.5 08 Jun 2010 Maintenance release
386
387Fixed an issue with the SID where double clicking on the memory Load button
388would turn on the soft chip debug code. This was a development feature that was
389not intended to be distributed.
390
391The -mono noise mod was originally just the literal noise source, this is not
392a great mod and does not mimic the original which I think used a S&H circuit
393on the noise source clocked by Osc3. Reworked this into the emulator anyway,
394the sonic qualities are better. This should actually also be put into a few of
395the other emulators (Prophets too for example).
396
397The monophonic note logic no longer respected -nnp due to incorrect flag
398management. This needed to be corrected as it was backing off to HNP which
399implied that the engine ran constantly.
400
401Discarded a check in the ShmImage code so that the check for support in the
402server was dropped. Most servers which apparantly support the SHM structures
403seemed to be responding negatively to the capabilities request which caused
404backoff to the Pixmap interface. The current situation is that when compiled
405with SHM support brighton will attempt to use it. If the server really has
406issues with that then the -pixmap options will have to be requested manually.
407
408Resolved a timing issue that can occur at startup, the event manager needed to
409wait for positive status on the control interface before proceeding. Only
410affected single core systems due to threading, and was naturally intermittent.
411
412Failure to initialise the operating gain of the envelope when in some monophonic
413note conditions could result in apparant loss of signal until the note states
414were fully completed. This would manifest itself as either no output, low output
415or even as lost notes over MIDI channels.
416
417Midi debug flags were not being parsed correctly in the engine. Should not have
418affected runtime as it was only a debug which is not usually active.
419
420Changed the startBristol shell to request /bin/sh in place of /bin/bash.
421
422    0.60.4 23 May 2010 Maintenance release
423
424Coded an interface into the X11 SHM extensions under the configure switch
425--enable-shmimage, some that was needed since the latest X11 servers have
426dropped their support for XImage interfaces. This left only Pixmap which works
427but is rather slow.
428
429Added an option to restrict the rotary controller tracking to pure mouse up/down
430rather than geometric positioning. This was on request and is -rud or -rotaryUD,
431the value will be a fraction of the current window height. The code will respect
432notched controls and similar stepped rotary types.
433
434There was a bug in the event forwarding code that would damage intermittent
435messages. The issue was masked for a few reasons: the key events did not use
436this code path, controller events would be generated in such high volumes that
437the loss was not visible. Program change was affected, also tacked on code to
438address bank change events which were previously not distributed to the engine
439although the way MIDI does bank management is not really consistent with bristol
440memory management: bristol tends to work with banks of 8 or 10 memories as per
441the old synths. MIDI runs with banks of 128 memories and the result will be some
442overlap. It works as long as a single access method is used.
443
444Added -stop as a method to reap any existing bristol processes. It will kill the
445audio process if running which will result in any GUI dying due to the active
446sensing. All processes will be terminated which may not be the target action if
447multiple engine are being used, the options 'startBristol -kill -mini' will then
448only terminate the engine and GUI associated with the mini emulator. This is
449also not infallible as one engine could be running multiple emulators however
450the goal was really just to terminate a daemonified engine rather than do any
451really intelligent process management.
452
453Added -cache as a runtime option to allow specification of the cache path for
454memories and profiles.
455
456    0.60.3 12 May 2010 Maintenance release
457
458Reincorporated code for channel pressure recognition. It had been dropped from
459an earlier release due to dumping core when applying the channel change to all
460the voices associated with that channel. Also fixed up some issues with the
461poly pressure handling, I think it was want to hit 100% CPU. This was also
462ported back to 0.50.8.
463
464Fixed a bug that had been reported a while ago against the MG1/Realistic of
465corruption of the GUI image and loss of sound. The GUI corruption was due to
466incorrect bounds checking on some bitmap manipulations which were corrected,
467a fix that is applicable to all the emulators. There were a couple of other
468specific issues with the MG1 and RhodesBass that had other consequences, also
469fixed. This was ported back to 0.50.8.
470
471Added in another velocity map: no velocity sensitivity. That should have been
472there from the first implementation of maps but I think I got carried away with
473the ability to add hundreds of different curves that this got swept aside. It
474can now be requested with '-curve 0' to give something like a -3dB constant
475velocity level for all struck keys. Ported back.
476
477Put the autozoom feature under a configure time option --disable-autozoom, some
478issues were reported where it would be apparantly get activated unexpectedly,
479ie, the windows would constantly flip in size even though the -autozoom was not
480given as a run time option. The ./configure option also removes the Enter/Leave
481tracking which was the more probable cause of the error. There may still be
482some issues with KDE4.4 that were reported. This code was tested against 4.3
483and it does deliver a lot of seemingly superfluous ConfigureNotify which were
484giving the window a Postage Stamp effect. Filtered out the ludicrously small
485window sizes that were being proposed.
486
487Added a preinstalled version check to the build scripts to exit configure early
488if bristol is already on the system. The issue is that library directories may
489be different between the two, most notably when the system package manager has
490been used to installed as a part of the OS. It can be overridden with the flag
491--disable-version-check although I did consider hiding this under an obfuscated
492parameter name as the issue has come up several times now.
493
494Fixed a core dump that could happen without the X11 libraries and a window
495request that failed. This would always happen unless the -window option was
496given.
497
498The Explorer and Voyager mod bus ramp was actually coded as a square wave. It's
499S&H was also very low. This also lead to more changes in the filter cutoff vs.
500keyboard tracking, it is now a bit less bipolar.
501
502This version includes a manual page, a common one for bristol, brighton and
503startBristol.
504
505    0.50.8 05 May 2010 Maintenance updates
506
507Reincorporated code for channel pressure recognition. It had been dropped from
508an earlier release due to dumping core when applying the channel change to all
509the voices associated with that channel. Also fixed up some issues with the
510poly pressure handling, I think it was want to hit 100% CPU. This was ported
511back from 0.60.
512
513Fixed a bug that had been reported a while ago against the MG1/Realistic of
514corruption of the GUI image and loss of sound. The GUI corruption was due to
515incorrect bounds checking on some bitmap manipulations which were corrected,
516a fix that is applicable to all the emulators. There were a couple of other
517specific issues with the MG1 and RhodesBass that had other consequences, also
518fixed. This was ported back from 0.60.
519
520Added in another velocity map: no velocity sensitivity. That should have been
521there from the first implementation of maps but I think I got carried away with
522the ability to add hundreds of different curves that this got swept aside. It
523can now be requested with '-curve 0' to give something like a -3dB constant
524velocity level for all struck keys. Also back ported.
525
526    0.60.2 28 Apr 2010 Command Line Interface Changes, maintenance release
527
528Added a play mode to the CLI. It can be activated with ':set play' and provides
529an alternative key path directly to the frontend to send midi note events. The
530code is only monophonic due to the way the raw interface works - there are no
531qwerty key 'off' events so they have to be interpreted. It does allow for quick
532testing of patches without having to resort to having a keyboard attached to
533the engine. Exit from 'play' mode is as with the others, either escape or ':'
534which at the moment cannot be remapped, something that might be an issue for
535internationalisation.
536
537Andrew requested monophonic sustain pedal support. This does not really fit
538into a monophonic instrument: if all notes sustain then with note precedence
539the only note heard will be at the outer one. Using sustain with a polyphonic
540assignment algorithm over one voice works. For the HNP and LNP another
541algorithm was added that holds the other extreme note - the lowest with HNP or
542the highest with LNP - this is the note that will fall back when no other keys
543are held during sustaining notes. When a more extreme note is played it then
544becomes the 'extreme' note.
545
546Julien reported some lost note events which was a bit disconcerting. Reproduced
547an issue where the events were not lost but their triggers could be: if a noteOn
548event arrived it would set the trigger flags. If a noteOff occured in the
549same sample period it would clear these flags which is incorrect for the
550monophonic note logic. (to be confirmed). This required a couple more patches
551for glide errata reported separately and largely related to inversion of the
552glide rate when the pitch wheel was moved causing Inf to be generated.
553
554Colin Fletcher requested that something be done about the device names in jack
555and eventually ALSA midi. The fix is not straightforward as the engine does not
556know a priori what it has to emulate when it opens the MIDI interface. The
557current feature is that the engine recognise the -emulate <synth> and use the
558synth name here for all registrations. Added to this another alias called
559-register <name> which will set both audio and MIDI devices names to the given
560name and can be used to override other settings.
561
562Extended the CLI midi command set to include 'set midi controller <id> <value>'
563to give access to the MIDI controller interface. May be of limited operational
564use but as a debuging tool it is very helpful - with alias supported it can be
565used to generate NRP, RP and the rest. This was implemented to debug Andrews
566issues with CC #64 (sustain) and used it to also debug Juliens issue by the
567same manipulation of the sustain flags.
568
569Cleaned up the build processes so that they really do not need X11-dev to be
570installed. The previous releases did require the X11 headers due to some stray
571ifdef in the brighton header files, even if --disable-x11 was requested. Now,
572for the correct build process it is necessary to define --disable-ximage too
573although the ximage is really informational only, ie, it would not be compiled
574anyway without X11 being enabled. It was left in as it gives an error message
575regarding the missing X11-dev headers. May remove that in the future.
576
577Cleaned the code up to remove the size warnings. They were almost uniquely on
578printf statements. The only remaining warnings should be for some unused
579variables which can be cleaned up later, and my explicit warnings for some
580potential issues that may need to be taken care of (again, at a later date).
581
582    0.60.1 23 Apr 2010 Command Line Interface Changes
583
584This release is primarily a cleanup to the CLI, first released in 0.60.0.
585There were a few bugs that became evident, some incorrect cursor positioning
586and hence occasional garbled output. A couple of CLI features were also added
587which include extensions to the completion and the ability to add commands to
588the accelarated keycodes in ESC mode.
589
590Finalised the CLI command completion code such that it can pretty much complete
591the whole tree with reasonable help information available.
592
593Changed the CLI alias variable replacement such that variable $i is the param
594of that index from the alias command line, the previous syntax was a little bit
595unusual where a $ would just take the current variable index and % would make
596the variable increment.
597
598set alias trans Osc1 Transpose=$2; Osc2 Transpose=$1
599set alias
600       trans: Osc1 Transpose=$2; Osc2 Transpose=$1
601transpose 1.0 0.2
602
603This will set Osc to 1-Octave transpose and Osc2 to 5-Octaves
604
605Added the capability to set CLI key codes in ESC mode to call any :insert mode
606command. The interesting feature is to be able to configure aliases in the
607CLI and then give then single key accelerator codes:
608
6091. set cli q quit
6102. set alias panic set midi panic
6112. set cli p panic
6123. set alias clidata set cli
6133. set cli ? clidata
614
615The first will allow the use of 'q' to exit the emulator, trivial example but
616the point is that the CLI :insert mode command 'quit' is now available in ESC
617mode. The second one is potentially more useful, it links the ESC mode char p
618into a MIDI panic event which causes alls- notes-off. The third one adds a help
619function to escape mode: if you now type '?' it will list the CLI accelerator
620keys and their functions.
621
622This cli/alias feature can also be used to provide seach accelerators for
623selected synth parameters:
624
625set alias vol Volume
626set cli v vol
627
628Now when in ESC mode the single key 'v' will take the Cursor to the Volume
629control rather than having to /search for it or use the Cursor left/right
630motion. Several of these can be constructed to allow fast navigation through
631the parameters, one to jump to filter parameters, another to envelope, etc.
632
633Added some options for changing parameters from the :insert mode in addition to
634the <Variable>=<value> that was implemented in 0.60.0. The new modes are '+' to
635increment by 1%, ++ to increment by the 'set accel' value, and +=<value> to
636increment in given steps. Decrement have similar actions too:
637
638mini mem 0 chan 1 # Tune=0.5
63900 Tune                     :  500
640mini mem 0 chan 1 # Tune+
64100 Tune                     :  510
642mini mem 0 chan 1 # Tune++
64300 Tune                     :  610
644mini mem 0 chan 1 # Tune+=0.09
64500 Tune                     :  700
646mini mem 0 chan 1 # Tune-
64700 Tune                     :  690
648mini mem 0 chan 1 # Tune--
64900 Tune                     :  590
650mini mem 0 chan 1 # Tune-=0.09
65100 Tune                     :  500
652
653Some of the same syntax was added into the 'set brighton device <p> <o> <val>'
654such that where previously value was an exact value it can now take +=<f> and
655-=<f> to give relative changes to variables. This has some value for a few of
656the synths (poly800, bit series) where different panels may be required for
657data entry and parameter selection. The Poly800 has now been populated with
658text names for its panel parameters however to make it useful please contact
659the author to get hold of a suitable set of aliases for changing the data entry
660controls.
661
662
663The ARP Odyssey emulator now has a 'Dual' option on one of the VCO. This will
664make one VCO assign itself HNP and the other LNP to get two note logic. This
665is not really dual voice as there is still only one set of filters and amps. It
666is not a feature of the original, it kind of emulates another emulator. To
667prevent unexpected results the code is not applied when in polyphonic operation
668as it relies on the monophonic note logic to decide which are the highest and
669lowest notes being held down. The feature is gimpy but more fun could probably
670be had by starting two independent Odyssey on the same engine and midi channel
671then applying HNP to one, LNP to the other.
672
673Several changes were again added to the log file processes to remove a race
674condition on file open status. This only showed up on multicore configurations.
675
676Patched up some compilation directive errors for FreeBSD distributions, also
677removing a stray ALSA header that should have been placed under a compilation
678ifdef for removing its support. This was primarily for debian support.
679
680    0.60.0 19 Apr 2010 Command Line Interface
681
682Bristol now has a command line interface available from '-cli'. If the code is
683built with --disable-x11 then it can be compiled without any X11 dependencies.
684When built with X11 then specifying '-cli' will open both the CLI and the GUI.
685
686The CLI is based on a VI type interface and will respond to the arrow cursor
687keys: each parameter is available with Left/Right, and it's value can be changed
688with Up/Down for accelerated control.
689
690When started it is in escape mode and will also respond to the following keys:
691
692CLI: h left
693CLI: l right
694CLI: ^k incmin
695CLI: k inc
696CLI: K incmax
697CLI: ^j decmin
698CLI: j dec
699CLI: J decmax
700CLI: M memUp
701CLI: m memDown
702CLI: r read
703CLI: w write
704CLI: x toggle
705CLI: / search
706CLI: u up
707CLI: d down
708CLI: U fineup
709CLI: D finedown
710CLI: : insert
711
712These mappings are saved in the synth profile and can be edited to change the
713them: '~/.bristol/memory/profiles/<synth>'. These mappings are additional which
714means the above values represent the default mappings that always exist. There
715is a keyword 'none' which will disable any key operations that you do not want.
716They call also be configured from the command line with 'set cli <k> <action>'.
717
718Typing ':' goes the the VI style command line in insert mode and will accept
719the following commands:
720
721GUI commands:
722
723        find: [free|load] synth memory search
724        read: load synth memory at the configured index
725       write: save current synth settings to memory
726      import: [path [mem]] read a file and save to memory
727      export: [path [mem]] save synth memory to external file
728        help: this screen
729         set: [line|debug]
730        midi: command set to engine (X)
731       debug: [on|off] CLI and engine debug settings (CLI only)
732     bristol: [cont/op/value|register] - operator commands
733    brighton: [panel|p/d/v] - GUI management commands
734         cli: [list|<key> action] navigation key management
735       alias: command aliases, %/$ signs will be remapped parameters
736        quit: exit application, terminate the emulator
737
738The command line has a history buffer of the most recent 50 commands and any
739consequtive duplicates are supressed. When in ':insert' mode then the cursor
740motion keys will nagivate this history and give command line editing. The keys
741'^p' and '^n' are also history forward and history backwards respectively.
742There is a variable called 'set history <n>' which will limit the number of
743history lines that are ever displayed, either with the 'history' or the
744'set history' command, this is for small displays. The command line can be
745edited with ^W (kill-word), ^U (Kill-Line), ^A (start-of-line) and ^E (end-of-
746line).
747
748The shell command line history can be re-executed with :!<n>, :<n><TAB>
749will complete the line from the history buffer and leave it available for
750editing.
751
752When in ':insert' mode the <TAB> key will list available commands and complete
753them where possible. Commands strings do not have to be complete to be executed,
754they only need to be unique. If a command cannot be found from the above list
755with the <TAB> key then the current line is used as a lookup into the synth
756parameter list with the following syntax:
757
758: LFO<TAB>
759: Osc 3 LFO
760: Osc 3 LFO=0.5
761
762The tabbed search here is for the given string anywhere in the synth parameter
763name, not at the start of the name. If the string is not unique then the matches
764are listed.
765
766When in Escape mode it is possible to search the emulator parameters with the
767VI '/search' key and TAB is also available.
768
769/lfo - find all parameters that contain the word lfo, complete if only one
770/^lfo - find all parameters that start with lfo, complete if only one
771
772To toggle from ':insert' mode to ESC mode either type ^C (Control-C) or <ESC>.
773
774The CLI is available for the following emulators:
775
776    Mini
777    Explorer
778    Voyager
779    Odyssey
780    Axxe
781    B3
782    BME700
783    Realistic
784    Juno
785    Jupiter
786    PolySix
787    MonoPoly
788    OB-X
789    OB-Xa
790    Pro1
791    Prophet5
792    Prophet52
793    Prophet10
794    Sonic-6
795    Stratus
796    Trilogy
797    Sidney
798    Solina
799    Vox
800    VoxM2
801    RoadRunner
802    Rhodes
803    Rhodesbass
804
805The arp2600, bm, bit1, bit99, bit100, dx and poly800 have not been converted
806and are for future study. The bit and Poly need a separate interface due to
807their input methods. The 2600 needs some method of representing the patch cable
808configuration. Now the CLI can still be requested for all of the emulators but
809only those listed above have (almost) descriptive text for each parameter.
810
811There are a few CLI variables that can be set:
812
813set history <n>
814set savehistory on
815set line <n> [CLI line width]
816set accel <f> [Controller acceleration for Cursor motion]
817
818The savehistory option will overwrite the emulator profile file with every
819'quit' commands. The 'line' option defaults to 80 columns but is configurable
820for small Braille displays.
821
822The CLI supports alias definitions:
823
824set alias trans Osc1-Transpose=%
825
826The command 'trans 0.5' will cause a transpose request to be made to the
827engine. Multiple commands can be aliased together using ';' between them.
828Multiple parameters can be set such as
829
830set alias trans Osc1-Transpose=%; osc2-transpose=%
831trans 0.2 0.5
832
833Here, the '%' is replaced with the alias options on the second line, each
834% will move the argument list forward. The command will send two different
835transpose events to the engine. Conversely:
836
837set alias trans Osc1-Transpose=$; osc2-transpose=$
838trans 0.2
839
840Here the '$' does not move the variable forward so the same value is taken.
841This will cause the same transpose value to different oscillators. Any defined
842aliases will be added to the list of available commands and shown in the help
843menu, as will the list of <ESC> mode keyboard shortcuts. Aliases can be deleted
844with 'set noalias <name>'.
845
846The CLI prompt can be configured. Typical values could be plain text for the
847emulator type but there are also variables available:
848
849set prompt mini
850set prompt %algo%:
851or more usefully
852set prompt "mini %memory%: "
853will give
854mini 99:
855
856The tokens 'channel', 'algo' and 'panelid' are also recognised.
857It is also possible to give the name of any of the synth variables in the prompt
858too in which case they are evaluated:
859
860set prompt "%algo% mem %memory% chan %channel% # "
861mini mem 23 channel 2 #
862
863set prompt "%algo% layer %PanelSwitch%: "
864obxa layer 0:
865
866
867
868Fixed an aged issue with the Explorer/Voyager that they produce no sound by
869default and even then they are very, very noisy. Not sure why it never got
870reported. The noise was originally due to injection to make the filters self
871oscillate but become noise after one of the many normalisation rounds.
872
873After integration of the CV IO for the ARP it was time to change the diverse
874Keyboard Tracking inputs for the oscillators and filter. Up to now they had been
875inactive, the tracking was integral to the operators. Now they can be remapped
876from any of the other outputs which gave some facilities to get modwheel to
877frequency mapping and improve the filter keybaord tracking.
878
879Change the MIDI device selection such that '-midi alsa' configures a SEQ
880interface rather than ALSA raw. This has caused a few error reports from people
881who have not got the expected result. Selecting a raw ALSA interface is now done
882with '-midi rawalsa' or '-midi alsaraw'.
883
884    0.50.7 22 Apr 2010 CV Keyboard Tracking Frequency Control for ARP
885
886After integration of the CV IO for the ARP it was time to change the diverse
887Keyboard Tracking inputs for the oscillators and filter. Up to now they had been
888inactive, the tracking was integral to the operators. Now they can be remapped
889from any of the other outputs which gave some facilities to get modwheel to
890frequency mapping and improve the filter keybaord tracking.
891
892Several changes were again added to the log file processes to remove a race
893condition on file open status. This only showed up on multicore configurations.
894This was a 0.60 backported fix.
895
896Backported the 0.60 fix for an aged issue with the Explorer/Voyager that they
897produce no sound by default and even then they are very, very noisy. Not sure
898why it never got reported. The noise was originally due to injection to make
899the filters self oscillate but become noise after one of the many normalisation
900rounds.
901
902Patched up some compilation directive errors for FreeBSD distributions, also
903removing a stray ALSA header that should have been placed under a compilation
904ifdef for removing its support.
905
906Since the release of 0.60 this stream is now in maintenance only.
907
908    0.50.6 08 Apr 2010 Multiple IO Channels for audio/CV, more NRP Controller Support, Jack Session Manager maintenance
909
910Made the audio engine allow for registration of multiple ports into Jack. This
911gives the stereo in/out that always existed plus up to 16 additional ports which
912will be used according to the emulator requirements. In the short term this will
913only be the ARP 2600 which will register 4 extra IO for CV inputs. Future code
914will probably be the mixer that has been kind of waiting around for a while now.
915The option '-multi <n>' specifies the number of channels that will be opened to
916the jack daemon. The input and output signal levels can have a correction
917applied to them, -migc and -mogc each take a floating point which will adjust
918the gain on the signal, applying it to all channels. The default gains are 1.0.
919
920The signals for this IO are normalised to +/-1.0f although the ARP shouldn't
921have issues with a wider signal range. The tests executed in house used two ARP
922both connected up to Jack, one driving CV into the other such that the Envelope
923from the first was applied to the filter of the second for example. The signal
924levels were within the range 0..1.0f from the envelope however AC signal will
925have a negative range too. That may be an issue for some other targets that do
926not want their CV to go negative so outputs 3 and 4 have a DC normalised signal
927with clipping below zero. Extensions to the CV configurations for the other
928emulators is for future study. The issue is not how to get the signals into or
929out of the emulators but a question of how the routing should be defined. For
930the ARP 2600 the signals can be patched as required.
931
932A part of the IO functionality testing was done with session built by the Jack
933Session Manager so that two ARP 2600 could be loaded and signals passed between
934them. This lead to a number of fixes to parts of the naming structures, not
935really bugs, just things that would only really have come to light when running
936multiple instances of bristol with jack and jsm. The fixes included removing
937any auto-connection options if there were any jsm options present, renaming the
938windows so that the title includes the device name from the Jack interface to
939help identify windows in duplicated setups, more small adjustments to the
940parameters parsed to the JSM command line, some changes to the import and
941export routines used to load the JSM saved memories.
942
943Recoded the GUI NRP support so that it can track NRP parameters. It requires
944the GUI be started with the -gnrp option. The code does not support ganging:
945tying multiple GUI devices to the same NRP however that may change presently.
946The existing CC control registration can be used for that purpose. The NRP
947support is naturally affected by all the usual limitations of NRP: they are
948assigned to MIDI channels not device targets (which SYSEX does do). This means
949if two devices are on the same MIDI channel it is up to the user to ensure that
950the NRP they use do not have conflicting actions. The NRP mappings are saved in
951the same profile as the emulator CC, CM and keyboard mappings. Per default the
952mapping table size has 128 entries which matches the CC counts and should be
953enough for any of the current emulators. A parameter -nrpcc can be used to
954change the table size.
955
956The emulator settings will now be taken from the emulator header files rather
957than pure runtime switches. This imposes the use of the '-emulate' option which
958previously had this function. The choice was based on a discussion with Andrew
959Coughlan: if we are emulating then consider defaulting the closest match to the
960original, users can override options afterwards. This means a Hammond will start
961with the maximum voice count available, for example, but a Mini Moog will start
962with just one voice, highnote precedence. Changing the number of voices after
963definition of the emulator can make the Mini run as a polyphonic instrument if
964desired. The algorithm search is strict, ie, only the emulator names from
965'startBristol -summary' are recognised. This is in contrast to the remaining
966parameters that do take some aliases (-arp is the same as -arp2600 for example).
967
968Needed to suppress a few more options from the command line presented by bristol
969to the Jack session manager. These were port, rate and count which are all
970dynamic parameters anyway. Not supressing them lead to their duplication and
971some undesirable side effects of that.
972
973Renormalised the trilogy output signal after some advice on their levels.
974Changed the configure flags to include options for separate default audio and
975MIDI drivers - Jack audio and ALSA MIDI was quite popular.
976
977Fixes some repainting issues with the vertical sliding controls, they left a
978trace of noise on the way down.
979
980    0.50.5 03 Apr 2010 Jack Session Manager Immediate fixes
981
982The code now can actually save and reload sessions on request of the jack
983session manager API. 0.50.4 will be delisted.
984
985Added a -import flag which will take a file and load it into the synth at init
986time. This may fail if the memory was for another emulator however it can ease
987file/memory interchange. The memory is not directly saved into the bristol cache
988but still needs to be saved to some (free) memory location in the emulator. The
989flag is actually an alias for -jsmfile which was required to do the same for
990the jack session manager.
991
992Added in runtime options to support keyboard splits. Not sure why this took so
993long as it is a base requirement but as it is also possible from a master
994controller it never made it yet. The two options are -highkey and -lowkey and
995apply to single emulators. Error checking is minimal: values outside of the
9967-bit MIDI note range are not checked, low > high is not checked, ie, it is
997possible to build configurations that will not work. They will not break the
998emulator but no response will be heard.
999
1000    0.50.4 02 Apr 2010 Jack Session Manager Support
1001
1002Installed the svn jackd version with session management support to start work
1003on coding the interface. It required a few changes, not just to the way that
1004the jack interface had to work but also to the bristol message passing to allow
1005for arbitrary strings to be exchanged rather then just control and operator
1006data. Similar to the LADI code, the session requests come into the engine, it
1007then has to take care of redistribution to the GUI where save operations are
1008actually executed. The interface is perhaps not quite what JSM expects but that
1009is purely a bristol internal working issue: Jack session requests come into
1010the engine only, they are translated into bristol session requests and then
1011distributed as required - to the GUI. Bristol session management includes the
1012capabilities to both save and recall setup however the save and recall source
1013can only be the bristol cached content, not from an arbitrary file. to overcome
1014this, when a save request is sent from the engine to the GUI, it extracts the
1015file path. Memory is saved to a private entry in the cache and then this private
1016file is moved (exported) from the cache to the target location. The load request
1017works similarly although Load requests do not come from JSM which does not have
1018this feature. The engine command line parses the -jsmfile option and sends a
1019session message to the GUI to import and then open it. There is the -jsmuuid
1020option which is used by the session manager to direct the aplication to
1021register with the given ID. There is one additional option which is -session
1022which will disable all session management, including LADI.
1023
1024Removed the incorrectly remaining 1/2 sample phase correction from the reworked
1025Huovilainen filters for the non-resampling algorithms. These are called when
1026the samplerate exceeds 80KHz as the point where the filter quality starts to
1027degrade is far above the audible operating range of the filter. These have not
1028been widely tested and an override could make sense.
1029
1030The OB-X filter code needed some corrections for the performance changes, the
1031code was there by the command line options were different matches. Also added
1032some more frequency corrections for keyboard tracking of the filter.
1033
1034Resolved an error in the jack ringbuffer management. The buffer would fill up
1035and give 'ringbuffer exhausted' messages under specific circumstances: running
1036as a headless server with last GUI detached whilst still receiving MIDI events.
1037The fix was belts and braces, the buffer is reset in the audio thread if it is
1038idling without emulators and the ringbuffer is also stopped with the last of
1039the emulator to exit, restarted when new ones are created.
1040
1041The GUI still had some legacy support for controller registration against things
1042like RP, NRP, DE. This is supposed to be disabled if -nrp is given however the
1043flag was not being honoured. This is a kind of workaround, a bigger fix would
1044be to correctly register them however that leads to some issues with table sizes
1045that will be left for future study. This whole area is a grizzly part of MIDI
1046and should really be resolved with an alternative protocol.
1047
1048The default build is now without the semaphores, they can be re-enabled on
1049request at configure time. Also added a config option for the default drivers,
1050the can default to alsa or take an option to use Jack as the default.
1051
1052The mini emulator GUI would show key motion for midi channel and channel+1, this
1053was caused by an incorrect key panel flag. The engine did not respond on both
1054channels, just the frontend.
1055
1056The Rhodes emulators stopped working due to some code that looks for the skins
1057not functioning on their internal contructions.
1058
1059    0.50.3 17 Mar 2010 Band limited oscillator corrections, filter optimisation, GUI enhancements.
1060
1061Corrected (most) of the previous restrictions on band limited oscillators,
1062namely that they were precomputed tables rather than dynamically limited. They
1063did give different signals than the mathematically built infinite bandwidth
1064waves (-blo 0) however they did not really prevent aliasing at the highest
1065frequencies. The code now does cut in bandwidth limits depending on a few run
1066time parameters:
1067
1068    -blo n         - maximum number of harmonics to map, defaults to 31
1069    -blofraction f - upper frequency limit as fraction of samplerate (0.8)
1070
1071The code will attempt to stuff as many harmonics up to 'n' such that the
1072fractional limit is not broken. Using values > 1.0 will lead to pretty wild
1073aliasing, lower values will thin out the sound but exhibit fewer artifacts at
1074the higher frequencies. The default value is admittedly above nyquist, this is
1075a tradeoff between distortions and waveform content. The code uses precomputed
1076tables for all frequencies where freq*n does not exceeded f.
1077
1078Reworked the Huovilainen filters to move the expensive maths into the feedback
1079loop only. This reduces filter CPU requirements by about 90%, naturally at the
1080cost of some quality. The net results of the changes do not degrade quality that
1081excessively and due to the amount of reports of CPU exhaustion there are new
1082filter options: -lwf are the chamberlains, -hwf are the original heavyweight
1083Huovilainen and the default are the optimised ones. These are all run time
1084parameters per emulator. There is still the overriding -glwf option to enforce
1085all the emulators to use the lwf option globally. There is further filter option
1086which is -wwf, these use about half the CPU of the -hwf filters, they use the
1087same overall architecture however use a different but also more efficient non-
1088linearity giving a 50% lower CPU footprint. The default filters may also be
1089requested with the option -nwf, normalweight fiters.
1090
1091Added some new corrections for the filter frequency tracking and especially
1092keyboard tracking changed considerably. It can now be played in tune when at
1093full resonance and can self oscillate at some settings.
1094
1095The window now has a zoom accelerator under '<Shift> Enter'. This will toggle
1096between native window size and full screen. The native size the the one at
1097which it was created including applying any scaling parameters. The code will
1098introduce some image antialiasing when it scales to full screen, this remains
1099after returning to native size.
1100
1101Used the same code to have window scaling accelerators: '<Shift> +' will make
1102the window about 10% bigger, '<Shift> -' will make it similarly smaller.
1103
1104With the zoom accelerators coded it was then possible to add in the -autozoom
1105feature such that when the mouse enters the synth window it is maximized and
1106when the mouse leaves it is minimised. Both windows remain active however they
1107can reduce screen clutter. Width and scale will define the minimum and maximum
1108window sizes.
1109
1110Added an option -width to speficy the minimum starting window size. This works
1111in conjuction with -autozoom and -scale so that between them they set the min
1112and max resize limits. There is no corresponding 'height' option, the height
1113of the window will follow the aspect ratio for the emulator. The option only
1114works with autozoom, if that feature is not required then the -scale option
1115should be used to set the actual window size.
1116
1117Fixed the responses to FocusIn and FocusOut, they were silently dropped in the
1118earlier code releases but were now needed for the autozoom capability. With
1119these in place the opaque resize aspect ratio management was changed such that
1120the resize results in the window getting morphed to fit the window and then
1121aspect ratio being enforced after the resize has finished.
1122
1123Glide and pitch bend did not work together: glide was cut as soon as pitch was
1124altered. The fix was a one line change to the frequency assignments, previously
1125target and current were set by the pitchwheel, the change was only to adjust the
1126current.
1127
1128There was an issue with logging to the user home directory, in most cases the
1129log file would be opened truncated and never used as destination for output
1130messages.
1131
1132    0.50.2 06 Feb 2010 Real time processing enhancements
1133
1134Added code for Jack Sample Accurate replay. This was a compromise for a useful
1135if awkward feature to implement in bristol: it is only implemented in the
1136bristol envelope code such that note_on events will be sample synchronised
1137to the offsets reported by Jack MIDI events. All other events will be period
1138synchronised as the Jack MIDI events are handled in the audio stream so are at
1139least guaranteed to occur within the given period even running at double speed,
1140etc. There is no intention to synchronise all the audio generation code and as
1141this is working as an emulator that is not considered relevant - the original
1142instruments all had free running oscillators and as such were did not have any
1143kind of synchronisation to note changes. We are not going to attempt to have the
1144exact same sound come out at the exact same point however the major state
1145transition at note on will happen at the desired timepoint. Some of the
1146emulators already had trigger synchronised LFO, these are now also sync to note
1147offsets from Jack although the net effect will probably not be much due to these
1148being low frequency hence low rate of change over the Jack frame offset reported
1149in the note event.
1150
1151Placed the use of sem_init under a complation flag, preferring sem_open instead,
1152improves portability except that sem_open requires root privileges and PAM does
1153not seem to support any security permissions for this. To use the sem_open call
1154then './configure --enable-sem-open'.
1155
1156This last change was probably superfluous as code was also added to remove the
1157necessity for the semaphores in the first place. They cause issues with the RT
1158threads and so incorporated a ringbuffer for note events from the MIDI thread
1159to the audio thread. This adds a little extra processing but not excessive.
1160This is a compilation time option, './configure --disable-semaphore', it will
1161eventually become the default sequence or potentially put under run time
1162options. The code was not completely trivial as the system needed to be able to
1163distinguish between where events came from, and if jack then checks were needed
1164to see if it was from a single registration or multiple registrations - the
1165former actually ends up with two threads that can recieve messages, the MIDI
1166thread fielding events from the GUI (including note events) and the audio
1167thread itself - the sample ringbuffer code only supports singular TX/RX of the
1168ring. Added some flags to the messages buffers to indicate source and make
1169the choice of direct handling from audio thread messages or indirect handling
1170via the ringbuffer under other circumstances.
1171
1172Coded a second ringbuffer for event forwarding. To ensure low latency then it
1173was not advisable that the RT threads did event forwarding to TCP however this
1174is needed to get event tracking from engine to GUI. The second ring buffer is
1175for the path from the audio and MIDI threads to the otherwise idle parent thread
1176who then does the forwarding from the ring buffer.
1177
1178Fixed an issue where inability to find the bristol profile files would result
1179in total loss of output signal. The cause was failure to default the velocity
1180and frequency tables when the configuration files were not found.
1181
1182Removed some compilation flags that were specific to my system ready for
1183distribution. Version 0.50.1 probably had compatibility issues due to these.
1184
1185    0.50.1 22 Jan 2010 Usability enhancments, LADI level 1 compliance, process distribution
1186
1187Implemented code for LADI level 1 compliance. This required a few changes, not
1188just to accept SIGUSR1 to save state but also to have this possible in the
1189engine and GUI. For the GUI this meant adding startBristol code to exec the
1190GUI (or engine for that matter) rather than fork it, then have it trap the
1191signal and save a state file. For this to work in the engine, seeing as it does
1192not maintain state, it requires the signal be trapped and later a message sent
1193to the GUI to save the state. This last one caused diverse issues that needed to
1194be resolved to clean up some SYSEX handling. The code will accept options to
1195field LADI only in the engine, only in the GUI, or the both. The default is to
1196field in the engine. There is an option for the state file memory index. At the
1197moment bristol does not keep an arbitrary state file: the call is a tack into
1198the existing memory save routines so that memory, chord and sequence information
1199is also saved, this code section only accepts an integer which is the memory
1200index. If both -ladi memory location and a -load options are given then the
1201LADI state memory will be loaded if it exists, otherwise the -load memory will
1202be activated and then becomes the template for the LADI state file.
1203
1204Reworked part of the Jack audio library on request of Nedko for LADI support so
1205that the client interface is only opened once, in the audio thread. Without this
1206he was seeing both audio and MIDI threads opening an interface and this did not
1207map into his registration routines and PID mapping. Previous
1208releases incorporated separate Jack registration requests in the audio and
1209MIDI threads using different symbolic names. This worked however was a bit
1210cumbersome for LADI support. The MIDI code can now reuse the audio registration
1211from the audio thread, just adding an extra MIDI port to it. This became the
1212default Jack behaviour with a -jdo option to enable Jack Dual Open if still
1213needed later. The operation of the -jack flag also changed to configure Jack
1214drivers for both audio and MIDI. Prior to this the -jack flag only configured
1215the defaults for the audio interface and kept the ALSA (-midi seq) option for
1216the MIDI interface. The previous functionality can still be requested with
1217the flags '-jack -midi seq' or just '-audio jack'.
1218
1219Integrated several keyboard accelerators, these were requested as a set of
1220usability enhancements. The include ^S, save, ^L, reload, ^X, exchange two
1221memories, ^K, print the list of shortcuts, ^H/^?, print help information which
1222is the text writeup for the emulator. The actual readme is now built from this
1223output. Parts of this code (specifically the save routines) were used for the
1224LADI state save routines.
1225
1226Cleaned up some issues with the MIDI interface flags, the readonly input to
1227bristol needed to be configured as an output into ALSA, something that was
1228being mixed up. This may be ported back to 0.40. Affected midithread.c and
1229midiSeqDevMan.c only.
1230
1231There was a bug in the memory file management code that cause a spurious
1232directory 'memory' to be created in the users home directory if the emulator
1233did not have a private memory path. It was also created in $HOME/.bristol as
1234well, correctly, however the code did not return on the first creation.
1235
1236The BRISTOL_LOG_CONSOLE environment variable was changed to be a true/false
1237flag. The run time equivalent option -console should now be honoured under all
1238circumstances which was not the case previously.
1239
1240Cleaned up the closedown procedures for the situation that jack decides the
1241process is 'zombified' (sic) when it is actually under CPU pressure. It used
1242to leave the engine hanging around. The issue was not always obvious due to
1243alternative TCP port selection but it was still wrong. The processes should
1244now exit more gracefully although jack could be a bit more flexible here as
1245the cause of the original hanging processes was libjack blocking disconnects
1246from a process it had flagged as 'zombified' (sic).
1247
1248Added key handlers for left and right arrow to give more controller tracking.
1249The Up/Down keys already moved controllers, with shiftkey accelerators, the
1250Left/Right now give more movement than up/down.
1251
1252Integrated another fix for loss of keyRepeat functionality on exit: there was
1253a window where repeat could be turned back off if the mouse re-entered the GUI
1254window before engine negotiation had completed.
1255
1256The following changes would have been in 0.50.0 had it been released:
1257
1258This is actually a new software stream, the changes required to give correct
1259distributed processing were sufficient to be kept separate from the 0.40
1260release even though there do not appear to be a great number of features.
1261
1262This release 0.50, is going out first as unstable. Many fixes for bugs found
1263whilst working on this code were put back into the 0.40.7 release which is now
1264considered to be stable. Having said that, this release is the first to include
1265some form of quality assurance. The process of SQA rotates around the
1266distribution capabilities: a single engine is started in one window, and then
1267a scripted procedure runs sequentially through every emulator, starting and
1268stopping every 10 seconds (roughly). During the whole process note events are
1269being sent to the engine and redistributed to the GUI. The SQA test is only
1270considered to have passed if it runs without any form of misbehaviour. Typical
1271cycles are somewhere over 2000 iterations.
1272Failure includes any crash the GUI or engine, loss of audible signal, exhaustion
1273of any of the library resources (handles, devices, etc), memory leakage or any
1274recognisable memory corruption. This is neither the simplest nor the most
1275complex test procedure. The first iteration just restarted a single emulator
12761000 times, after that it became starting all of them, and then adding note
1277generation. There are two other scenarios that will be in a final test sequence
1278(at a later date) which will include multiple synth pairing and also program
1279change events. The multiple synth pairings will be interesting, it should
1280involve generating notes to every possible pair of layered synths (about 1200
1281cycles) including stopping and starting all of them each time on the same
1282engine.
1283
1284Added a -log option that causes output redirect to a file. Will first attempt
1285to log to /var/log/<process>.log if permitted, otherwise it will attempt
1286~/.bristol/log/<process>.log with file truncation if logging is to the home
1287directory. As a part of this operation the whole logging mode was altered such
1288that a separate thread now takes control of stdin/stdout and stderr, timestamps
1289the output messages before printing them. Finalised this with a -daemon option
1290that detaches the controlling terminal and implies -log and -server. It is noted
1291that -daemon holding open files in a users home directory is potentially not
1292optimal so this mode would best be used as root with open files in /var/log.
1293It is possible to override the use of the log thread by setting an environment
1294variable BRISTOL_LOG_CONSOLE, this prevents the thread creation and continues
1295to output to your TTY.
1296
1297Had to rework the brighton thread management to allow for asynchronous MIDI
1298event distribution. It may need more testing so will go out as unstable - there
1299were quite large alterations required but it lead to better general thread
1300management in the GUI: it no longer exits forcefully on window requests or
1301interrypts, it flags the threads to exit gracefully. The changes all passed
1302through the SQA hurdles discussed above.
1303
1304Finalised the event redistribution code so that only the GUI or the engine
1305need to be aconnected to a real midi interface (or sequencer interface). Events
1306arriving on this interface are redistributed to tcp ports, ensuring that the
1307GUI and engine always track the same events. There is an override of this
1308functionality using -forward (discussed below) and forwarding is on by default.
1309
1310Added an option -sysid to specify the MIDI SYSEX system ID for communication.
1311This needs to be entered as a 32 bit hex value. It will override the default of
13120x534C6162. This followed an interesting discussion on LAU regarding controller
1313identifiers. The theoretical collisions that could happen should not have
1314affected bristol since SYSEX is only used over the TCP connection from GUI to
1315engine however the feature was cool enough to get implemented. For those who
1316are interested, the default SYSID is 'SLab' in hex, the bristol MIDI interface
1317extended from the SLab design.
1318
1319An issue was reported with -voices 1 not giving any sound. This turned out to
1320be true and the workaround (now the fix) is to use -hnp or -lnp with either the
1321-mono flags or when voices=1. The code also now configures the note precedence
1322automatically (although it can be overridden). [And the last note precedence
1323code should also now be fixed too. nc.]
1324
1325Fixed a spurrious compilation issue when Jack drivers are not found. Code was
1326still attempting to make a library call that was not compiled into that library.
1327
1328Reworked exit conditions so that the processes can return reasonable status
1329back to the caller. That was not the case with the GUI and even if it was then
1330the startBristol script needed to still consider these exit status.
1331
1332Did a cleanup of the build process to remove some spurious warnings that should
1333not have cause any issues with the code but did make the pedantic compiler churn
1334out messages. The remaining output should primarily be for my own warning
1335statements and a few unused variables/routines in the unfinished emulators.
1336
1337Added an option -window to prevent posting of the GUI window. This is for SQA
1338testing where each emulator is started in turn in a constant cycle of thousands
1339of iterations, this spares a few cycles and allows other work to take place
1340without the sometimes irritating window focus changes.
1341
1342Inserted some exclusion code on the midi signalling not to dispatch callbacks
1343for physical midi events, nor forward them, during some critical code sections,
1344notably starting and stoping emulators. Also had to clean up some deallocation
1345of the voices as there was a 'hole' in the code where a NULL baudio would
1346prevent a voice from being freed up, ever.
1347
1348Added some NRP commands to request remote event forwarding. This is used by
1349the GUI to prevent the engine from duplicating events into two possible TCP
1350pipes (dual manual keyboards), and by the GUI to selectively do the same for
1351its interfaces. This resulted in changing the -forward flag to be a global
1352engine setting, -localforward for the GUI to the engine (local in the sense
1353that the GUI is per definition local, the engine may be remote), and then a
1354-remoteforward option for engine to GUI settings. The latter two will only
1355affect the single emulation which means some GUI can request copies and others
1356decline them. This flag does not affect the existing -tracking option which
1357simply governs whether the GUI keyboard will respond to MIDI note on/off
1358messages. The forwarding of events covers more than just note on/off, most
1359notably program change and modulation events are needed even if tracking is
1360turned off.
1361
1362Fixed an issue of incorrect shadow rendering from resizing withdrawn panels.
1363When they are finally exposed the shadow contained the unsized instance.
1364
1365Fixed two issues with the bassmaker operation, the first step after pressing
1366start was not being sounded and LED status is not cleared on restart. The LED
1367status of the last Stop point was not being cleared. Additionally the shadow
1368rendering was faulty when panel selection changed with resized windows.
1369
1370Cleaned up a compilation flag that could still cause it to fail if Jack was not
1371included in the system or build process.
1372
1373Reworked the audio library so that ALSA devices are just drained and prepared
1374when a read or write error occurs. Previously they were closed and reopened
1375which is a rather ugly overhead, plus there were obvious chances that it used
1376to incur some memory leakage. The new code changes some of the data preload
1377processes which now have to be pushed down into the library. The previous
1378method can still be compiled by giving the --disable-drain option to the
1379configure script for cases that give problems with the new method.
1380
1381A failure in limits checking lead to a potential memory corruption issue in the
1382continuous controller code and NRP handling. This could have been the cause of
1383the original issues reported around NRP causing the engine to fail. Irrespective
1384of this, though, there are too many possible collisions here as the NRP address
1385space is common across a given MIDI channel making its use rather hazardous.
1386
1387A couple of the emulators were exhibiting fairly random segmentation faults,
1388indicative of memory corruption. Ran up valgrind to give some input into the
1389causes and there were diverse issues that had to be taken care of. A part of
1390the cause was the controller ID damages given above, there were diverse changes
1391to the emulator code as there were a few errors in buffer pointer management
1392that resulted in some emulations leaking quite voluminous amounts of memory
1393each time they were invoked, and some small leaks on things like audio device
1394restarts where buffered name space was not being reutilised. There was one
1395case of a bristol audio structure being reused after it had been freed, this
1396was introduced when the emulator destruction code was moved from the MIDI
1397thread to the audio thread for other unrelated problems. Valgrind still reports
1398some minor memory leaks however these are almost uniquely related to the ALSA
1399library interfacing where structure ownership is not really that clear and are
1400typically bits of memory that are not really lost, they are just not freed on
1401exit, and since the audio drain feature was added then the audio device is not
1402longer reopened when xruns occur. These remaining bits can be reviewed later
1403as the loss is still small, it does not appear to increment over time and does
1404not affect functionality yet. In total there were about 15 changes related to
1405corruption rather than leakage although not all of them would have caused
1406segmentation faults as they were not all write operations, some were read.
1407These would have caused intermittent noise (ticks) and potentially wild
1408modulation, especially of the DX FM operators.
1409
1410Removed an issue with the libbristolmidi ALSA SEQ interface handling for the
1411channel identifier, it was not correctly being merged across resulting in all
1412channels converging onto zero.
1413
1414There was a small timing window where GUI failure could result in dangling
1415emulators (headless). Active sense will only start after a sense message is
1416received, so if this first message does not get there then the emulator does
1417not detect GUI failure. The engine now always starts ActiveSense, the GUI
1418has to turn it off if not enabled.
1419
1420There was a ludicrous amount of debug messaging added to track down all of the
1421above problems and rather than remove it all for the release, they were buried
1422under a -debug flag that defaults to 'off'. Values of '-debug 12' or greater
1423are not advised as they will debug every period of samples.
1424
1425The B11 library stops key repeat on window entry and reenables on LeaveNotify,
1426this is use to make sure the QWERTY keyboard tracking functions as expected.
1427With some window managers (reported against fvwm) the window Destroy function
1428only sends a wmDelete request and no LeaveNotify as the window exits which
1429would result in loss of key repeat. The command 'xset r on' fixes that however
1430submitted a fix to turn repeat back on under these circumstances too, and added
1431in some X11 event debuging at -debug 9 or higher.
1432
1433Finally continued to resolve what I would call minor issues although that is
1434subjective. Engine compilation did not include config.h, the Solina had very
1435different gain on its harmonics, some of the bitmaps needs improved drop shadow
1436rendering, the MIDI processing would terminate with the first emulator to exit,
1437ie, the MIDI library was not reactivated, etc.
1438
1439Removed potential segfault in midiNoteOn(). Put the speaker holes back into the
1440ARP 2600, vertically as there was a shortage of realestate but having them puts
1441the gravity back into the image.
1442
1443Fixed an issue with the flagging defaults for the -alsa flag, it was taking
1444ALSA rawmidi rather than the usual target of ALSA SEQ. This would fail the
1445option completely. It could still be made to work with -alsa -midi seq, or by
1446not using any specific driver options as the defaults were correct.
1447
1448Updated diverse parts of the GPL compliance, bringing all the files up to
1449version 3 of the license and including the disclaimer events where necessary.
1450
1451Bristol version 0.50.0 was never distributed, the release was rolled up into
14520.50.1.
1453
1454    0.40.8 22 Jan 2010 Maintenance release
1455
1456Fixed an issue with the flagging defaults for the -alsa flag, it was taking
1457ALSA rawmidi rather than the usual target of ALSA SEQ. This would fail the
1458option completely. It could still be made to work with -alsa -midi seq, or by
1459not using any specific driver options as the defaults were correct.
1460
1461Jack MIDI opening sequences had a potential window to fail in which case the
1462interface would not be activated.
1463
1464There are no further fixes from 0.50.1 that will be ported back to 0.40.8 as
1465they are now primarily related to new features in the 0.50 stream.
1466
1467The 0.50 stream will also be created at the same time, as such this download
1468may not be of interest to many people, ie, installing this may duplicate the
1469effort later.
1470
1471    0.40.7 22 Nov 2009 Maintenance release
1472
1473Fixed some compilation flags that could still cause the build to fail if Jack
1474drivers were not included in an installation. This is a backport from 0.50 for
1475compatibility purposes.
1476
1477The sid.c code had as issue with debuging being executed without suitable
1478checks on the handle. Could cause a crash which has now been fixed.
1479
1480The XPM reader had a couple of issues with parameter naming collisions and its
1481file naming for temporary files used for decompression could also fail if more
1482than a single GUI intialised at the same time.
1483
1484Had to implement some extra local memory sanity checks before calling the
1485emulator operate() code. Depending on timing these may still be null as the
1486emulator initialises.
1487
1488The bristol BassMaker would give incorrect panel rendering when panel selections
1489were made on a resized window. This could have affected other emulators as well.
1490
1491The BassMaker would jump the first step of a sequence.
1492
1493The BassMaker did not correctly clear the LED status of the stop position.
1494
1495There was a hole in the voice management code that would prevent a voice from
1496ever being freed up if it had a null baudio. This could happen if a voice is
1497still active as an emulator is terminated.
1498
1499Cleaned up a compilation flag that could still cause compilation to fail if
1500Jack was not included in the system or build process.
1501
1502A failure in limits checking lead to a potential memory corruption issue in the
1503continuous controller code and NRP handling.
1504
1505Removed an issue with the libbristolmidi ALSA SEQ interface handling for the
1506channel identifier, it was not correctly being merged across resulting in all
1507channels converging onto zero.
1508
1509A couple of the emulators were exhibiting fairly random segmentation faults,
1510indicative of memory corruption. Ran up valgrind to clear up a few memory leaks
1511of small amounts of memory on things like audio device restarts and also to
1512track down the corruption. It was partly the controller ID damages given above
1513however the baudio structure was getting freed before its ultimate use which
1514could intermittently lead to further damage. There are still some minor memory
1515leaks however these are related mostly to ALSA library interfacing where
1516structure ownership is not really that clear. This can be reviewed later as
1517the loss is still small and does not affect functionality yet. In total there
1518were about 15 changes, not all of them would have caused segmentation fauls as
1519they were not all write operations, some were read. These would have caused
1520intermittent noise (ticks) and potentially wild modulation, especially of the
1521DX FM operators.
1522
1523The B11 library stops key repeat on window entry and reenables on LeaveNotify,
1524this is use to make sure the QWERTY keyboard tracking functions as expected.
1525With some window managers (reported against fvwm) the window Destroy function
1526only sends a wmDelete request and no LeaveNotify as the window exits which
1527would result in loss of key repeat. The command 'xset r on' fixes that however
1528submitted a fix to turn repeat back on under these circumstances too, and added
1529in some X11 event debuging at -debug 9 or higher.
1530
1531Removed potential segfault in midiNoteOn().
1532
1533    0.40.6 28 Sep 2009 Maintenance release
1534
1535Resolved a name resolution issue that would cause the split/layer keyboard
1536emulators to fail. The dual manual ones should have worked. The workaround was
1537to default the hostname when null but the actual fix is to request the same
1538destination host in all cases, something that will now only go into 0.50.
1539
1540Included some memory packs for the trilogy and polysix emulators.
1541
1542    0.40.5 23 Jul 2009 Distributed processing maintenance release
1543
1544Added an option to startBristol, -gui, which will prevent the GUI from being
1545started and invoke the engine with all the resolved bristol variables. This
1546will allow for easier distribution of the applications with GUI and engine on
1547different hosts which was always a part of the design but was never really made
1548that accessible. This can be used in conjunction with the -server flag which
1549will leave the engine active even when the last emulator has disconnected.
1550Running as a server lead to a few issues that were anticipated - constantly
1551reconnecting GUIs would exhaust various engine tables that were not being
1552cleaned up correctly as this had never been widely used. The file descriptor
1553table was not being cleaned up, the handle and device tables similarly. There
1554was an issue with SID selection of the EXIT requests not being correctly matched
1555causing the wrong emulators to be disconnected, and with failure to correctly
1556close input file descriptors on active sense failure requiring a small change
1557to the device reading logic. It was finally possible to run a test script to
1558reconnect nearly a thousand times, without failure, all emulators still audible
1559and so moved to released code.
1560
1561Several issues arose whilst building the application without ALSA drivers. This
1562is supported, especially now that Jack MIDI is integrated, however since ALSA
1563turned 1.0 the coding has been a bit lax, assuming that ALSA was available and
1564integrated. The result was that building without ALSA might fail and that even
1565when compiled there were issues with device open() requests. Resolved these and
1566added the flags required to accept note events over the control link so that
1567GUI keyboard events are still tracked even if the ALSA code is not integrated.
1568
1569Was requested to remove all OSS dependencies from the build process as well.
1570This was a little more work than ALSA since that was always intended to be a
1571build option, OSS by contrast was always anticipated to be present. Had to
1572clean up some of the socket toolkit header files and some erroneous definitions
1573in the midi library that was being flagged by some more meticulous compilers.
1574
1575Reworked the TCP addressing code to accept -host <hostname:port> where hostname
1576can naturally be a IP address or (non)canonical hostname. The port option can
1577be used with the -engine flag to connect the GUI to a specific host where the
1578engine is running, remotely: it is an alternative to the -port flag however
1579it is still advised to actually use -port for other reasons.
1580
1581There was some general code cleanup from the request to have bristol function
1582on a system that had neither OSS nor ALSA installed. This was never anticipated
1583and making it possible brought other issues to light.
1584
1585The Trilogy had a very unequal mixing section, the organ gain was too quiet
1586and the synth section too loud. These were evened out.
1587
1588The Trilogy also had some rather unusual use of volume controls. To reduce
1589CPU load the synth would not run the organ and string sections unless they had
1590a non-zero gain. This achieved its affect however the result was that if the
1591gain was zero at note_on then the voice was always muted (it actually just fell
1592through the note logic and turned itself off). The fix was to always run the
1593oscillator divider circuit envelopes under all circumstances to engage the note
1594logic. The audio generation code is still skipped as it would be silent anyway
1595when the gain is set to zero.
1596
1597    0.40.4 06 Jun 2009 Audio Driver Mainenance Release
1598
1599Added an autodetect for Jack where a small program will connect to the daemon
1600and find out the sampling rate and period size. These are then given to bristol
1601as parameters preventing unexpected mismatches later.
1602
1603Fixed a watermark issue with the ALSA drivers, the high available threshold was
1604too low which causes the library to report false overruns. Since these come
1605back as a failed write operation the bristol audio library was restarting the
1606audio devices. The diagnostics reported this as a broken pipe.
1607
1608Resolved a typo in the ALSA drivers that damaged the periodsize and buffersize
1609matching. Caused cyclic ticks in the output stream depending on hardware and
1610ALSA driver versions.
1611
1612Changed the activesense period to 3s and timeout to 15s. There are issues when
1613running with RT scheduling where the GUI may get starved when there is a lot
1614of audio activity causing the engine to give a false positive of a GUI failure.
1615Since active sense is really there to make sure everything exits gracefully
1616when there really is a failure then the timers need to be more flexible to
1617cater for situations of high CPU load. [0.40.5: as a side note, this only
1618really affected a system if it had cpu-speed ondemand, or was massively over-
1619loaded, neither of which are optimal for audio processing.]
1620
1621    0.40.3 25 May 2009 Maintenance release, B3 stuck notes.
1622
1623The Bristol B3 was exhibiting stuck notes, fairly arbitrarily however the
1624issue was not reproducable on the development system. After a ludicrous number
1625of debug builds to get different statistics the cause turned out to be the B3
1626postOpts which manipulated the voice flags and the resolution was to extend
1627the semaphore coverage to include emulator postopts. Theoretically it would
1628be possible to have just changed the B3 code however the engine that hosts
1629the emulator should not be open to flag abuse in the voices and the voices
1630are allowed to manipulate these flags. The actual cause was a race condition
1631that only really exhibited itself on multicore/HT systems.
1632Thanks to Andrew Coughlan and Damon Chaplin for the report and debuging
1633output to isolate this issue. As the problem was not reproducible on the
1634development system (single core) then tracking down the cause required a
1635number of different debug revisions and a great deal of patience and output
1636logging from the people involved.
1637
1638Releases 0.40.1 and 0.40.2 will be removed from the download site.
1639
1640The bristol shutdown procedures were not really compliant with the Jack API
1641definitions, they would not deactivate/unregister the active handles before
1642exiting. This does not work very well with multiapp environments, it causes
1643a subgraph timeout in the API. Changed the shutdodwn code sequences so that
1644the last exit operation will clean up the emulators in the audio thread and
1645let the MIDI thread then unregister jack and exit so that all parties are
1646happy. Also added some diagnostic output in the event that ports cannnot be
1647registered - this happens if Jack has a lot of application ports to deal
1648with so the additional message makes sense. Also coded in jack_client_open()
1649to replace the now deprecated jack_client_new() previously being used.
1650
1651The Sidney emulator was about 1/2 a semitone out. After a lot of delving into
1652the correctness of the code without much success (ie, it seemed correct) it
1653turned out the C64 had different versions for NTSC and PAL, with different
1654CPU clock speeds. The frequency tables were built from data taken from what had
1655to be a confused manual since they did not match up for the clock speeds. When
1656the due correction was applied (0.985 to 1.02 and finally 1.023MHz) it was
1657finally pitched correctly.
1658
1659The trigger events for the SID MOD Env were not really correct. Any accepted
1660note_on event would cause them to trigger however in light of the way voice
1661separation happens it really required that the Env was only triggered if it
1662would have a affect on the given voice. There were a few cases, voice goes
1663via the filter and env modulates the filter or if the Env modules the voice
1664that is being activated. Added the logic. Voice-2 arpeggiating never triggers
1665the envelope, only its own envelope.
1666
1667Increased the minimum Sidney arpeggiation step, it was a ludicrous 0.3 ms, it
1668is now a more reasonable 16ms. Maximum stays the same at roughly 250ms.
1669
1670The Sidney emulator had an issue with some memories and its keymode settings,
1671the indexes were not converged correctly resulting in the radio buttons not
1672working normally (double selected radio buttons).
1673
1674The OB-Xa 4-pole filter was incorrectly mixing its feedback loop, silencing
1675the output signal. The 2-pole worked correctly.
1676
1677The MIDI library was altered such that all messages now carry a sequence
1678number, it's only u32 but its only use is debugging events and with the typical
1679event rates this will last far longer than any session. Also finally fixed the
1680event timestamps which were previously just null.
1681
1682The midi and audio threads had different scheduling algorithms, one was FIFO
1683the other RR. Since the two threads used semaphores for a critical code
1684section for note events then there existed the possibility that the midi thread
1685could cause large delays to the audio thread by taking the semaphore and then
1686getting pre-empted. The fix was pragmatic, both thread have been made FIFO
1687with different priorities. A full fix would also have been to adjust the
1688thread priorities in the critical code however the current fix works except
1689when there are multiple RT programs running and that should only be the case
1690if they are all audio threads.
1691
1692    0.40.2 05 May 2009 Maintenance release, usability improvements.
1693
1694This is primarily maintenance for the last couple of releases including fixes
1695to the SID emulator and some ARP improvements.
1696
1697The SID synth has more key assignment modes, both arpeggiating, visible in the
1698GUI as Arpeg 1 and Arpeg 2. They will split the keyboard at MIDI note number 52
1699then assign two voices to one half and one voice to the other. Arpeg-1 has its
1700function on the upper half, leaving the lower half as a duophonic synth
1701allowing an arpeggiated chord as rythm for a bass sequence. Arpeg-2 will do the
1702opposite, it will arpeggiate on the lower half allowing for arpeggiated rythm
1703with a duophonic lead solo. These were seen as an improvement over the previous
1704but the results need to be reported back.
1705
1706Bristol will now check the system for the availability of the TCP control port,
1707defaulting to 5028. The application behaviour has always been that an engine is
1708attempted every time the application starts and correctly speaking if a user
1709wants to work multitimbral then the second request should be given the -engine
1710option. Without this flag it still worked but was sloppy, the second engine
1711would fail to get its control port and so would exit, the second GUI would
1712still connect to the first engine and start a second emulator. The current
1713behaviour is that each time the application is started it will look for the port
1714availability and if it is already taken then an upwards scan is done from the
1715port number looking for a free socket. The port can be specified explicitly
1716with the -port option if fixed ports are required however this is not a real
1717requirement if the -audiodev is used with Jack, for example, to specify the
1718registration identifier for the new engine. If no engine is requested the GUI
1719will just attempt to connect to the specified port although arguably it should
1720check to see if the port is open - this is kind of done implicitly when the GUI
1721attempts to connect to the port.
1722
1723Extended the BRISTOL_AUTOCONN by adding the following environment variables,
1724BRISTOL_AUTO_LEFT, BRISTOL_AUTO_RIGHT and BRISTOL_AUTO_IN. If these are set
1725they will be searched in the relevant ports list and then connected up. This
1726only happens in conjunction with AUTOCONN. On my systems this was tested by
1727setting them to system:playback_1, system:playback_2 and system:capture_1
1728resprectively, and by leaving them unset. Will see how much use they are,
1729since they are environement variables then to be useful they would have to
1730be scripted.
1731
1732Submitted code to repaint transparency layer devices when windows sizes are
1733changed. This affects shadow layers and transparencies (such as the ARP 2600
1734patch cables). Prior to this the objects painted on to this layer were lost
1735which was confusing with the ARP at least. The effort to do this was considered
1736preferential to the alternative which was to fix the window size once defined,
1737not allow resizing and just have the -scale option at startup.
1738
1739There were some compilation issues due to the SID test program not having the
1740correct dependencies. Removed sidtest from the distribution, it is no longer
1741required, it was only used to exercise the bristol softSID chip until it was
1742integrated into an emulator, now done.
1743
1744Known issues are that the Pro-10 would fail on some systems. This is a very
1745specific issue as some systems have been reported not to suffer from the
1746issue. A workaround is in place however a longer term resolution will have to
1747be sought and a bug is open against the issue.
1748
1749    0.40.1 25 Apr 2009 Commodore C64 SID emulator
1750
1751This release introduces an emulator for the Commodore C64 6581 SID audio chip.
1752The implementation has a digital access method to program the chip registers
1753and an 'analogue' access method to extract the audio signal. The oscillators
1754and envelopes are implmented with integer functions as the original was partly
1755digital, and then the filters are in floating point to emulate the analogue
1756components. Specifics of the chip will be in the README file presently.
1757
1758Two of these chips were then used for a bespoke synth, the -sid. This is not
1759based on any original design but exercises the SID emulator. One of the two
1760chips gives the audio output, the second gives signals for modulation: one
1761LFO, one Env and one noise source which can be as an input to a S&H circuit.
1762This design uses a few different voice allocation routines, monophonic, three
1763voice polyphonic plus some combination algorithms to give access to the high
1764frequency arpeggiation used often in the C64 where a single voice would do a
1765fast scan of several frequencies to give chords and widen out the sounds. Each
1766of the three voices can be programmed independently.
1767
1768Added an environnment variable, BRISTOL_AUTOCONN, which when set will direct
1769the jack library to autoconnect its ports to the first IO found. This will not
1770be much use for general users however it will make testing easier.
1771
1772Fixed an issue where the emulations would fail unless started on midi
1773channel 1. The issue was caused by the Globals settings using a system
1774connection id rather than the negotiated midi channel for setting up
1775diverse defaults tables.
1776
1777    0.30.9 02 Apr 2009 Bristol BassMaker, massive filter optimisations.
1778
1779Coded a 16 step, 4 page sequencer along the lines of the SQ-10 to generate
1780bass lines, hence the pun. The overall feature set it pretty sparse since this
1781is not intended to be a general purpose sequencer. Each step has a note,
1782transpose, volume for the MIDI note and a Control option to send fine tune,
1783mod or another MIDI note on a second channel, plus the triggers can be skipped
1784to join notes. The control features have not been widely tested and may need
1785some fixes. Also the fine tune and glide when applied to the Control setting
1786are a little dependent on the emulator, something that can be altered if the
1787is a demand. A full description is in the README file.
1788
1789Colin Fletcher optimised the huovilainen filter code, first factoring out kfc
1790to reduce the number of multiplications being executed, then continueing with
1791completely factoring out v2, and since it was generally used as a divider
1792function this was a considerable CPU overhead. This delivered a massive
1793improvement in the CPU utilisation, not only of the filter but the emulator
1794generally due to the filter being so CPU intensive. The factoring out of v2
1795was ingenious since it was not immediately evident from the code that this
1796would have been possible.
1797Testing this also corrected some anomalies in the OBXa filter selection code.
1798
1799About 5 superfluous variables were stripped out of the filter code to reduce
1800parameter popping and actually improve readability providing minor improvements
1801in the filter efficiency.
1802
1803Applied noise injection code generally to prevent filter denormals with low
1804to zero input signal. This is quite efficient noise generation code so should
1805not have a big affect on the optimisations and prevent 100% from denormals.
1806
1807Another optimisation was applied to the filter for higher sample rates which
1808removes the internal oversampling. At the higher rates this delivers around 40%
1809reduced load and should not result in any loss in quality since it only applies
1810when playing at 88kHz or greater where the filter response is still good to
1811over 20kHz without resampling. Not all the emulators will actually use this
1812code modification since it is only in B_FILTER2 which is sparsely deployed at
1813the moment, something that will change as the different modifications are
1814qualified. The result of all these optimisations is that this filter code
1815should be about as fast at 96kHz as the previous one was at 48kHz, and as the
1816filter code currently uses the vast majority of the emulator cycles then it is
1817probably possible to run any of them now at the higher sample rates with
1818little affect on net load.
1819
1820Applied some reduced EQ to the Hammond B3 Bright signal levels. This kept the
1821same rough profile however the overall signal level was far in excess of the
1822existing normal gearbox. This was required due to some big reductions in the
1823crosstalk levels of the normal gearbox leaving bright as too loud. The changes
1824to the crosstalk was required since the net amount was superfluous and
1825although it brings some nice overdriven sounds it was excessive for both of
1826the configurations to have that amount.
1827
1828Bristol no longer implements any Jack port auto-connect per default. After a
1829trail of submits to LAU there were very good arguments as to why having
1830default connections always being applied is a dangerous feature. The auto-
1831connect remains but has to be requested with '-autoconn' although admittedly
1832this does make it a fairly superfluous feature.
1833
1834The VOX Continental M2/Super/300 was silent. The global parameters page had
1835zero set for all parameters that needed corrections to the memory loading code
1836to force the save settings into the active set.
1837
1838The Polysix emulation would clip excessively with the modgroup was routed
1839fully to the VCA. The signal gain from the LFO would result in an overdriven
1840output. Reduced all the respective output stage signal levels, which are still
1841quite strong anyway, and also some of the tremelo depth when mod routed. This
1842will have a minor effect on some patches.
1843
1844Incorporated Andrew Coughlan's manual page for the Polysix emulator.
1845
1846    0.30.8 20 Mar 2009 Maintenance release, ARP 2600 fixes.
1847
1848When using Jack as the MIDI interface it was possible that the engine would
1849attempt to link audio to midi channels and vice versa. The requests fail and do
1850not break anything but the default connections don't work so its not quite as
1851plug-n-play. Added code to check for the port name and also to parse the whole
1852list of outputs for the first two that will link up, similarly all the inputs
1853later.
1854
1855Resolved a strange issue with the ARP 2600 with respect to discrepencies
1856between the GUI indeces and the engine indices. The problem did not show up
1857on all systems and the root cause was being masked by a programming error in
1858the engine using an incorrect scaling for parameters passed to it. The problem
1859was not evident on all systems probably due to differences in type casting -
1860the parameter is delivered as a float however the index is taken from that
1861cast into an int with a range considerably wider than '1.0'. The fix also
1862required changes for removing cables.
1863
1864The ARP 2600 filter and amplifier outputs had a signal level far stronger than
1865most of the other components, this came from reworking the general filter
1866input/output levels to ensure it was being driven correctly. Added in a bit of
1867normalisation code to even the levels up.
1868
1869The ARP 2600 filter would also suffer denormals if all the inputs were move to
1870zero. Almost to be expected due to the DSP involved in the filter. The initial
1871fix is to inject about -96dB of noise if all the inputs sum to less than that.
1872This has the nice side effect of making the filter self oscillating at high
1873resonance, that was not previously the case.
1874
1875Reorganised the ARP 2600 volume options. There was a single 'Global Volume'
1876that just drove the output stage. This was broken in several ways. Firstly it
1877was in the memory which was a mistake to start with. Then it did not function
1878as per the original where this single control was called 'initial volume' and
1879was a kind of drone level for the VCA. To correct this the parameter was
1880separated into 3 controls: Global Volume which is not in the memory, Program
1881Volume that is in the memory, and Init Volume to allow the VCA to drone. It
1882is noted that droning in polyphonic mode is messy however not having it with
1883mono mode did affect capabilities.
1884
1885The BME filter tracking keyboard selector did not function to expectation, the
1886tracking was either off, or honoured along with the mod group which was wrong
1887as these are exclusive options.
1888
1889The X11 library will now only handle single configure events at a time. These
1890are typically window resizing that come by the boatload due to mouse motion
1891and if they are all handled at once we tend to get active sense failure and
1892the engine (then the GUI) exiting.
1893
1894Reduced the B3 drawbar crosstalk values for both gearboxes. The previous
1895values worked but the signal to noise (crossbar leakage) was excessive. The
1896bright gearbox settings are still quite rich in harmonics giving a reasonably
1897overdriven signal but the normal gearbox is now not so noisy.
1898
1899Distributed Andrew Coughlan Polysix patch 23 and added his sample to the
1900website.
1901
1902    0.30.7 02 Mar 2009 Baumann BME-700
1903
1904Build a BME-700 emulator. This is a rather rare synthesizer and is probably
1905the best example of where an emulator makes sense, it would be pretty much
1906impossible to get ones hands on one of these. The emulator is in its first
1907build and the oscillator may well need some improvements. Future work will
1908also improve response with higher samples rates by removing the internal
1909oversampling code. To test this emulator try the options
1910    startBristol -bme700 -mono -hnp -retrig
1911This will give a monphonic emulation with high note precedence and envelope
1912retriggers for any note change.
1913
1914Added a velocity flag to the monophonic key logic such that velocity may then
1915optionally only be taken from the first note in a legato sequence rather than
1916from every note in the sequence. Option is called -lvel.
1917
1918Monophonic triggers were a little broken, the current fixed code will either
1919always send a retrigger when the voice moves to a different note with the
1920-retrig flag or will only send a trigger for the first of a legato sequence.
1921
1922The Korg MonoPoly emulator would crash. The new synchronisation code did not
1923check for a null sync buffer and some of the emulators would pass a null
1924buffer if sync was not configured. Related to this was reassignment of the
1925-mono switch to be 'monophonic', equivalent to '-voices 1' rather than as an
1926acronym for -monopoly. The switch was reassigned to make the monophonic note
1927logic more sensible.
1928
1929Prophet bank select was broken, code was adding incorrect offset into the
1930selection algorithm.
1931
1932    0.30.6 22 Feb 2009 Monophonic note precedence key logic.
1933
1934The note assignement logic now correctly implements/emulates a monophonic
1935keyboard with low note precedence (-lnp), high note precedence (-hnp) and last
1936note precedence. Previously there had only been code for last note - it was
1937the polyphonic algorithm with just one voice however this gives a completely
1938different playing style. The option only works when the voicecount is set as
1939a single voice. Additionally there is a -retrig option to trigger in both
1940directions when playing legato style. The code is interesting since it was
1941firstly a little awkward to do and also since the final solution was to have
1942the monophonic synth start playing its single voice and then just keep the
1943voice rolling forever. It stacks up the CPU constantly but gives some useful
1944features with the ARP 2600 and Moog Sonic-6 (and others) for droning or just
1945tweaking them without playing and is arguably a closer emulation of a real
1946mono synth. The voice, once assigned to a mono synth, should not be preempted
1947by other emulations, ie, it becomes dedicated.
1948A present release may make hnp and retrig the defaults for mono synths, and
1949similarly invoke a single voicecount if precedence is requested. For not you
1950will probably want to use -hnp/-lnp and -retrig to get useful results.
1951This release might include some monophonic note logic debugging output, it
1952will probably stay there until 0.30.7/8 depending on testing or bug reports.
1953
1954Finalised the frequency/step tables and moved on to implementing glide for the
1955non-resampling oscillators. The oscillator already supported this but the
1956frequency tables were needed to correctly fill the buffers. Poly-800 parameter
1957#67 now controls glide for that emulator, previously not operable.
1958
1959Reworked all the filter code keeping only the Chamberlain and Huovilainen. Then
1960reworked the Huovilainen for 2pole/4pole (non-resampling versions later). Put
1961in an Oberheim modification that remixes the different pole outputs back into
1962the main signal path. The mix is configurable however the GUI has no control
1963that drives it: a default value is taken. The filter is a bit richer for the
1964mix. This mod was at least considered by Oberheim for the Matrix-12 but then
1965never implemented as the discrete circuits with quality components was a bit
1966cost prohibitive. Here is is relatively simple work and since the filter is
1967already computationally expensive this operation does not add much to the CPU
1968requirements. Different codes sections use different mixing loops. The main
1969one puts the tapped signals into the output stage only, others will mix it
1970back into the filter feedback loop which give yet another quality however it
1971also suppresses resonance due to the resulting phase complexities.
1972[As a note, the application still implements 3 other filter types, the rather
1973weak rooneys and a butterworth. The ARP also has its own lag filter for
1974voltage processing.]
1975
1976The Arpeggiator/Sequencer code would leave voices hanging after the operation
1977terminated. This was kind of known, start/stop just set the emulator flags to
1978allow the code to be called. The resolution was to actively deschedule all
1979voices associated with the arpeg/seq function.
1980
1981The LFO changes to 0.30.4 to increase the maximum speed did adversely affect a
1982number of memories and, rather than back them out, this version introduces
1983parameterisation to set the upper and lower limits of the LFO with defaults
1984that were as per 0.30.3 and below. The new emulators that want to use LFO up
1985to ranges that verge on FM functionality will request wider ranges. The
1986default values should go from 0.1Hz to 20Hz in line with the previous releases.
1987
1988Build options was damaging the LD_LIBRARY_PATH where jack libs were included
1989before the newly built library path. The result was that rebuilding the code
1990would probably find the installed libraries rather than the new ones.
1991
1992The Hammond was loading excessive memories on switching the opts panels in and
1993out, added some flags to prevent this.
1994
1995    0.30.5 01 Feb 2009 Maintenance release?
1996
1997Worked on a slew of new (short) recordings for the website, fattening out a
1998few of the exising memories. This lead to some issues with sound quality in
1999some emulators. These would have been fixed earlier if I actually used bristol
2000however most of the work is in development rather than operation. Most of the
2001sounds were configured in a matter of minutes, more work would have improved
2002the depth but they give an idea of each of the emulations that were recorded.
2003These short recordings highlighted a few anomalies in the code, and along with
2004some other issues that have been gathering over a few releases the rest of
2005this release is a set of fixes.
2006
2007There were apparant envelope clicks on the axxe emulation, primarily on note
2008off events. This was due to a direct 'gain' level being mixed in with the
2009ADSR. Corrected it with a grooming envelope on the key however the ARP lag
2010processor would also have done this trick quite well.
2011Applied the same change into the Odyssey as it uses a similar gain section on
2012the amplifier. The 2600 is not affected by this since it uses patching to get
2013around the amplifier rather than fixed signal gains.
2014
2015PWM on the Arp DCO was failing, affecting all the Arp emulations. The cause
2016turned out to be a mixup with the min and max limits for the pulse width,
2017something that was introduced when the corrected sync code was introduced in
2018release 0.30.3.
2019
2020Fixed a key mapping issue where the '\' character mapped to key id zero rather
2021than two semitones above the ']' key where it should really have been mapped.
2022The changes are in the text profiles so could have been done locally in the
2023event of complaints. Apart from that the mappings only cover a US QWERTY
2024keyboard anyway.
2025
2026Some of the keyboard graphics were damaged during the redesign for the
2027Poly-800 giving incorrect redraws for the 3 octave emulations.
2028
2029The Poly800 GUI had a typo that stuffed a non-zero termination signal level
2030into its DCO-2 envelope causing clicking if Double was selected. A separate
2031issue occured with the filter envelope that was not retriggering correctly,
2032resolution was to configure this one envelope for re-zero and will have to
2033see if it needs to be done for all of them.
2034
2035The duplicated raw audio output code does silence suppression however this was
2036only intended to be for leading silence. It was implemented as a cheap way to
2037get sample for the website but it was doing permanant silence suppression which
2038damages the audio in most cases.
2039
2040Added a -mbi option and structure entry to the GUI for memory supersets that
2041came as a side effect of reworking just some minor details of the polysix
2042options (the -load worked however the GUI did not reflect the true memory).
2043This was rolled into general use however some emulations already use local
2044methods to manage this. This will only conflict if the global method is
2045requested and it also affects Chord and Sequence memory as that does not
2046access this parameter (yet). This is a single digit parameter adding that
2047number of K to all memory access. Memory #1 with '-mbi 2' accesses memory
2048#2001 on disk. The option is additionally set from the -load setting, if a
2049memory above 999 is requested then mbi is stuffed with the most significant
2050part and the memory index is the remainder.
2051
2052Revised the LFO to have a range from 0.1 to 100Hz for a pending BME emulation.
2053The rate control is a power function so it should not affect any existing
2054memories excessively.
2055
2056Broken in this release and until further notice is the -glwf option, it causes
2057note vocalisation errors. The -lwf option should be used with each emulator to
2058activate the lightweight filters individually rather than globally.
2059
2060    0.30.4 20 Jan 2009 Korg Poly-800
2061
2062Built a Korg Poly 800 which was more work than anticipated. The GUI needed to
2063have a 'membrane' support for the parameters which generally takes quite a lot
2064of effort, perhaps less since the bit-1 already had much of the code. Another
2065envelope was built as it is a 6 stage design however that is reusable for the
2066pending Yamaha CS-80 that has been under construction for a while. The Poly800
2067emulates all the dual/single oscillator with an envelope each, plus the single
2068filter design was integrated into the emulator PostOps() routine as well as
2069the Poly code so that there can be a single high key tracking filter as per
2070the original design or you can have one per voice as a bristol mod. The full
2071set of mods and general construction are described in the README file, the
2072only remark here is that the single filter code is a bit jumpy when the notes
2073change by large amounts, something that could be improved.
2074
2075Added modifications to the bitone oscillator such that it integrates a separate
2076sync output. This is at the base frequency with a resampled squarewave only,
2077allowing this complex oscillator to still drive sync into other oscillators.
2078Tested with the Crumar and Jupiter emulators.
2079
2080The same modifications were rolled into the explorer DCO since it also
2081generates some combined waveforms that could distort the sync algorithms.
2082
2083Reworked the bitone oscillator to generate what I am for now calling waveform
2084tendencies. The output signal will tend towards a target value under a kind
2085of discharge circuit at a controlled rate. The result is a non-resampling
2086oscillator, more or less, the wave is generated based on algorithms rather
2087than wavetable resampling. The results are at least harmonically unique within
2088bristol, at the moment only integrated into the Poly-800 emulator. They sound
2089reasonable when heavily filtered, a little raspy otherwise. The nice thing
2090is that they are still quite efficient (will change as the waveform heuristics
2091develop), costing only a few percent for the generation of 8 oscillators each
2092with 8 strands of tendencies, all slightly detuned from each other to give a
2093quite rich result. The oscillators can generate square, ramp, saw, tri and sine
2094with support for PW/PWM of the square, sync in/out on ramp/saw/square/tri.
2095The triwave sync is correct softsync, the rest are hardsync with waveform
2096inversion as required. The efficiency lends itself to oversampling which in
2097turn could make the Huovilainen oversampling filter more efficient and give
2098a net improvement in the sound at very little cost however that is FFS and
2099will not be done until after the P800 is released.
2100
2101Integrated a new noise generator which has better performance and also a cleaner
2102overall signal. The previous code has some excessive LF components.
2103
2104The Preacher gearbox was a sixth out of tune, 8 semitones. Pretty strange it
2105was not reported and I admit I had not noticed it. The default gearbox seems
2106to take the wheel indeces from an incorrect starting point. This also brought
2107to light another issue with the same code. Since the user profiles were
2108enforced recently then the tonewheel mapping file had to be in ~/.bristol and
2109was not shadowed back to /usr/local/share. This would have caused some issues
2110with the tones rather than the frequencies.
2111
2112Built another set of keyboard layouts, this time for the Poly-800 but may get
2113rolled into other emulators later.
2114
2115Check Button devices would still dispatch an event if the mouse is released
2116outside the bounds on the device. This should not be the case so checks were
2117added for limits before callbacks are made.
2118
2119There was a small window when killing the app during initialisation could leave
2120the engine waiting for the audio thread forever. It should all exit so added
2121some timeouts to the status polling routines in the midi thread.
2122
2123Key bindings were not being read for library testing. Not an operational issue
2124however it needed a fix for testing purposes at least.
2125
2126The pitchwheel and its associated Registered Parameter were not working in
2127unison, had to reorganise their internal variables and the frequency calc
2128code when changes are made.
2129
2130Reworked a few more shade layers and put the new key designs into a couple of
2131the other emulators.
2132
2133Configure will now prompt the user to install libasound2-dev as well as
2134libx11-dev if either are misssing.
2135
2136    0.30.3 19 Dec 2008 Crumar Tilogy, PWM and Sync fixes, Polysix improvements
2137
2138Added the String section to the Stratus emulator to produce the bigger brother
2139of the pair, the Trilogy. As with the Organ section of the original, the string
2140section is not a major feature and was nothing to write home about. The code
2141adds some extra harmonics to fatten out the sound plus some panning and
2142spacialisation to enhance the section. The features can be disabled to give
2143a more authentic emulation of the original.
2144
2145Changed the graphics on the Stratus synth waveform selector, it was not a true
2146mix but a three way switch. The graphic is emulated however the control is
2147still continuous here.
2148
2149The default memory for the stratus had a bit too much key tracking configured
2150and it shut off the filter completely for the lower octaves.
2151
2152Fixed some minor issues with the Stratus options panel.
2153
2154Took excess debugging out of Trilogy/Stratus code.
2155
2156Touched up the shadow layer for both these emulations.
2157
2158The Polysix mg controller side affected the oscillator frequency. The wheelmod
2159should just affect the overall depth of the routed LFO, it was doing separate
2160mod for vibrato which was undesirable. Also changed the default switch for the
2161polysix from -poly to -polysix and -poly6. For now it will respond to both.
2162This was an unfortunate choice originally and will presently be dropped to
2163just the newer options.
2164Similarly changed the Korg Mono/Poly switch to be -monopoly from -mono, also
2165an unfortunate historical choice.
2166
2167The polysix waveform selection was actually wrong regarding Square and Pulse
2168wave - square is a fixed wave that only uses a PW control to select its width,
2169the pulse wave uses the same setting but adds PWM via another LFO, these were
2170out of sync. Thanks to Andrew Coughlan for the insight whilst working on a Jens
2171Johannsons lead sound, apparantly originally done with a Polysix.
2172
2173Andrew's patch also showed some issues with parameter memorisation for the
2174operating modes: Poly and Mono mode could be lost on reloading a memory, now
2175also fixed.
2176
2177Added in some diverse changes for the PWM code, historically the width has
2178been an integer value in the range of the size of the wavetables and at least
2179for some of the oscillators this was still being managed as an integer. The
2180pulse width is now floating point and the resampling is independent of the
2181main waveform being generated. The difference is only subtle since the
2182original code resolved to better then 0.1% accuracy already however it did
2183show up a couple of bugs in the prophet DCO code regarding offsets and brought
2184to light the noise on oscillator sync with certain waveforms (notably square)
2185that really also need to be addressed but probably in the next release as it
2186really needs triangular (soft) sync as well as hard sync.
2187
2188Fixed a long running issue with oscillator sync, namely that it worked but
2189very badly if the synchronised wave as a square. It was always ok with ramp
2190for example. The cause related to how sync was being done, it was just
2191resetting the resampled wave table index to zero, correctly speaking it needed
2192phase inversion as well, now implemented. The synchronising wave is also
2193resampled before it goes to the synchronised wave to remove the flutter or
2194shimmer associated with synchronising to whole samples, it basically
2195synchronises to subsamples. Phonically this is a big change and it may be
2196rolled back into 0.20 since 0.30 is still relatively new.
2197
2198Alterations for this fix are still needed for bit1osc, it generates complex
2199waves by default and they are not very good for sync signals. For now users
2200will have to simplify the synchronising wave, a future release will have the
2201oscillator generate a sync output signal at its base frequency.
2202
2203    0.30.2 15 Dec 2008 Crumar Stratus
2204
2205This release has an implementation of the Crumar Status 'duosynth', it used an
2206organ divider circuit to produce some slightly lacking organ sounds with four
2207harmonics of pure square waves plus a six voice poly synth. The organ circuit
2208has been beefed up considerably - it can produce the same square waves however
2209adds in alternatives (square and sine through ramp, smoothly) and some added
2210stereo spacialisation. The interesting synth glide circuits are emulated, this
2211is not typically polyphonic portamiento since this beast used organ divider
2212circuits for the oscillators so independent glide on each voice was not
2213possible. In contrast the circuits could be over and underclocked as a note
2214starts then glide back to the target note, here emulated polyphonically.
2215All the legato features should work - the LFO in mono mode will only strike
2216open the LFO envelope grooming circuit once, the glide features will work in
2217a similar legato fashion and the oscillator output can be kind of random with
2218legato.
2219
2220Improved the oscillator sync algorithm however certain waveforms are still
2221noisier than they should be. This was only in the Crumar Stratus oscillator
2222but the alterations can be moved over to the other synchronising oscillators
2223when finished.
2224
2225Altered the filter keyboard tracking for the Huovilainen to try and get better
2226tuning. It can be made playable however that still takes quite a lot of
2227tweaking so a few more changes are likely over the coming releases.
2228
2229Put the reverb back into the Sonic-6, will see what people make of it as it
2230only works well with fat sounds (B3) or at low delays.
2231
2232Reworked some of the button control logic since they were not being set when
2233withdrawn. The logic for withdrawn should really be just 'don't draw' and this
2234was corrected.
2235
2236Reworked some more off the graphics for better drop shadow on the keyboards.
2237
2238    0.30.1 03 Dec 2008 Voyager Electric Blue, Moog Sonic 6.
2239
2240Voyager Electric Blue released in conjunction with some fixes to the existing
2241explorer algorithm as detailed below.
2242
2243Moog Sonic 6 released, the suitcase synth. There are diverse differences with
2244the original, implemented largely because they were denoted at the weakest
2245points of this fair synth:
2246
2247    Added a mod wheel that can drive GenX/Y.
2248    PWM is implemented on oscillator B
2249    Installed an ADSR rather than AR, selectable.
2250    No alternative scalings - use scala file support
2251
2252The emulation is not duophonic. Primarily poly with separated glide. It does
2253have the same 'diaphonic' capabilities although they were pretty dubious in
2254the original. Details are in the README file. There are sadly few memories
2255configured in this first release, none in fact.
2256
2257The Sonic-6 implementation was the first new algorithm in a while and it has
2258shown a few issues with gain levels regarding the filter output. This lead
2259to a few more alterations to the normalisation of diverse emulators but it
2260should fix the issue of filter resonance overdriving the outputs and causing
2261clipping. It should now be a gentler easy sine wave, probably still quite
2262strong but it should not cause clipping with most emulations.
2263
2264The Explorer code needed to be reviewed for a changed filter set and filter
2265characteristics, the original stacked LPF was wrong. The code needs to have
2266either serialised HPF/LPF or parallelised (and then stereo) LPF. This was
2267worked into the code and an interface put together to emulate the 'Blue Ice'
2268version of the synth.
2269
2270Reworked the Release parameter of the Voyager/Explorer. The existing code
2271either configured the value or just '10' depending on the release switch. The
2272correct coding is to either send the value or a small part of the value based
2273on the switch setting, closer to the original.
2274
2275OSS drivers were broken due to a failure to convert some of the device flags
2276correctly. The result was no subfragmentation and no subfragment buffer. Only
2277tested with ALSA compatibility mode.
2278
2279Reworking the drop shadow step by step on the piano keyboard. Gives a better
2280effect.
2281
2282Minor changes to the options for the different Prophet emulators.
2283
2284The 0.20 stream is now maintenance only.
2285
2286    0.20.10 27 Nov 2008 Maintenance release.
2287
2288Altered the permissions on the memory files and pixmap files since some users
2289would have had problem accessing them. That would have made memories
2290unreadable and given some incorrectly painted images. There were no complaints
2291however it probably would not have been totally obvious what the problems
2292even were.
2293
2294OSS drivers were broken due to a failure to convert some of the device flags
2295correctly. The result was no subfragmentation and no subfragment buffer. Only
2296tested with ALSA compatibility mode.
2297
2298    0.20.9 14 Nov 2008 Maintenance release.
2299
2300Changed the lightweight filter option to be emulation local rather than global
2301but kept the global option now as -glwf. This allows for mono lead synths to
2302have a thick filter and the rest to have the lower cost Chamberlains.
2303
2304Added an option to prevent the user interface from requesting window sizes to
2305the window manager by default used to ensure that the aspect ratio was some
2306kind of reasonable match to the original however this causes problems with
2307some tiled window managers causing endless redraws. The -ar or -aspect option
2308will just make the library paint into whatever available space is given to the
2309GUI - the results may look gruesome if either the height or width is excessive.
2310
2311Added code to the XPM reader to look for *.xpm.gz and then to gunzip them
2312first to /tmp. This reduces the installation nearly by a factor of 5 and is
2313minimal overhead an this is only in the startup routines. If the bitmaps are
2314manually decompressed then the overhead is avoided as the xpm is then found
2315first. It probably needs to be noted that the benefit of having the gz images
2316will only be seen if the previous installation is first removed. If not then
2317the .xpm and the .gz will remain.
2318
2319Alterations to the diverse blueprints, most notably the MS-20 however since
2320that is not yet functional it was a bit superfluous.
2321
2322The following synths still need some filter work:
2323
2324        -explorer          - moog voyager. Needs more work (*)
2325        -cs80              - Yamaha. Needs more work (* and is unfinished)
2326
2327* needs to be two separate filters, Chamberlain HP into Huovilainen LP.
2328
2329Added some checks for the number of options being given to both bristol and
2330brighton, and if they are too few to then advise using startBristol and exiting.
2331The goal was to advise on what should be done if somebody just attempts to use
2332the binaries without the wrapping script, and since the script uses a host of
2333default switches it doesn't cause these messages to print.
2334
2335Resolved a long running and annoying problem with closing the GUI windows -
2336when the close is requested from the Window Manager [x] button (typically in
2337the top right) the application does not exit as fast as it should. Had to set
2338some WM attributes and do some more checking for Client Messages. Also had to
2339clean up the code to terminate dual manual synths, something that became
2340evident once the shutdown did not require a ^C in the controlling terminal.
2341
2342Improved the state logic between the threads such that if the audio thread
2343cannot get hold of the target audio device then all threads will exit. This
2344was giving problems since previously the parent thread would not exit even
2345though the audio thread had failed. Recovery was then a manual process. We
2346do not need to apply similar logic to the midi thread since if that does not
2347open we will never proceed to the audio thread anyway.
2348
2349Known issues:
2350Starting two mini on the same engine will seg fault when one is closed. The
2351buffer pointers are cleared incorrectly. It will probably be a trivial fix: not
2352to free the buffers on exit. The floating buffers are little overhead and will
2353get reused if another emulater is started.
2354
2355    0.20.8 28 Sept 2008 New filters, normalised gains, diverse fixes
2356
2357Integrated the Huovilainen filters into the full set of emulators. Some still
2358have filter options that may use the Chamberlain however that may change by
2359converting the Huovilainen to a 12dB/octave option and using the Chamberlain
2360for lightweight filters, BP and HP:
2361
2362Added an option for lightweight filters where the CPU intensive Huovilainen
2363are replaced by the colder but a lot less expensive Chamberlain, -lwf.
2364
2365Band limited oscillators are now the default with up to 31 harmonics. The
2366previous geometric waveforms are still available with '-blo 0' however their
2367roughness was highlighted by the reworked filters. A few emulators do not use
2368the global wave tables and will not inherit the BLO option but they should all
2369use other distorts to reduce the edginess of infinite bandwidth waveforms.
2370
2371Normalised the signal levels on most emulations. This was lead by the Pro One
2372developments since it gave a reasonable signal and was used to baseline the
2373other emulations.
2374
2375Converted glide into a power function to give better control at low values.
2376Converted attack into a power function to give better control at low values.
2377
2378Pitch wheel depth was half a semitone out of configured value. The default
2379of 2 was being misinterpreted.
2380
2381Rhodes was damaged due to a conflict in operator selection since the code for
2382the arpeggiator was finalised. The Chorus controls would select ARPEG code and
2383that would eventually cause issues.
2384
2385Noise was inadvertently mixed in the Mini algorithm, passing through the reused
2386filter buffer. Fixed this and other anomalies with mod routing.
2387
2388Mono emulators appeared to drop new notes when played quickly. The actual cause
2389was a loose coding of the note_off logic where an off event would match any
2390voice on the channel even though note_on had reassigned the voice a new key.
2391This only happened if the note_on voice was still on the newlist waiting to
2392be promoted onto the playlist.
2393
2394Normalised gains and integrated Huovilainen filters to other emulations.
2395
2396    0.20.7 29 Aug 2008 Sequential Circuits Pro-One, Scala tonal mapping tables, overhaul of the Prophet-10
2397
2398Built a Sequential Circuits Pro-1 as a polyphonic emulator. There are some
2399differences in operation compared to the original. Details are in the README
2400file.
2401
2402The Prophet-10 needed some work primarily on layer management. The original
2403had a few features for in-memory volume/balance/tuning, a sequencer and the
2404memory bank functionality was organised differently. These were all worked
2405into the emulation. The sequencer is a lot simpler than the original but can
2406function with a sequence per memory and adds the ability to arpeggiate and to
2407chord notes. Also reorganised the 5/10 voice management since it was a little
2408incorrect previously and realigned the midi channel utilisation.
2409
2410Reworked the hammond drawbar device to support fully painted images and used
2411that to render a new ModWheel dev with a rolling tooth design for the Pro-1.
2412It could be improved with a local highlight rather than using the global
2413shadow layer, something for future study.
2414
2415Reworked the rotary pot to support limited motion from -60 to +60 degrees
2416with stepped movement for the Pro-1 octave selector. This could be used in the
2417other emulations however the general use was for waveform selectors and the
2418problem here is realestate to show the waveforms - without the full rotary
2419action the diagrams will not fit the available space. Mono, Poly now also use
2420it for octave controls and waveform selections requiring a bit of redesign of
2421their blueprints. Also put into the LFO waveform selection of the Jupiter.
2422The work also included redrawing code the complete rotary to support irregular
2423designs. This was required for the tip of the ProOne pot that sticks out.
2424
2425Added a parser for Scala .scl files to build a microTonalMap for the synth. It
2426is possible to retune the synth based on the thousands of Scala maps. The
2427option is '-scl <file>' where the file can be a full path name (leading '/') or
2428if the mapping file has been placed in the $BRISTOL/memory/profiles directory
2429it can be a "filename.scl" or just "filename". The settings are global at the
2430moment and there is no default scala map although that would be possible if
2431people were interested, or a default per emulation for example.
2432
2433Added another two taps to the Hammond chorus organised such that there is a
2434unique tap sweep per VC rate. Each sweep is offset against each other and for
2435chorus then either 1, 2 or all 3 taps are remixed with the original signal at
2436a configurable mix level. Changed the scan betweeen taps to be a more gentle
2437sloped fade rather than a linear transition. The scan delay and LC are user
2438configurable parameters and the tap scan time also to alter the overall speed
2439of rotation. Altered the addition and subtraction of taps to fatten out and
2440smoothen the sound. Reduced the spread of the taps since they are only
2441interesting at low delays. Filled out the lower scan ranges so that they at
2442least always scan between taps. It no longer sounds like it has a broken cap.
2443
2444Added a build option to configure: --disable-jack-midi. There were complaints of
2445interoperability with the older jack MIDI libraries. I do not want to support
2446the previous releases and this is the lowest common denominator to allow the
2447application to at least build with the 0.103.0 API. The complaint is
2448"too few arguments to function 'jack_midi_get_event_count()'" or similar.
2449
2450The audiodev name is now used for jack registrations. It is defaulted to the
2451program name when jack drivers are requested and then overwritten if given as
2452an explicit option. This allows visibility of each invocation of bristol into
2453jackd.
2454
2455MS-20 was packing too many panels. Cleaned it up and added in the new ModWheel
2456however it still does not work - should move it along a little bit.
2457
2458Minor bitmap manipulations for some resizing misfits using the -scale option.
2459
2460Added some more output text for cases where jackd could not be started however
2461a review should be made of the the audio and midi thread status selections to
2462make the operation smoother.
2463
2464Fixed some issues with detuning (sensitivity) where if not initialised it led
2465to unexpected results.
2466
2467Put in limits testing in bristolMidiSendMsg(), something I did not want to do
2468preferring a well behaved GUI however it has lead to issues during development
2469that would have been nicer to have avoided and its at very little cost.
2470
2471The per user private memory cache should now be enforced, this should allow
2472people to keep their private memories over reinstalls and upgrades. Prior to
2473this the cache was only used if the directory structure was in place however
2474that is rather unwieldly for most users for the current number of emulations.
2475
2476
2477    0.20.6 13 Jun 2008 Band limited oscllators. UI Heartbeats, GUI scaling.
2478
2479Added in band limited master waveform tables for the base waves: square,
2480tri, ramp/saw, and a sine wave just to be complete. These were then pushed into
2481the diverse oscillator code for most of the emulations. The results are a lot
2482smoother if a sufficient number of harmonics is used, '-blo 21' or more, however
2483smaller values also give interesting results. The Mini is generally improved by
2484not having the 'infinate bandwidth' geometrically correct waveforms, the sound
2485is softer and warmer with relatively few harmonics. The next work on the sound
2486generation will need to go into the filter.
2487
2488GUI now sends active sensing updates to the engine. This means the engine can
2489detect UI failure and exit rather than hang around and damage the next attempt
2490to connect (with the same MIDI channels, etc). There is one timer to control
2491the rate at which the GUI sends updates and another time for when the engine
2492will decide to stop the emulation. The GUI can detect failure of the engine
2493the same way - the write operation of the active sense will fail if the TCP
2494connection terminates at the remote side. The code could be improved, it
2495should actually scan the list of synths however it is pretty trivial to extend
2496it later. The reason is that the heartbeats are per emulation rather than at
2497the top level however the generation of the heartbeats occurs in the GUI in a
2498separate MIDI thread and hence is at the top level.
2499
2500GUI now has a -scale option to presize the window. Default remains 1.0 and at
2501large scaling will automatically enable aliastype 'pre'. This can be overridden
2502with -aliastype none. There were too many remarks about the diminutive size
2503of the GUI and whilst the author likes the size this option improves usability.
2504
2505Started work on a Yamaha CS-80.
2506
2507Backing of Realistic MG-1 was offset since the prealiasing code, needed to be
2508corrected (actually had a third layer still packed but not used).
2509
2510Explorer glide was not working due to changes to the operator indeces in the
2511emulation not being mirrored in the GUI.
2512
2513Change the max device ccont from 128 to 512, already under the limit with some
2514of the synths probably leading to a few of the crashes I have been seeing.
2515
2516Applied build patches from Alexis Bailler's gentoo packaging.
2517
2518With antialias and mobile devices (sliders) we need to repaint extra pixels
2519during move operation or the 'blur' starts to stain the image. Fixed with some
2520minor alterations to the Undraw code extending its range by a pixel on the X
2521and Y axis.
2522
2523XImage creation failure now suggests using the '-pixmap' option but its almost
2524a case of better never than late. I could consider changing the flag and then
2525attempting the load again however this may already be a non-issue (was a broken
252664 bit X Server issue).
2527
2528Introduced a lever operator that changes its size at it moves up and down its
2529scale. This was for a part of the CS80 code.
2530
2531Added a configurable timer into the GUI host code midi scanning period.
2532
2533Horizontal scales needed redrawing fixes.
2534
2535    0.20.5 20 Apr 2008 First release of the Jupiter-8 emulation, GUI prealiasing, Vasiliy Basic's Mini memory suite.
2536
2537Integrated a 4+4 split/layerable Jupiter algorithm with arpeggiator, sequencer
2538and chording function assignable per layer. Full write up in the README file.
2539
2540Changed the Jupiter design such that the VCO have selector buttons rather than
2541single switches for register and waveform. This is not per the original but it
2542allows me to make them non-exclusive and that will fatten up the sound. This
2543functionality is more like the JP-6 and MKS-80.
2544
2545This code includes a Jack MIDI client interface. It is started with the normal
2546options plus '-midi jack' so that it can be used in parallel to an ALSA link
2547and TCP link to the GUI. The result is that the engine uses two midi threads,
2548one doing bulk operations for GUI settings which might be quite slow, a higher
2549priority thread doing Jack MIDI, and the highest priority thread doing the
2550audio processing. Semaphores are implemented to prevent the threads interfering
2551with eachother.
2552
2553Reorganised qwerty mappings for correct MIDI note selection and transpositions,
2554brightonController.c confdev may need to be buried in window structures.
2555Worked especially for a couple of keyboards that were not C-C.
2556
2557Implemented a prealiasing code which uses whole pixel blending. It is only
2558applied to the silkscreens and gives far better imaging when the synths are
2559resized towards fullscreen - they are still reasonably readable. Reducing the
2560window size and normal size are a bit blurred. Configured with '-aliastype pre'.
2561
2562Reevaluated the arpeggiator step rates to go from 1Hz to 20Hz.
2563
2564The implementation of antialiasing allow threw light on some coredumps at
2565very small window sizes caused by anomalies in the drop shadow rendering
2566going negative due to the small sizes.
2567
2568Arpeggiator did not correctly terminate the note list when more keys than
2569available voices were pressed. Resulted in hanging arpeggiation and holes in
2570the arpeggiation sequence.
2571
2572Resizing windows failed on some emulations with the output signal going to
2573zero: If some of the GUI settings did not match the engine before the resize
2574then the sound will change. We should suppress all updates when resizing since
2575no changes should happen to the engine.
2576
2577Resolved an issue with the -emulate and its interpretation of gain levels,
2578they were a bit low.
2579
2580Touched up the rhodes bass graphics. Minimal, but was bored.
2581
2582Minor touch ups to the memorymoog, prophet, prophet52, axxe, odyssey, mini,
2583explorer and rhodes shading graphics. Adjusted some offsets on the B3 to
2584prevent some lines of transparency on resizing.
2585
2586    0.20.4 26 Mar 2008 Arpeggiating OB-Xa, fixes, synchronised threads.
2587
2588This is maintenance code however you may prefer to defer using it until 0.20.5
2589is released. There are numerous fixed integrated here however the midi note
2590event management has changed considerably and there may be some anomalies in the
2591implementation of the multiple dual linked listed that govern key assignments.
2592The symptoms of such anomalies are potentially quite ugly if you run bristol
2593with real time scheduling, the tight loops may lock your system so you may
2594want to run it with '-priority 0' for no realtime prioritisation. There may be
2595lots of thread and arpeggiator diagnostics that will also disappear in the next
2596release but you can also use the -quiet flag to prevent them.
2597Also, since the MIDI and audio thread now use exclusion then a very busy audio
2598thread may result in what appear to be dropped notes: The note_on gets delayed
2599due to system overhead but eventually generates a 'newlist' entry for the
2600engine to process. If the note_off arrives before the audio thread has taken
2601the newlist entry then it is removed before it even gets started. These actions
2602are visible with the current debugging. A master keyboard should not be badly
2603affected by this however the GUI can end up clumping together multiple events
2604if the CPU load is high and that causes/exacerbates the situation.
2605
2606Reworked the OBXa for some stronger sounds with a couple of routing corrections.
2607Overall sounds is a lot richer. This lead to changing the glide to be a log
2608controller rather than lin, another improvement that will affect existing
2609memories though. Will become a general capability. Fixed some flagging issues
2610with OBX modpanel and layer assignments. Adjusted the mod mix and corrected
2611the mod LFO rate controller. Should build some more OBXa memories as well.
2612Rework OBXa dual/split options for single midi channel. Reworked some of the
2613OBXa graphics including a shading layer ready for distribution.
2614
2615Arpeggiating sequencing now records under suitable control - only emulation with
2616an interface is in the OBXa, Bit-100 but others may follow. The settings can be
2617saved in a memory to be recalled and recoded to the engine. There is serious
2618fun to be had now with the OBX-a emulator and sequencing/arpeggiation. Details
2619are in the readme file but basically start arpeggiating and then crank down
2620the filter envelope decay and play with the filter cutoff and mod level.
2621
2622Implemented the chording code as a small extension to the 0.20.3 sequencer.
2623When enabled it will assign a voice to every note in the note list, transposing
2624them as it goes.
2625
2626Worked the arpeggiator changes back into the Juno-60 code. Made the OBX-a Seq
2627be once per voice rather than once per synth.
2628
2629The LFO rate parameter was converted to a log controller rather than a linear
2630one, it improves response and allows for some very slow cycles. It will affect
2631some memory settings. Glide also changed to logarithmic control. Arpeggiator
2632rate similarly.
2633
2634The memory library was changed such that it honoured the active parameter
2635when calling memory locations, something that may well have changed the
2636characters of the other synths. Went through the code to clean up the obvious
2637ones but should run through them all again.
2638
2639It is now possible to have the GUI search for an emulation rather than passing
2640the emulation exlicitly. This is with the -emulate option. The feature also
2641sets default voice counts, detunes, gains, etc, from the emulation such that
2642the options such as "-voices 10 -emulate jupiter8" and "-voices 10 -jupiter8"
2643are different - the first call would default the voice count to 8 from the
2644emulator, the second would have the emulate inherit the explicit option of 10
2645voices and since we have not actually requested an emulation then the remaining
2646options will not be taken from the application defaults.
2647
2648Installed some new key bitmaps, not sure about the results as they look a little
2649surreal, almost chrome rather than ebony.
2650
2651Corrected some tv_usec comparison failures that were damaging the double click
2652timers and defaulting to 1000ms only.
2653
2654The bristol ASLA seq interface would misinterpret note on/velocity zero. Caused
2655some strange results with certain keyboards, and only with some bristol
2656features (arpeggio) since it is correctly reinterpretted later in the chain.
2657Also, the OB-Xa midi tracking would double strike with the GUI linked up to
2658the master controller, the GUI was not honouring exclusion and retransmitted
2659midi events already seen by the engine.
2660
2661Reorganise the transposition system for some emulations, they now correctly
2662request the transpose to the engine rather than just scale their own keyboard.
2663Both methods work and are arguably both correct however unless the engine is
2664informed of a tranposition then it will not be audibile from a master keyboard
2665driving the engine. This alteration needs to be reviewed as it separates the
2666midi key id from the qwerty keyboard id's and that is awkward for anybody who
2667wants to build their own mapping files. The mapping is now not qwerty key to
2668midi key but qwerty key to GUI button index - for most emulations this is the
2669key 0 to 60 on a 61 notes keyboard. Also separated the mapping table per
2670window rather than globally - when the GUI goes medusa this will be required.
2671
2672Resolved another window timing issue with note on events at high load. This
2673required using a couple of semaphores and was a big change to the note event
2674management. It ironed out a few other unlikely situation such as running two
2675monophonic synths simultaneously would give unexpected results - their note
2676selections could get intermixed. The use of semaphores for mutual exclusion
2677of the midi and audio threads was very worth the effort as it will probably
2678be used to distribute load over different cores with multiple audio threads
2679presently.
2680
2681Resolved a lingering seg fault in the DX operator with the bounds checking
2682that was added and cleaned up the L1/L2 gain levels to be lin rather than log,
2683the log did not work well for these controls.
2684
2685Fixed a heap corruption in GUI has needed addressing for rather a long time
2686instead of providing a long term workaround. Resolved a couple of related
2687issues with detection of pure blue from negative offsets that also caused
2688segfaults that have been annoying me for a while. The workaround that had
2689been in place for several releases was pretty ugly.
2690
2691Cleaned up some parts of the code that were giving in my opinion spurious
2692error messaging during compilation.
2693
2694    0.20.3 05 Mar 2008 Integrated a new Crumar Bit-100 emulation
2695
2696Finalised the bit-100, some extra options, ability to save -1 and -99 memories.
2697
2698Restructured the rate algorithm for the glide, there were historical issues
2699with its mathematical correctness. Additionally added a bristol NRP to allow
2700the maximum glide time to be configurable. The default value was up to 30s
2701however that often felt excessive and makes configuring short values awkward,
2702changed this to be 10s with the ability to request up to 30. The GUI now
2703responds to the -glide option per emulation and the Bit emulations have memory
2704parameterisation.
2705
2706Added pink and filtered noise options to the BIT synths, defaults to white. The
2707option 'white' could be dropped and turned into Pink with progressive filter.
2708
2709Added a flag required to enable NRP parameter changes in the engine. Default
2710is now not to pass them for interpretation since it is a rather arbitrary
2711interface and has been probably responsible for noisy interaction with some
2712master keyboards.
2713
2714Diverse fixes to the BIT emulations:
2715Layer volumes were damaged going into split/layer settings.
2716Layer transpose, split and midi channel tracking needed some corrections for
2717the different options. Specifically there are flags for supporting different
2718settings per layer (per default they remain in sync) and these were not being
2719honoured.
2720The same fixes were required to ensure that non-aligned settings would be
2721correctly returned after dual loading splits and layers.
2722Layer parking was damaged (required writeThru cache enabled to work).
2723Memory loading was damages for high ordered parameters.
2724More issues with the high order parameters.
2725
2726Restructured the arpeggiator to cetralise the code ready to put it into the
2727Jupiter emulator. Code inserted to allow the arpeggiator to hook into the
2728midi note event dispatching to prepare it for reprogramming.
2729
2730Tested now with jack 0.99, 0.103 and 0.109 successfully.
2731
2732Updated copyright dates to reflect 2008.
2733
2734    0.20.2 25 Feb 2008 Integrated a few Crumar Bit emulations.
2735
2736Edited brightonButton for highlighted buttons, required repainting the control
2737and could be rolled back into the brightonButton rather than being separate.
2738Build a Crumar Bit-99/Bit-1 and an m2, all variations on the bit-99. Added
2739several bristol features via data entry parameters. The capabilities and the
2740differences to the original are documented on the website and in the README
2741files with the distribution.
2742Patched in a dummy audio driver such that no audio operations are executed. This
2743may seem rather daft for a synth however working under virtualized systems often
2744gives dodgy and unreliable audio interfacing so having a dummy lets me still
2745work on the GUI to engine interfacing rather than limiting the work to the GUI.
2746This is accessible with '-audio dummy'.
2747Fixed an issue with port redirection and multilayer synths failing.
2748NRP were being incorrectly interpreted which meant that emulation gains and
2749detunes were not being registered.
2750Velocity of note off events was being mapped into voice velocity as well as
2751note-off velocity. This is incorrect as it causes jumps in envelope gains, etc.
2752The correct behaviour is for device that want to use note off velocity should
2753search for it in the correct place. The bristol ADSR does not adjust release
2754rates by velocity however it could by using this explicitly.
2755The envelope uses a power gain curve that is precalculated for lookups on
2756attack/decay rates. It was a little damaged at the zero point and could cause
2757'inf' failures on some of the work being done, highly inefficient. Only seen
2758in very rare cases and normally just during development since the code avoided
2759using the limits. Corrected.
2760Implemented OMNI mode however only the Crumar allow access to it at the moment.
2761Transpose has been reimplemented such that the MIDI library is correctly
2762handling the transpose. Previously it would lose track of some notes - press
2763key 36, transpose 12 notes and it would not be able to match the note off to the
2764original note on. The fix was resonable trivial and now the rest of the synths
2765should also start using this method, something that will happen later.
2766Velocity control has been added into the GUI so that it can be requested at
2767start time per emulation. I should try and document all the 500 or so different
2768mappings - the only references at the moment are the source code.
2769
2770    0.20.1 20 Jan 2008 First release of the 0.20 stream
2771
2772Designed a 7 segment red led digit display for the Jupiter panel. The original
2773had an 8 segment display however the floating point was superfluous and has
2774been left out.
2775Compilation without jack or ALSA would fail dismally, the make routines would
2776not pull out all the ALSA definitions. There may remain some issues since the
2777OSS Midi interface does not seem to work, only rawmidi. If you really want OSS
2778support with MIDI and all then mail the author. The changes altered the list of
2779drivers, removing the Sun D-BRI and ALSA revisions prior to 0.9, both of which
2780are now antiquated anyway.
2781The remaining audio interfaces are:
2782
2783    OSS (pretty much any release as the interface is stable)
2784    ALSA 0.9 or greater (SND_LIB_MAJOR=1)
2785    Jack 0.99 or greater
2786
2787There does not seem to be any jack version information available from the
2788include files at compile time unfortunately, something that may be an issue
2789with the currently new 0.109 release that appears to have altered the library
2790interface specification.
2791
2792This should not be released until jackd with a 64 sample period size has been
2793tested (reported to fail) and we should also consider waiting until the jack
2794interface has been folded into the bristol audio library even though it does
2795not like being there. That may wait, the alterations the audio library to remove
2796the diverse unused interfaces and changes to the compilation flags seems to
2797improve stability (and may be ported back to 0.10 at some point). After that we
2798can start breaking things again.
2799
2800Cleaned up some of the debuging.
2801Removed the bristol files from the brighton directory.
2802This release is based on 0.10.13 with the above changes.
2803
2804    0.10.13 19 Jan 2008 Maintenance release.
2805
2806Resolved a failure in the Vox M2 percussive harmonics, they were not decaying,
2807an issue with the operator selection in the GUI.
2808Cosmetic alterations to some of the vox switch images, prophet panels, etc.
2809Added some bounds checking to the jack interface to prevent a couple of errors
2810that occur when failing to open the interface.
2811XImage issues with 64bit sytems - the XCreateImage() fails due to pad and line
2812length errata. Workaround is to use -pixmap (avoids the XImage acceleration
2813code) and the fix needs testing but does not break 32 bit systems.
2814This will be the last development of 0.10 stream, no more features only bug
2815fixes. Further developments will go into the pending 0.20 stream.
2816
2817    0.10.12 03 Dec 2007 Maintenance release.
2818
2819RT priority is now defaulted to 75, a value of zero for the runtime parameter
2820does not reschedule the thread at all, it is left up to the linked libraries.
2821Vox Continental would segfault due to pedalboard buffer pointers.
2822Implemented a workaround for damaged segment sizes with some jack attachements
2823but this is not really a fix, it just avoids the problem by exiting a little
2824more gracefully when there is a mismatch. It may become the fix though, the
2825problem only happens when I cannot find the period size a priori.
2826Reworked parts of the engine code such that it checks for data availability
2827with select rather than going into a wait state. This is a lot cleaner as it
2828has a timeout for failure situations. Timer defaults to a few seconds only,
2829that could be improved.
2830Rhodes voices were broken due to reorganisation of the ADSR default gain to be
2831liniar rather than logarithmic, firstly the notes barely decayed but also the
2832harmonic content did not vary from the FM algorithm.
2833Integrated a chorus into the Rhodes GUI and a wrapper in the engine FM code.
2834
2835    0.10.11 27 Oct 2007 Arpeggiator written into the MIDI library.
2836
2837Reworked the Juno image for more edging and new sliders.
2838Built some default "temperature sensitivity" into the dual manual synths, it
2839should improve the sound, at least when layered.
2840Reorganised the voice initialisation code to have better GM2 conformancy.
2841Double click timout made into a GUI configurable option.
2842Added a 7 segment LED digit block to the library for the Jupiter display.
2843Implemented the arpeggiator for the Juno. It was a requirments for the Jupiter
2844however it is easier to test with a synth that already works.
2845Reworked the threeway switch so that it was sequential, required some changes
2846to the emulations using them.
2847
2848    0.10.10 01 Oct 2007 Bass pedalboard integration for Hammond and VOX.
2849
2850Fixed the Vox M2 memories. Also reworked the octave frequency of its harmonics
2851since the reed should be an octave higher. The bass pedals are now visible but
2852the envelope closes early under some situations.
2853The frequency table for the VOX was 'too correct', rewrote the vox microtonal
2854map to have a table based on integer division from 1MHz to introduce a few
2855cents of detune as per original.
2856Some of the microtonal maps were incorrect, loss of key 108. Had no effect as
2857none of the emulations used the microtonal map however it needed to be fixed.
2858Put a bass pedalboard into the Hammond B3 emulation. It requires extra graphics
2859space which is not an issue, and for both emulations the pedalboards kind of
2860come for free - they use the same MIDI channel as the lower manual but call a
2861different oscillator depending on MIDI note. The B3 memory structures had to
2862change to support the lower manual drawbars. If you had your own memories
2863in ~/.bristol/memory/hammondB3/* then you should really delete them.
2864Made the audio thread priority a runtime option.
2865Reworked the prophet pot bitmaps for higher contrast and closer alignment.
2866Distributing the GM2 MIDI controller mappings as default, not all emulations
2867support it though - does not work well for the dual manual synths nor the
2868organs.
2869
2870    0.10.9 16 Sept 2007 Reworked installation procedures, Vox-300
2871
2872Thanks to Nicolai Lissner for some directions on the autoconf install locations.
2873Made some fixes to the control key interpretation however, correctly speaking,
2874it is still actually damaged. The 'incorrectness' is minimal so will spare any
2875resolution until it really is needed.
2876Finished work on a dual manual VOX Super Continental (M-II, 300, etc), most of
2877it works, the only unimplemented feature is the bass sustain envelope.
2878Recoloured the Memory Moog buttons.
2879
2880    0.10.8 01 Sept 2007 Realistic Concertmate, recolorations, fixes
2881
2882Fixed some issues with the OB routing for correcting the mix button settings.
2883Transparency shadow would damage on redrawing. Fixed for the hammond however
2884for some of the synths (pro10) this shadow is lost on resizing the window. FFS.
2885Minor recolouration of some of the hammond bitmaps for offwhite controls.
2886Recoloration of the ARP Odyssey sliders.
2887ARP Odyssey Ring Mod was broken due to 2600 alterations.
2888Was bored, so programmed a Realistic (Moog) Concertmate MG-1 as a giveaway.
2889
2890    0.10.7 29 Jul 2007 migration of graphics from pixmap to ximage
2891
2892Net performance improvement just for this one change is 5 to 10 times the
2893rendering rate. The brighton and B11 library are now again in the same
2894order of magnitude of CPU requirements with brighton about 1/4 of the B11
2895interface. The overall improvement is best reviewed with the ARP 2600, before
2896all the optimisations it could take over 10 seconds to load a memory, now it
2897is probably closer to 1/10th of a second. There are still some issues with
2898the XImage interface and this is a configurable option (--disable-ximage)
2899however I am also going to turn this into a runtime option rather than just
2900compile time.
2901
2902Now that the interface speed is optimised the antialiasing code has been
2903reintroduced again as a compile and runtime option. It does have a performance
2904hit. The antialiasing has two parameters, the depth of bit masking and the
2905type - texture or all. Antialiasing with the 'all' option affects the total
2906representation, using the texture option only affects the backgrounds such
2907that the devices maintain clarity.
2908
2909Added a monochrome '-grayscale' option, aliasaed as '-gs|-greyscale' which
2910does late stage color replacement to shades of gray. In itself it is not very
2911useful as all displays are color however the algorithms for color conversion
2912will be used presently in some menuing features. There are 5 values:
2913
2914    1 is an average of the three color components.
2915    2 is half the average (dimming)
2916    3 is quarter the average (dimming)
2917    4 is the minimum component
2918    5 is the maximum component
2919
2920Of these the first 3 will be used, in a generalised algorithm, for the grey
2921shaded floating menus.
2922
2923    0.10.6 27 June 2007 bugfixes and GUI efficiency improvements.
2924
2925Implemented a color cache to optimize the rendering algorithm. It changes the
2926'quality' parameter to a BBP value to which colors are rounded (thus affecting
2927the quality of the rendered image) and uses the subsequent red color as an
2928index into a cache table. Each row is a doubly linked sorted list, first by
2929green, then blue by green. Search depth is now no longer the average of half
2930the number of colors but closer to half the row length (which in turn depends
2931on the color quality). Delivers about 10 to 50 times improvement, especially
2932for the color intensive transparency layers. Cache stats are available from
2933the ^P XPM dump command. The remaining inefficiencies in the brighton X11 lib
2934should now also be addressed. Prior to these changes the brigton interface
2935itself was the most intensive operation, it is now only about 10% of the CPU
2936required to repaint, hence there is space for another 5 to 10 fold improvement.
2937
2938Corrected inefficiencies in the horizontal scaler repainting. Originally this
2939painted the whole width of the scaler and was resolved to just paint the area
2940redrawn by the movement, roughly doubling its performance.
2941
2942Perfectly vertical patchcables were incorrecty rendered. The actual painting
2943was correct however the rendering onto the screen was too narrow.
2944
2945    0.10.5 06 June 2007 added roadrunner electric piano
2946
2947    0.10.4 24 May 2007 added Solina string machine
2948
2949Potentials:
2950Some of the diverse synth memories are damaged.
2951ARP 2600 has damaged vertical patch cables.
2952Move the key mappings and controller mappings to .mcm file as they are static.
2953Removed clipping in new keyclick generation.
2954
2955    0.10.3 18 May 2007 added the following
2956
2957Modifications to configure.ac and Makefile.am to correct autotools errors.
2958Corrected use of --exec_prefix for configure process.
2959
2960Note velocity, Poly and Channel Pressure curve mappings from file. Global.
2961Note integer index mapping in same configuration file. Global.
2962Note Microtonal tunings. Global settings - affects the whole engine.
2963
2964Note velocity map - per emulation.
2965Note microtonal map - per emulation.
2966
2967B3 key noise generated per bus with configurable delays and gain per contact.
2968Reverse controller motion of hammond drawbars (mappings?).
2969
2970Controller mapped value curves for lin/log/exp/parabolic with inverse table.
2971
2972Resolved issues with use of '-jack' flag as opposed to '-audio jack'.
2973
2974More keyboard velocity curves of which one mapping per emulation.
2975
2976Pitch bend damaged by microtonal mapping implementation, fixed.
2977
2978    0.10.2: 10 May 2007
2979
2980Changes to automake configuration files for installation prefixes.
2981
2982    0.10.1: 4 May 2007
2983
2984Probable first distribution of the bristol version using GNU autotools.
2985
2986