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