Found some bugs

  • the ESpeak module did not work due to an initialisation error
  • saving string values was wrong, it would keep adding doub;e quotes on every save …
  • and another ESpeak bug, whisper selection does not work

There may be a new release pretty soon … but there may be more to do …


2023.2.8.0 : Better fix for bug in input module

The input module was not working properly after rewiring the patch, this should be ok now too.

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren). For the sample rate conversion to work you’ll want to install the full version.


2023.2.7.0 : Bugfix for input module

The input module was not working properly, it should be ok now.

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren). For the sample rate conversion to work you’ll want to install the full version.


a little issue with the new module

The movingAvg was meant to be linear - it now actually is (instead of exponential). Did not alter the version number .. you might have to re-update when you did not see this message …

It has been a while I see :) - a fresh release

Today made a couple of small changes and updated the version to 2022.12.4.0

First there was an issue with rate smart modules - they would not go slow on removing all fast wires, they needed some module changes on the patch as well to do that. This is fixed now.

Then made a new moving average filter (called MovingAvg .. it is still in the wrong place on the filter1 tab .. it will be moved to the left later on …) where the averaging time can be set instead of the number of samples. The module is rate smart so it will work in both control and audio mode.

There may have been some more changes as I had some inbetween version number, but this was not documented. Ah .. the FFTW issue it was, in 2022.9.22 … still not sure if that got fixed actually … but it is not happening here …

Published as 2022.12.4.0 for all installation types.

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).


Electro-music.com September equinox concert.

Saturday September 24 will be another electro-music.com >> live << concert.

See the electro-music.com event site for more info.

I’ll be doing one hour of pure Wren stuff on that occasion, titled “Flights of Angels”.


A recording can be found at the event’s forum page.


2022.8.10.0 - fixed MIDI CC on knobs

It was brought to my attemtion that the MIDI CC assignments to knobs were no longer working. This got lost while making MIDI a bit less jittery a good while ago … anyway, it is back now, thank you Adis for mentioning this!

The other changes are :

  • Made Mono/Stereo indication on wave players.
  • Fixed MIDI TX LED.
  • Fixed convolver bug on LFO rate changes, it would complain about FFTW not being present (while it was there alright).

Published as 2022.8.10.0 for all installation types.

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).


2022.7.20.0 - A small fix for the Easing module

A small fix to make the Easing module work ok, the range settings were not working properly (in and out range exchanged and the ranges themselves were wrong - messy …).

Published as 2022.7.20.0 for all installation types.

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).


A fresh release : 2022.7.14.0

I think I got all the changes … but .. meanwhile I had been hospitalized for a day or two and quit smoking - so things are a tad hectic here lately :’) (but I seem to be able to concentrate a bit again)

The following changes I could find back in the paper trail (and made a source code release as well - but forgot to update the build numbers - oh well, too many version numbers) :

  • Fixed cursor orientation for a couple of modules - it was a horizontal line where it was supposed to be a vertical one.
  • Added better DLL presence checks.
  • Upped the FFTW max threads from 1 to 4.
  • Added envelope ranges to SimpleRange and RangeConverter modules - to make envelope time modulation easier.
  • Patch version was upped from 13 to 14 for the above change the be handled correctly.
  • The Convolver module works now, with not too much latency in the convolutions (using FFT based overlapped convolution). Reverb times of minutes are possible - or use it for special FX.
  • The OSC Sync module will now pass one float parameter - it used to pass the syhnc only. The param could be used to transfer tuning or speed to another Wren instance.
  • Changed the way the default folders work - for an existing file it will use the folder from the file name now instead of always using the preset / predefined folder.
  • Made a patch player for which a set of patches to be played and a volume curve can be specified. Patches can not be played overlapped but sequenctioa only - when overlap is need two Wren’s can be executed in parallel.
  • Fixed a bug in the spectrum module.
  • Changed the way that FFT normalization is processed and fixed all FFT based modules for this.
  • Made an Easing module - to be driven from some linear signal it can make several kinds of curves both control and audio rate.
  • Made optional automatic sample rate conversion for wave files, this requires r8bsrc.dll to be present - it is in the latest release but not in the pre-release. When the dll is not present conversion will just not work. Also made optional sample level normalization.

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren). For the sample rate conversion to work you’ll want to install the full version.

