Hihi. Please note that I am not to be taken seriously most of the time, especially not when using all-caps.
Part 1 of 3 of an update on progress on the Bees-in-Trees version 2 enhancements to Braids. The following features (and one anti-feature) have all been implemented in Bees-in-Trees Version 2 and they all appear to work correctly. Version 2 is still based on Braids v1.6. The plan is to port all these enhancements to the Braids v1.7 code base (except where features which are new in Braids v1.7 have rendered some of the Bees-in-Trees enhancements redundant, as noted below), and make that available as Bees-in-Trees version 3 in both source code and compiled (WAV update file) forms.
- Color is now also a target for the internal envelope (and the new internal LFO - see below). The available choices under the TDST menu are now: SYNC, TIMB, LEVL, T+L, COLR, T+C, L+C, ALL. The compound destinations are self-explanatory. The ability to modulate Color with the internal envelope significantly enhances some of the oscillator models, in others, not so much, and in a few, it is useless, but not harmful.
- Voltage control over the attack and decay of the internal envelope is now possible, via the FM input (and fine tune knob), as in the existing META mode: instead of offering just ON or OFF, the META menu now offers the following choices: OFF , MODL, ATTK, DCAY, AD02, AD05, AD10, AD15, AD20, AD30, AD40, AD50, AD75, A=D, DA90, DA80, DA70, DA60, DA50, DA25 and DA10. MODL is identical to the existing META=ON mode, and causes voltages on the FM input to sweep through the various oscillator models - no change to this. ATTK and DCAY use the voltage on the FM input (plus the fine tune knob setting) to override the attack and decay parameters, respectively, of whatever envelope is currently selected in the TENV menu. In other words, in ATTK mode, the envelope attack time is voltage-controlled via the FM input, but the decay time honours the decay time for whatever fixed envelope type is selected in TENV. Vice-versa for DCAY mode. The remaining new META envelope modes, AD02 through to DA10, put both attack time and decay time of the internal envelope under voltage control via the FM input (and fine tune knob). The numbers refer to the ratio of attack to decay time e.g. for AD20 mode, the ratio of attack time to decay time is 0.2, while for AD75, the ratio is 0.75. By extension, DA60 means the ratio of decay time to attack time is 0.6, which is the same as the ratio of the attack to decay time being 1.66. A=D mode means the attack time equals the decay time. However, although the ratios are fixed for each mode, the actual envelope durations are not - they are under voltage control via the FM input. A voltage range on the FM input of approximately zero to 5 volts will set the envelope segment duration anywhere between its minimum (about 1.5ms) and its maximum (about 12 seconds). Negative voltages are ignored. Note that an external voltage must be supplied to the FM input in order to set the envelope segment duration in these VC envelope modes, but any fixed voltage source can be used, and the duration can then be adjusted via the FM input attenuverter on the Braids module. Alternatively a dynamic external CV source in the 0V to 5V range, such as an external LFO or sequencer, can be used to dynamically vary the envelope segment durations. Note that there is only one envelope segment duration parameter available, via the FM input on Braids, but the ratio of attack to decay times can be adjusted as described above via the META menu using the ADxx or DAxx envelope modes. All existing fixed (non-voltage controlled) envelope types have been retained for use when you wish to use the FM input for some other purpose, such as the original model sweep META mode (MODL), or even, gosh, for its originally intended purpose of frequency modulation.
- Several voltage-controlled internal LFO modes have been added. These are alternatives to the internal envelope - you can’t use both the internal envelope and the internal LFO simultaneously - in fact, the internal LFO is just an automatically re-triggering version of the internal envelope. The LFO modes are also selected via the META menu - the following modes are now available after the new voltage-controlled envelope modes: LFOx, LFO^, LFOw, LFO (saw) and LFO (ramp). LFOx uses exponential curves for its equal duration attack and decay times. LFO^ is a triangle wave LFO. LGO (saw) and LFO (ramp) are sawtooth and ramp waveform LFOs. LFOw is basically a triangle waveform LFO, except that each arm of the triangle is “wiggly” (hence the “w”). This takes advantage of the fact that waveforms produced by wavetable oscillators do not need to be monotonically increasing, so that the LFOw level surges and retreats seven times on its rising arm, and drops and then re-swells seven times on its falling arm. The LFO frequency is also voltage controlled via the FM input, using the same 0V to 5V range, but the sense is reversed, so that higher voltages increase the frequency, as you would expect. The LFO will run up to low audio frequencies. Like the internal envelope, the internal LFO can modulate Level, Timbre, Color, or any combination of those three. In LFO mode, when Level is selected as the destination, or one of the destinations, the LFO waveform reduces volume from maximum, rather than increases it from minimum as it does in internal envelope mode, thus allowing subtle tremolo effects (see also variable modulation depth, below).
Part 2 of 3
- In the TENV menu, the following new envelope types have been added, after the existing internal envelopes (TT, TIK, WOMP etc): M005, M010, M020, M030…M230, M240, M250 and M255. These new envelope types are intended to be used with the voltage-controlled envelope and LFO modes (see above), and provide gradations of modulation depth (hence the M prefix) from almost none (M005) to full range (M255). These new envelope types allow the Timbre and Color parameters to now be swept over their entire range (using M255) if required, or the modulation depth to be adjusted in fine increments. Note that the modulation depth setting provided by these envelope types has no effect on amplitude (level) when in any of the internal envelope modes (although they do affect Timbre and Color in those modes), but they do affect the depth of level modulation when in any of teh LFO modes, thus allowing depth of tremolo to be set, and depth of Timbre and/or Color modulation as well, of course.
- WTx2 duophonic wavetable model with second voice offset controlled by the Color parameter: this new model is the love-child of the existing triple waveform models and the existing WTx4 model. Unlike the WTx4 model, it has only two paraphonic “voices”, not four, and the pitch of the second voice is offset from the first voice by an amount set by the Color parameter (both Color potentiometer and Color CV input), in the same way that the Color parameter controls the third voice in the triple oscillator models. Timbre scans the same wavetable in the same manner as it does in the WTx4 model. However, each of the two “voices” consists of two wavetable oscillator instances, each detuned from each other by a small amount. The degree of detune is different for each pair of oscillators, and also varies as the Color parameter changes. The result is a thick chorus effect on both “voices”, an effect which varies as the Color parameter is swept. Caveat: both external and internal (auto) triggers may causee an audible click in this model if no amplitude (level) envelope (either internal or external via a separate VCA and envelope generator) is used. This is because a trigger causes the phase of all four wavetables to be reset to random positions, resulting in extra lushness. This issue also affects the existing WTx4 model in the official Braids firmware, particularly if all four wavetables are in unison or almost so. The solution is to use an amplitude envelope in order to make the initial click inaudible, or to not send any external triggers or use internal auto triggers when the WTx2 model is used.
- Square-sawtooth-triangle triple oscillator model: this works identically to the existing triple sawtooth and triple square oscillator models, except that instead of sawtooth or square waveforms for each paraphonic voice, it uses one square, one sawtooth and one triangle waveform. The result is appreciably different from the existing triple waveform models. (Note: this will be dropped from Bees-in-Trees v3 because it is not sufficiently different from the existing triple square wave model in Braids IMHO).
- Triple triangle oscillator model (^^x3): this works identically to the existing triple sawtooth and triple square oscillator models, except that it uses a triangle waveform for all three oscillators. Due to the much less bright harmonics in a triangle wave, it can be used effectively without any filtering, if desired. (Note: this has been superseded by the triple triangle model now present in Braids v1.7, which will also be in Bees-in-Trees v3 of course).
- Triple sine wave oscillator model (SINS): this works identically to the existing triple sawtooth and triple square oscillator models, except that it uses a sine waveform for all three oscillators. Due to the absent harmonics in a sine wave, it can be used effectively without any filtering, if desired, although there are some harmonics because all three waves are summed - nonetheless, it sounds very smooth and rounded, sans filtering, as you might expect. (Note: this has been superseded by the triple sine wave model now present in Braids v1.7, which will also be in Bees-in-Trees v3 of course).
Plus one anti-feature:
- A paschal oophorectomy has been performed: the Easter egg oscillator model has been removed and the ability to trigger Easter egg mode has been disabled. One could say that the code for it has been Pynchoned off… This was necessary to free up space for the enhancements described above. Sorry!
Part 3 of 3
All these enhancements seem to work fine, but more extensive testing is required. They are intended for advanced users only, and assume thorough familiarity with the way Braids operates. The additions to the TDST, TENV and META submenus can all interact with each other, by design, to substantially extend the range of sounds that can be coaxed out of a Braids, without using any other modules (except a fixed voltage source). As such, Bees-in-Trees may be particularly useful in small systems where external modulation sources are few, but since it does not remove or subtract any existing Braids features or capabilities apart from the Easter egg, it may be useful even in large systems.
Control of the new capabilities has been provided at this stage by “overloading” (some would say thoroughly abusing) the existing menu structure. This has been done out of expedience. However, if Bees-in-Trees proves to be valuable, then the enhancements described above, and others, can be controlled far more elegantly by implementing a restructured and extended Braids menu system - that seems quite feasible. For example, a separate menu could be provided to set the modulation depth. Other enhancements might be possible, depending on storage space available. For example: separate modulation depths for each of Level, Timbre and Color; the ability to reverse the modulation sweep independently on Timbre or Color (so Color goes up when Timbre goes down and v-v); or provide FM as a target when in LFO mode (i.e. provide built-in vibrato, possibly with selectable delayed onset times…).
Feedback of any kind, short of outright abuse, is most welcome. Source code for Bees-in-Trees Version 2 is available on GitHub. I won’t be making a compiled binary WAV upgrade file available for BnT v2 at this stage, pending porting of al the enhancements to the Braids v1.7 code base and release as BnT v3. Stay tuned for further updates
Wow, lots of good stuff here. Good stuff. I need more time with production Braids, especially 1.7 which I can’t wait to try this weekend. I’ll probably DIY a second this month, so perhaps I’ll run one of each.
The Bees-in-Trees v2 enhancements described above have been ported to the Braids v1.7 code, which becomes Bees-in-Trees v3, and which is available in source code form at https://github.com/timchurches/Mutated-Mutables/tree/master/braids
Unfortunately, the WTx2 oscillator model wouldn’t fit, but it may be added in a future version if I can squeeze the code down a bit more (one space inefficient hack that could be fixed is my use of a LUT for the LFO triangle wave, when it could be just calculated on-the-fly). Otherwise, all the enhancements described above are in it - in particular, voltage-controlled envelopes and a voltage-controlled internal LFO, as are all the Braids v1.7 enhancements (i.e. the three percussion models). The only thing missing is the Braids Easter egg, which as noted above was excised to make space for the enhancements.
I’ll do some more testing tomorrow and then make a compiled WAV update file available for it.
Now, does anyone love or use the QPSK oscillator model? If not, it could also be removed to make more space. How about the marquee feature? Personally, I like it, and would be loathe to remove it.
OK, everything described as implemented features in the README file at the bottom of the home page for the Mutated Mutables repository on GitHub now works in Bees-in-Trees v3d. I have added sine and square-ish LFO modes, but there are no other changes to the enhancements described above. It now just fits in the available flash storage on the Braids MPU - any more features will require deleting something else. Source code is on GitHub.
If you are an expert user who is able to re-flash your Braids should anything go wrong, and you wish to test the Bees-in-Trees firmware, then a compiled binary for v3d in WAV update format is available (superseded) (download it, don’t listen to it!). Testers are requested to report problems, experiences, impressions and suggestions in this thread, please. If there are problems and you want to revert to version 1.5 or 1.7 of Braids, I strongly recommend that you reset the stored settings to the defaults first - do this by going into menu mode, and navigate to the version number - the final choice in the menu. It will read “BT3d”. Hold down the encoder for more than 1 second. This will reset all stored settings to the Braids v1.7 defaults. You can then re-install the Braids v1.7 or v1.5 firmware.
If you are not in a position to re-flash the firmware in your Braids should something go wrong, then I suggest that you hold off from testing Bees-in-Trees until a few more people have tested it first. I cannot assist you if something does go wrong, and Olivier and Mutable Instruments cannot be expected to re-install factory firmware on Braids on which alternative firmware has been installed.
1. Compiled and tested. Everything worked according to your specs.
2. Impressions: It took me a moment to understand your modulation matrix - maybe some kind of diagram would help people get the gist right away. Is it useful? Sure!
a. The variety of Attack/Decay modes is excessive and invoke a lot of knob-twisting. That said, having that level of granular parameters is welcome.
UI points: -1
Synth engine depth points: +3
b. Along those lines, are all the values between M005 to M255 really necessary when you already have attenuverter on the FM input?
UI points: -1
Synth engine depth points: +4
I could see this making sense if the LFO speed could be offset independently of any CV input in the FM jack. As such, I propose adding a menu item (if possible) which lets you choose the initial LFO speed. More menu-diving, but hey, it’s a nice freebie.
3. I encountered this “bug” that also seems to exist in the official 1.7:
As I mentioned, resetting it made it go away.
@Sneak_Thief, thanks for testing it!
> 1. Compiled and tested. Everything worked according to your specs.
> 2. Impressions: It took me a moment to understand your modulation matrix – maybe some kind of diagram would help people get the gist right away. Is it useful? Sure!
Yes, the UI now leaves a lot to be desired - as I noted above:
Control of the new capabilities has been provided at this stage by “overloading” (some would say thoroughly abusing) the existing menu structure. This has been done out of expedience. However, if Bees-in-Trees proves to be valuable, then the enhancements described above, and others, can be controlled far more elegantly by implementing a restructured and extended Braids menu system – that seems quite feasible. For example, a separate menu could be provided to set the modulation depth. Other enhancements might be possible, depending on storage space available. For example: separate modulation depths for each of Level, Timbre and Color; the ability to reverse the modulation sweep independently on Timbre or Color (so Color goes up when Timbre goes down and v-v); or provide FM as a target when in LFO mode (i.e. provide built-in vibrato, possibly with selectable delayed onset times…).
However, restructuring the Braids menus is quite a lot more work, and a diagram to explain the “overloading” of the would be a good idea as an interim measure. Or perhaps a series of vignettes or use-cases with and explanation of how to set the new features to achieve them? I’m lazy…maybe just a YouTube video.
However, the main thing I wanted to check at this stage was whether the enhancements are worthwhile from a sonic/synth engine perspective. Glad you think they are. If others also think so, then I’ll work on improving the UI.
> a. The variety of Attack/Decay modes is excessive and invoke a lot of knob-twisting. That said, having that level of granular parameters is welcome.
Agreed. I tried it with fewer values, but immediately felt the need for intermediate steps. A separate menu to set Attack-to-Decay ratio is the obvious solution, with perhaps 9 large steps, and a further click allowing you to set the precise ratio between those large steps in the ratio.
> b. Along those lines, are all the values between M005 to M255 really necessary when you already have attenuverter on the FM input?
The M005 to M255 modulation depths are most useful when META is set to one of the voltage-controlled internal envelope or voltage-controlled internal LFO modes, when the FM input and its attenuvertor sets the envelope duration or the LFO frequency. The modulation depths M005 to M255 on the TENV menu can then be used to set exactly how much tremolo you want, or how much you want timbre and color to be swept for each triggering of the envelope or each cycle of the LFO.
Yes, modulation depth needs its own menu instead of hijacking the TENV menu.
> I could see this making sense if the LFO speed could be offset independently of any CV input in the FM jack. As such, I propose adding a menu item (if possible) which lets you choose the initial LFO speed. More menu-diving, but hey, it’s a nice freebie.
Yes, a separate menu is needed to set the LFO speed or envelope times, without having to use a voltage on the FM input to do so. At the moment, you need to supply a voltage to the FM input in order to set the envelope times or LFO speed - either by varying that voltage or using the FM attenuvertor.
> 3. I encountered this “bug” that also seems to exist in the official 1.7
I’ll try to reproduce it. Glad that the stored settings reset fixes it, but no idea idea why that would correct it, or what could cause it, for that matter.
Now, what existing features should be removed to make space for the UI enhancements? I’ve already removed the Easter egg. I think the marquee is next - that will simplify the menu code as well. And the QPSK oscillator model. Thoughts?
Wow! Congratulations BennelongBicyclist on a thorough work.
– Note sequence into Pitch CV
– Slow external sine LFO CV into FM input (controlling internal LFO speed)
– LFOx assigned to Volume, Color, Timbre, Sync
– Manual sweeping of Color, Timbre and FM depth
– light reverb and compression
@Sneak_Thief: cool! That has given me an idea! It should be feasible to have more than one envelope/LFO instance running inside each Braids - they are only evaluated at the main RenderBlock rate (a 4kHz, I think), and thus don’t impose a huge computational cost on the CPU. Thus, separate internal envelopes/LFOs for each of the three modulation destinations (level, timbre and colour - or four if pitch is included to provide vibrato) should be possible. And even having one LFO frequency or amplitude modulating another LFO - as in your demo - but all internally. The limiting factors are a) storage space for code in the MPU and b) my ability to extend the Braids menus - my first attempt last night failed miserably - I thought I understood how they worked… I shall try again in a day or two.
I sure like the idea of a second LFO!
Wishful thinking: with all these parameters, it would be cool to be able to transmit them from one Braids to another Braids via the serial port
Have now re-purposed the sample rate setting (RATE) to be the LFO speed/envelope duration, so the internal LFO/envelope parameter can be controlled via the encoder (and stored), without requiring an external voltage into the FM input. However, in envelope/LFO modes, the external FM CV input is still added to the encoder setting for RATE, so it is still voltage-controlled. Code for this is on GitHub, in a branch, will merge with master later.
Tonight I will remove the QPSK oscillator model to free up some space to allow more tweaks - right now, the flash is completely full.
I would second a removal of the QPSK model in favor of more internal controls. So far, the controls are great and I really benefit from having the internal modulation, especially in my limited setup.
@weliveincities, yes, QPSK will be removed next. What about the marquee? Could you live without it?
OK, more progress! Now at Bees-in-Trees version 3f. I have removed the QPSK oscillator model, and added a second internal envelope/LFO, which modulates the Color parameter, if it is one of the modulation destinations selected. The rates of the two internal LFOs can be independently set via the encoder: there are now RATE (timbre/level rate) and CRAT (color rate) settings, each with a range of 0 to 127, right after WAVE. Both LFO rates are simultaneously able to be modulated by an external voltage via the FM input. Or instead of two internal LFOs, you can have two internal envelopes.
To give you an idea of what is possible, here is a quick demo of a single Braids module, with no external inputs or external sources of modulation whatsoever. None! Just one Braids, no filtering, in WMAP mode only.
Next steps will be to remove the marquee feature to make more space, and then restructure and extend the menus to allow each of the internal LFOs to use a different waveform and different modulation depth (they share these parameters at present). More work is needed on syncing the LFOs - yes, the LFOs are syncable - a pulse on the trigger input will reset their phase. At the moment, though, triggers cause an audible click when in LFO mode as the phase resets - I need to devise a means of avoiding that, if possible.
Source code for v3f is on GitHub, at the head of the master branch. I will be providing precompiled Bees-in-Trees firmware in WAV format to permit easy installation as soon as I am satisfied with the enhancements - perhaps after another week or two of hacking and testing.
Update: the audible click when a trigger causes the LFO mode to reset has been solved, at least partially. There is now a soft thump on each trigger, in some circumstances, but no longer any unpleasant clicks. If an internal or external level (amplitude) envelope is also used, then it is moot and the thump is inaudible. In some circumstances, the thump is actually desirable.
Amazing work. I’m in awe.