easing_01.png For the Easing module: With the pos input the the lookup position is being changed and the looked up value will be on the out ouput (possibly multiplied by a connected gain). The inv output holds 1.0 minus out and the rightmost sigin sigout link is being modulated by the out signal. Signal types are selected by the triangle buttons.

patch_player_02_small.png For the patch player: One can set a list of patches, and for each patch a volume curve is defined. Patch playing is sequential - there is no overlap. When overlap is wanted the idea is to start a second Wren instance for filling up the silent bits.

This was used with two Wrens for the ‘I read it al wrong’ performance mentioned a few posts ago.


Old Wren versions

I’ve put up all older Wren versions - all the ones that did not use an installer - at a history place.

The first Wren I could find was from 2013-11-18, the first public one seems to have been released on 2014–03-18.

Before that, at the time processors were real things and one could easily code whatever .. and write synth like code as interrupt routines .. I had done some audio effects. Some of that code still is in Wren, althought the driver mechanism is totally different these days (and the efficiency is way lower and execution speed is way higher .. ). The oldest code I’ve found was from around 1990 or so.


Announcement: electro-music.com June Solstice concert

Saturday June 25 there will be another electro-music.com >> live << concert.

See the electro-music.com event site for more info, and also see the schedule (still under construction as when I wrote this but not likely to be changed).

Deo volente … I’ll be doing one hour of pure Wren stuff on that occasion, titled “I Read It All Wrong” - and my thanks go out to Thomas for the title.


The poster has some of the patch names to be used, I’m planning to make some more this week.

“Anno Un Cement” might have been a nice title :’)

And yes - 🔥 - is a title too!


Some new stuff, pre-release 2022.6.19.0

Published as pre-release version 2022.6.19.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).


  • New SimpleRange module - it may save some cycles to use simple modules.
  • Made an analog-ish position output for the Divider module, it presents the internal count value..
  • Font for popup editors was too small for one unit modules, made the font smaller for those low modules.
  • Removed Sine and Cosine lookup tables, calculation was faster.
  • More lines of code removed.
  • Changed controls for polyphony and wire thickness to be knobs, those support keyboard control to change the value.
  • Changed format for knob hints a bit - to make things a bit less confusing.
  • Made main VU meter peak and valey indicators a lot slower, a factor of 20.
  • Wire addition or removal no longer needs a patch recompile - it will just keep playing. This works for cable undo and redo operations too.
  • Removed the F12 (patch manual recompile) action. F7 (reset) still works, and patch recompile can still be done programmatically
  • Extra mode for the Pluck module, fixed tuning for KS, Pluck, PluckControl and TunedDelay modules. Lowest possible (internal) frequency now is about 1Hz (it was about 8Hz).
  • Linear controls now additionally display a fraction of the total range in their popups.


Updated the example patches

Updated the example patches to have all my patches up to the date of this posting.

I’ll have the wiki to have the official link .. so eh .. there’d be just one place to change when the location changes - if not forgotten :’)

The latest patches require Wren version 2022.6.4.0 - see previous two or three posts.

Sources for 2022.6.4.0

Finally came to automate source releases a bit, and made a new Wren source release available (2022.6.4.0).

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).

There are some changes in the source release, the zip files no longer have a version number. The main Wren is wren_source.zip and included in that one is wren_components.zip.

You’ll first need to install the components into Delphi (version 10.2 here) before you try to open the Wren sources in Delphi.

Delphi messed up again on version numbers .. the actual values are :

prog_version      = 2022.6.4.0
prog_build        = 183
src_version       = 2022.6.4.0
src_build         = 183
comp_version      = 2022.6.4.0
comp_build        = 78
pre_rel_version   = 2022.6.4.0
installer_version = 2022.5.22.0
patch_version     = 13
pa_version        = 19.0.2
lpc_version       = 2015.1.18
forth_version     = 2017.11.19
looks_version     = 2020.7.18
formants_version  = 2021.4.6
modal_version     = 2018.5.18
markov_version    = 2016.9.9
mazes_version     = 2020.1.23
wrengine_version  = 2018.5.25

Bugfix for compressor gain revisited

Published as pre-release and release version 2022.6.4.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).

As mentioned in the previous post, there was a bug in the compressor gain setting. The fix for that bug caused older patches to to be left with a way too low gain setting.

This release fixes old patches on load, so that approximately the same gain as was intended will be set. When patches were already manually fixed it will leave them alone.

The module version was changed from 2 to 3, and when a patch with module version 1 or 2 is loaded it will see if a fix is needed.

And as a compressor gain setting of -6dB or lower does not seem to make much sense (at least not for my own patches) it will only then apply a fix to set the gain to approximately what it was intended to be in the old situation. When the patch is being saved it’s module version for the compressor will always be set to 3.

This heuristic will fail when the gain was lower than -6dB intentionally - and a manual fix will still be needed then.

It will also not repair the gain setting for the spectrum module (the only other module using a 64dB gain control), but that is a thing needing constant manual tweaking anyway.

Also the help for the PluckControl module was updated.

Oh - and removed some monsense from the Pluck module and gave it al-pass feedback filtering - it still needs some work on the brightness and on tuning.


Some more changes, a new module and a redo of an old one

Published as pre-release and release version 2022.6.2.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).


  • Redid the Pluck module, got out the inversion stuff but gave it an extra string with detuning and cross coupling - I think it to sound more interesting.
  • Made a PluckControl module - I see that the help for it is nonsense still - but it is meant to create a pluck signal for the Pluck and KS modules..
  • Fixed the tuned delay module - it’s delay times were wrong.
  • Fixed the PhaseDetector module - it never worked since Wren got polyphonic.
  • Another 2000 lines or so of code were removed.
  • Totally redid signal propagation, the way how signals are transferred over wires. It made Wren faster by another five to ten percent.
  • Fixed a bug in the compressor module - unfortunately old patches will have wrong compressor gain now and need to be reviewed (they'’l be pretty soft now).
  • Sped up the handling of the lights a bit more, there was some unneeded searching still for screen elements.


There were a lot of changes made to the code and I tested a lot but not everything - there may be surprises .. and when I notice I’ll fix things.

A recording of the pluck stuff - and some more sounds.

It starts with some Karplus-Strong sounds only; a drum like sound and a more typical KS one. At about one minute percussive noise is added, at about two minutes some grain processing is turned on and at around three the PADSynth module is activated.

It is a three voice self playing patch running at 48kHz with a control decimation of 32 needing about 30% of ome core here.

Some details (including a short help for the pluck controller and also about the patch) are behind the read more link.

[Read more…]


And now as a full release 2022.5.30.0 too

Published as release version 2022.5.30.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).

The source code releases were not updated yet.

Some fixes and stuff

Published as pre-release version 2022.5.30.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).

  • There was a bug in the XY Scope module causing occasional audio artifacts - fixed that.
  • When the mouse is over a knob pressing the zero key will cause the control to move to it’s default position.
  • Added range selection to the OscPerc mdule - much longer decay times can now be set (it was limited to 12s).
  • Fixed a bug in the LFO global rate setting. LFO’s were running way too slow - fixed this, but it will affect all patches whch used a global rate setting other than 1.
  • Fixed a tiny table lookup error - lookup of the value at the very end would behave a little odd. Also made the tables two bytes smaller to have an actual size of a power of two. And then removed a couple of tables that were never used..
  • Revisited the grain control modules, the RndGranulator was not working at all and the GrainDelay module was a mess. Made the RndGranulator work and added smoothness control for the random values. Totally redid the GrainDelay mdule.
  • Removed about 2000 lines of unused code - not that this affects anything though.
  • Made Wren run marginally faster by inlining some more code, a couple of procents or so.

The GrainDelay module works differently now, it was redocumented in the module help.

The RndGranulator did not produce any sound at all, this was fixed with the functionality only being changed by addeding smoothness control for the randomization. When smoothness is set to full all randomness will be frozen.

The other two grainy modules were behaving like intended (Granulator and SimpleGranulator).

The global rate setting was applied twice, meaning that when it was set to 0.5 the modules would display half the normal value (which is ok) while they would run at one quarter of their nominal speed instead of one half.


Installer bug

There was a bug in the installer where it would not properly use a user selected installation folder (but would use the pre-programmed default folder instead).

I’ve updated the installer for this to 2022.5.22.0 and also repackaged the full Wren and the pre-release installations (as those contain the installer program as well, no version updates there).

I hope the issue to be fixed with this.

Sped Wren up a bit, and some small things

Published as pre-release version 2022.5.22.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).


  • I Think patch execution was sped up by about 25% trough various code changes and eliminations - debugging got somewhat harder by this … and the changes did unmask some bugs :’)
  • The lights and wire status can be saved into the ini file now - these options are off by default but can be turned on from the settings screen (F3).
  • And so .. wires, lights and sound can now be turned on by clicking the action item - when actively shown (for in case the Ctrl+W, Ctrl+L or Ctrl+D shortcuts were forgotten).
  • Added an ‘all’ mode to the XY scope module, it will listen to the sum of all voices when active.
  • Added automatic gain control to the XY Scope module.
  • Added a correlation indicator to the XY Scope module.

With the changes on the XY Scope it can now function as a gonio meter module. When put in vector mode the vertical line shows the left / right (or X / Y) similarity while the horizontal line shows the difference, the bottom bar quantizes the left / right correlation; -1 indicates anti-phase, 0 indicates non-similarity and +1 stands for equalness.

It is interresting to see how the Mambi module is displayed on this, ambiophonics works by adding R inverted and delayed to L and likewise for L and R - the XY vector plot will widen from this and be less high, while the gonio indicator will show more anti phase.

Regarding the lights and wires … with this, when lights or wires were turned off when Wren was quit, they will also be off on the next Wren start - the action items will show this. (also - when wires are off at startup, the startup is faster - soo .. that will need some more changes later on).

And .. the Wiki says this .. but to restate: Ctrl+L will toggle lights on/off, Ctrl+W will toggle wire visibility on/off and Ctrl+D toggles sound on/off. Status for these is shown in the top pane.


Fresh pre-release

Published as pre-release version 2022.5.14.0

This can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).

  • Made a Mambi module for ambiophonics output.
  • The XYScope module got a correlation display, see it’s internal help for more info.
  • Another fix on the ProbGraph module, the left- and right-most points were not always properly glued. .
  • Made Wren startup a little bit faster.
  • Made Wren shutdown a lot faster.
  • Improved and streamlined some non-audio timing code.


The removal of the ambiophonics plugin from the electro-music.com store made me see the old ambiophonics thread again and decided to implement that one for Wren. The module blurb says:

Mosc’s ambiophonics module, or Mambi.

See https://electro-music.com/form/topic-27871.html for Mosc’s original idea.

The delay maxes at about 320 us, the default delay setting of 0.25 makes the delay ab out 80us which is what the original uses.

The width parameter can be modulated, the modulation input is 1.0 when unconnected and it will be multiplied with the knob set value once connected.

As the module is strictly monophonic, the width modulation only works on the first voice. The inputs are summed though over all voices and the ouputs are distributed over all voices.

Tried to make some center filling code for it - but I was not convinced and left it out in the end.


RIP Klaus Schulze

Klaus Schulze’s music was one of the reasons, decades ago, for me wanting to do things with synthesizers - may he float on eternal waves; I’m glad he pressed record so often!

Here is a little patch I did after re-listening some of his work. It also demonstrates the use of the latest two new modules and the analog trigger mode of the envelopes - as I happened to be working on those things when the news reached me.

download the patch - it needs Wren version 2022-.5.2.0 or later (see previous post).


A new release

Published as pre-release version 2022.5.2.0
Published as release version 2022.5.2.0
Source code published as 2022.5.2

All can be installed from a recent Wren version - or alternatively download the installer (see the wiki for more info on updating or installing Wren).

  • There were two new module types added, a keyboard (Keyboard - it is on the Utility tab) and a new random generator (ProbGraph - it is on the Ctrl2 tab)..
  • Also I’ve removed clicks from the analog trigger mode for various envelope modules (being described in the previous post).
  • And then a bug in the spline lookup for the DataGraph module got fixed - not all point changes were resulting in changed behaviour.


The keyboard module:

The module is mouse controlled. To get a note click on it, to freeze a note (or latch it) control click on it.

The mouse over highlight is just for orientation and does not affect the sound.

Whenever a note starts the trig output will go active, and it will stay active for as long as the note is active.

When multiple notes are active they are assigned to successive voices.

On every incomoing arp pulse the note pattern will shift right for all voices, or left when the dir input is less than 0.5. This will make the module behave like an arpeggiator (with each voice being shifted as in a canon).

The mix input is just added to the output value, it can be used for shifting the pitches.


The probablity graph:

With the graph tool a cumulative random distribution function (crf) can be set up - with a little twist.

The distribution is being used by an internal uniform random generator (all values of 0.0 to 1.0 being equally probable), the looked up value will then have the distribution as laid out by the graph. This gives graphical control over how likely output values will be.

On every trig (sync) input pulse a new value will be output and when the value changed a trigger out puslse is being generated as well.

For the graph the leftmost point is fixed at the bottom left corner and the rightmost point hangs in the top right corner - external scalling can always be applied with a mixer or amplifier module.

The twist is that the X and Y axis are being swapped from what woud be expected for a crf, so the uniform random is distributed along the X axis and the Y axis represents the output values.

Output polarity can be set with the selector button ([-1,1], [-1,0] or [0,1] and the inversions thereof), the shape of the graph can be linear, splines, steps or dots. For conveniance the grid marks can be set to several values.


A couple of changes

Published as pre-release version 2022.4.15.0

The big change is that the handling of the patch lights got optimised, there is a lot less searching now - it seems to work fine :)

Then I’ve implemented ‘analog trigger’ for the EnvARRetrig, EnvARMod, EnvAHD and EnvADSR modules. There are a couple of modes where the D (digital, and default) mode implements the old time behaviour. Then there are some analog modes where the trigger input behaves different than in digital mode.

In the analog modes the trig input is quantised to 2, 3, 4, 5, 6 or ‘infinite’ (mode A) levels, and when a change in the quantised value was seen a trigger action will be initiated. Also the value of the change in in the trigger value will be sampled and that is used to control the envelope’s amplitude.

This is nice with a sequence for instance, where an analog sequencer output can now trigger an envelope, and as it also controls the amplitude - interesting patterns can be made easily this way.

If you have a recent Wren and Installer you can istall this from Wren itself. Otherwise see the wiki for more info on updating Wren.


Fresh pre-release

Published as pre-release version 2022.4.2.0

This implements the polyphony changes mentioned in the previous post.

If you have a recent Wren and Installer you can istall this from Wren itself. Otherwise see the wiki


Polyphy workings changed a bit


I’ve changed the way polyphony works a bit. Both in how it works internally and in how things are displayed.

Modules can still be set to mono mode or poly mode, as in previous versions. But it also possible now to run modules with reduced polyphony - with less voices than the patch has. This can be selected from the module popup context menu.

The hatched display of mono or monofied modules is gone now. Instead the module title will be changed to indicate the mode.

[Read more…]


looks like …

the layout got messed a bit … no idea yet as to why … tomorrow … was messing a bit with captchas … hmmm …

edit: ah .. favicon issues … ok .. tomorrow .. just turned it off for now.

edit2 : ok - fixed


And then …

when you thought to be ready with everything you were discovered to have an easily automated captcha .. I’ve changed it a bit - may it help!


Wiki switch

I was not so happy with the previous wiki. It was slowish on my ‘almost web server’ thingie (a NAS). so I’ve decided to try another one.

Also I’ve moved over the FAQ information from the main Wren site to the new wiki; the old one will be replaced by a redirection soon. I’m searching around still for old links, but … after a year … this blog turned 1 today … this finally cleaned things up quite a bit!

For now the oolde one is still here..

Anyway, this new one has less (but adequate) features, and it performs okay to me .. so happy days :’)


Updated the installer a bit

Published as installer version and Wren version 2022.03.28.0

You’ll have to re-install the installer for this to work but then:

  • Wren will now have direct support for updating itself, the source code or the PortAudio sources.
  • The installer can install itself.
  • When wren.exe was renamed installs originating from the renamed version will update the renamed version now.

To get the update. see the download page for instructions.

Note: the installer executable is an unsigned application downloaded from the internet, Windows will complain about that - it can still be executed though by clicking on ‘more info’ in the complaints screen.


New full version released

Published as 2022.03.25.0

This version uses an installer that you should download to get the update. see the download page for instructions.


And a fix .. for an ommision in the one before

Published as pre-release. 2022.3.21.0]

Stand-alone (non patch) knobs were not handled properly.


Changed popups

Published as pre-release. 2022.3.20.0]

I’ve changed the way pupups on screen items are handled.

It started with adding popups on destination connectors for when you draw out a cable, in order to better see where a cable will end up at. This however created the issue that popups were not properly removed.

So, I’ve altered popup removal on all components a bit - they now just temove all popups agressively. This may change popup behaviour in windows emulation on Linux or Mac - but I did not test that.


New globals module

Published as pre-release. 2022.3.5.0]


Made a new Globals module, for now it will just output the globally set LFO relative rate (r.rate in the user interface) to make it available for modules that do not listen to that global setting (i.e. non-lfo type modules).


Bug fix Vocoder module

Published as pre-release. 2022.2.12.1]

The Vocoder had a bug where changing the bin size could freeze the rest of the synth, fixed in this pre-release.

One more small change

Published as pre-release. 2022.2.12.0]

Changed the way the filter works in that when a filter is being defined it will only select lines that match the filter. In case of the chat log I use that means that it will now skip the joined and left lines and such.

It may still return error messages, as “file not found” or “directory not found”.

BTW the output is not shown in the modules, it show sthe file and filter instead, but the debug screen (F5) will show what was produced. For each module duplicates will be filtered out, so make sure that the last file line changes to see an effect there.

Things did become a bit slower of this, as the regular expression is tried now on every non empty file line, hope it is still fast enough fir rapid chat - so may have to revert, we’ll see,

Edit: Ok, had to change that a tad bit more, it was getting too slow. Now when the filter exists but does not match on the last line an empty line will be returned instead of the unfiltered last line. Maybe that is even nicer for my purpose, as it can introduce quiteness in the patch in that case.

When there is no filter still the last non empty line will be returned, maybe should make a fallback or default rule group for filters or something.

This has the same release number.


Some more words

Published as pre-release. 2022.2.11.0]

Added more words to the solresol bit of the morse module, there were like 2000 or so and 8384 there are now - some tens of it are still French ;«)


New module

Published as pre-release. 2022.2.10.2]


Made a new simple module, it detects the last line of a file being changed. It will make a short output pulse when such a change was detected.

The syntax to be used is :



  file:fillename regular-expression

The regular expression being the filter, and the file name can not have spaces in it.

The last non-empty line of the file will be read (or an error message will be returned) and that line will be filtered with the optional regular expression.

When the regular expression contains a group named ‘result’ that will be the matched bit from that last line.


    file:X:\filedir\filename.log (?:msg\s\[)(?<result>.*?)(?:\]\shost)

    pointing to some file on drive X: with a specified filter which has a group named
    'result' (and two other un-named groups of stuff we are not interested in).

    the last non empty line of the specified file could be (this is from a log of an IRC
    chat session, a private message from jan to IRC channel #electro):

      '2022-02-09 01:30:23.784 | priv : [jan -> #electro] msg [pwew .. filter is hard o_o] host [~jan@xxx-xx-xxx-xxx.yyy.zzz.nl]'

    The regular expression   matches:  'msg [pwew .. filter is hard o_o] host'.
    The named group 'result' matches:  'pwew .. filter is hard o_o'
    and that in this case is the bit we want.

Some help file issues fixed

Published as pre-release. 2022.2.10.1]

The generated help file (which is the same as the one on this site) had some markup issues messing up the file reading examples, making those wrong and with bold face text and such - fixed those issues.

Some fixes and changes

Published as pre-release. 2022.2.10.0]

Made the SapiVoice module working again, it had a problem with speaking empty strings, had a memory leak, would not speak no more on text changes and it was way too fast - all addressed.

Changed the Morse moduel to speak an ‘F’ on non letters, non space or non ‘*’ it was a bit odd stopping to work on single interpunction characters .. like ‘.’ etc.

I’m ready for a chat driven performance. just a little more patching :)


Various changes to text based modules.

Published as pre-release. 2022.2.9.0]

I wanted Wren to be able to react to what goes on in the electro-music.com chat, and as I already run an IRC bot which can produce a log file I’ve decided on making some modules able to read the last line of that log. This involves the following modules:

  • Morse
  • eSpeakVoice
  • TSS
  • Song
  • SapiVoice

These all have an input field for text to process, what I did was to allow for special text that will be interpreted and it may read from a file now.

When you use ‘file:filespecs’ the filespecs will be split in two parts, the first being the filename to use and the second (optional) part makes a filter. It will be the last non-empty line from that file whih is read and when the filter is present it will process that line and that will be the text to be used by the modules.

The syntax to be used is :



  file:fillename regular-expression

The regular expression being the filter, and the file name can not have spaces in it.

The last non-empty line of the file will be read (or an error message will be returned) and that line will be filtered with the optional regular expression.

When the regular expression contains a group named ‘result’ that will be the matched bit from that last line.


    file:X:\filedir\filename.log (?:msg\s\[)(?<result>.*?)(?:\]\shost)

    pointing to some file on drive X: with a specified filter which has a group named
    'result' (and two other un-named groups of stuff we are not interested in).

    the last non empty line of the specified file could be (this is from a log of an IRC
    chat session, a private message from jan to IRC channel #electro):

      '2022-02-09 01:30:23.784 | priv : [jan -> #electro] msg [pwew .. filter is hard o_o] host [~jan@xxx-xx-xxx-xxx.yyy.zzz.nl]'

    The regular expression   matches:  'msg [pwew .. filter is hard o_o] host'.
    The named group 'result' matches:  'pwew .. filter is hard o_o'
    and that in this case is the bit we want.

Then, in addition I’ve made the TSS module work by default by setting it’s speed parameter to be 1.0 initially (it was zero, and with that the module will not actually run).

Also I’ve added simple SolReSol support to the Morse module, it has no knowledge of grammar and it has a limited set of words - the output is available as the blue output of the Morse module and is meant to be processed by a ScaleQuantizer (being set to a Major sccale for a strict implementation, but other scales with seven notes are usable too (less than seven notes would strip out some of the output values)).

A note about SapiVoice - it does not seem to work ok in the 64 bit Wren version.


Changes to DataGraph and ClockGen2 modules


Published as pre-release. 2022.2.6.0]

A couple more changes on the DataGraph and ClockGen2 module, such that they work better for me.

I’ve relabeld a couple of signals; sync is now quantise as that is what it actually does; the rate is now labeled as bars / m (bars per minute) and the div rate is now accents.

here is a new bars control added for the ClockGen2 module - this is the number of divisions to be used in the DataGraph and this can be automated by pulling a wire from ClockGen2’s new bars out to the new horizontal divisions input of the DataGraph (left of the 16 in the image).

For the DataGraph moduele the way divisons work changed a bit - it is now possible to have uneven divisions (existing patches may want to double their division settings, this also applies to the AudoGraph module). No middle indication will be drawn whe nthe number of divisions is odd.

The image shows how to work with this, both time and pitch are quantised this way without the need for precicise dot placement in the DataGraph.

Made an example patch for this, it is to be seen seen, heard and downloaded from below (possibly after clicking ‘Read more…’).

[Read more…]


changed S&H etc. for NOT_CONNECTED and changed the ScaleQuantizer, oh! and the Reverb too!

Made the SampleAndHold (S&H), TrackAndHold (T&H) and MultiSAndH (multiple S&H) modules aware of the NOT_CONNECTED signal. When seeing that signal on the trig input or having that input unconnected the modules will be transparent now.

The Noop module is the only module that will directly output a NOT_CONNECTED signal, but it can be passed on trough switches for instance.

These sample modules can now be made to have the trig input disconnected under patch control, and they will be transparent then.

Published as pre-release. 2022.2.5.0]


That, and the ScaleQuantizer got a new transparent mode - an input to set it transparent with, and also transparancy trough scale modulation with a negative input (and unequal to NOT_CONNECTED). In these cases the out signal is calculated from the in, scale and range parameters but it is not quantized. The inverted outs both hold 1.0 - out then.

This is scaled transparency, the module can still be set into the old unscaled transparency mode by deselecting all notes. in that case all three ouputs will just see the input value passed on.

Then I changed the LFO module a bit to make new random values on recompile and reset (using F7 / F12) - which is handier when patching for trying stuff with repeated F7/F12 pressing to see where the patch will go (and it does not break anything :¬)).


I had also changed the reverb module, gave it the input level control it always was in need of. And that trivial change had a bug, so re-updated the pre-release .. and as no bot had yet seen this yet .. presumably … I have no logs .. did not update the pre-release number .. so you may have to reload :¬)

A new module, some changes on an old one and some and remarks


Published as pre-release. 2022.2.4.0]

The Noop module was changed to output a special value when it’s input is not connected. This is the NOT_CONNECTED special value, some modules do special things when seeing that as their input value (normally meaning that that input is unconnected). I’ve documented all current inputs dealing with that special value, it is in the new modue help.

This makes it possible to pass the NOT_CONNECTED value trough swithes to make non-connectivity programmable. The noop module is the only one able to source this value, but it will be passed on trough other modules when they do not alter the signal (like switches).

It is wise BTW to not use this as a general signal, as the actual value as seen by unaware inputs is very large and this may hurt eardrums :¬)


Then .. made a new module .. it is not finished yet, but am using it in patches already .. so .. better to mention it, as it will show up in new builds. It is a clock generator, and made it because the updated DataGraph module could use it. I’m still struggling with measures and beats and whatnots (music is hard!). It will change I guess, but the basic idea is simple.

[Read more…]


And another updte on the DataGraph


Published as pre-release. 2022.2.2.0]

It became 30 pixels higher to make some room for extra control.

Added random control, with a button and three inputs (one for changing all values, one for changing 25% of the values and one for changing one value - a bit like what the seq16 module has). The horizontal positions are not changed on randomization. (though with a right click on the grid from the popup menu there is anoter form of random selectable).

Also available now are rev for playing backwards and inv for playing inverted (upside down) (although both could be done as well from a controlling saw lfo). Oh, and maybe it is good to say that the module is meant to be driven from a saw LFO, for normal linear time operation.

Then added grid control for the number of division lines in the graph display. This may make it easier to set the dots properly.

I’ll need one final change, the sync input uses high logic now and should use normal logic, that is for a later pre-release.


Changes to the DataGraph module


Published as pre-release. 2022.2.1.0]

Note: image shows the latest version of the module, click on read more below to see the old version.

Changed the graph colors a bit to make the new dots mode better visible. The dots mode basically is the same as the steps mode except there are no lines drawn between the dots. Then I made the lines (and dots) mode actually work - which they did not.

Also a chg (changed) output was added and a sync input.

[Read more…]


And a bit more change to EnvReso


Published as pre-release. 2022.1.30.0]

Added the filter’s band pass to a BP output and changed the inv output into a high pass (HP). The basic functinality stayed the same but when you need 1.0 - LP as the previous inv out did you’ll have to add an external module now … ran out of pixels :¬)

Anyway, I guess it is finished now.


About mono and poly

Most modules are poly .. hover the mouse over it’s top left title area and it will show.

Additionally, when poly is set > 1 mono modules will be straight hatched. Then modules can be set into mono mode explicitly as well and they will show a cross hatch. This is a mode which has to be turned on in the F3 screen “show mono modules”.

Also when you right click on the module and select help it will show mono, poly or monofied.

Then for an overview of all modules, press F1 - or go to the module overview.

To get actual poly behaviour you will need modules that will act differently depending on the voice. Most modules will act the same on each voice, but some will have different signals for each voice - like the PoyMidiNoteIn, or almost everything that generates random will be different on each voice as well.

Of course modules that act the same in each voice will listen to voice specific input signals (and then may actually differ).

Then there are some modules that are mixed mono/poly - for instance the reverbs, where the reverb itself is mono but where some modulations can be poly - this is why mono modules can still be monofied. This sometimes is explained in the F1 help / module overview, but I’m a bit lazy in keeping the help accurate …

Some small changes to EnvReso

Published as pre-release. 2022.1.29.0]

I’ve made the trig input behave a little different. When left unconnected the module now doubles as a very low frequency filter. The input in that case is taken from the gain input. For the rest the module behaves the same as before.

When trig is unconnected and a regular envelope is connected to the gain input resonance can be added to that regular envelope signal.

And now I may want to add the filter’s bandpass and higpass signals as well for an output - but running out of pixels a bit :)

Then I updated the module help to show all functionality.

Added stretch to the EnvReso module


Published as pre-release. 2022.1.28.0]

Added pulse stretching to the EnvReso module, it is no longer needed to use external stretching. The stretch time scales with the selected range (fast, medium, slow and vfast) and uses the regular envelope times.