DanT :: NuMetal - Beta [v2.0.9] Kalkatron & PolySplice

Hi everyone!

Over the past two years I have been working on my plugin DanTModules, and I feel like I have reached a point where I want to explore new ideas without the baggage that plugin implies.

Whilst the modules in that plugin are robust (only found & fixed two bugs so far) and provide things not found in other plugins (I hope, its difficult to tell how popular the modules are), its development has taught me a lot, and I want to leverage that knowledge into higher quality output. This will be easier to achieve when not constrained by decisions I made previously (mostly technical implementations that seemed beneficial at the time by reducing the amount of code I had to write).

With that in mind I decided to start prototyping modules in a new plugin. My goal with these new modules is to work on ideas I have and polish them up to a high standard, potentially leading to a paid plugin release in the future (still deciding on this part, obviously getting paid for my work is nice, but I don’t know if I have the spare time to dedicate to supporting a commercial plugin, I am posting this during my lunch break for example).

So I’d like to get some feedback on these prototypes as I work on them, I will post releases here in this thread, please give them a try and report any bugs for me :beetle:

I am also interested in functionality and usability feedback, such as;

  • is the module obvious / is the layout intuitive
  • does it provide something useful
  • does it fit your workflow
  • does it have additional creative uses
  • how would you improve it

I am not really looking for design or visual feedback, these will be prototypes with minimal panel designs and documentation, fancy panels and good documentation would hopefully be a benefit of a paid plugin.

I would also love to hear from anyone that has used my current modules and has ideas for how they might be improved (yes I know better antialiasing is always going to be a thing), or features that might be missing or complimentary.

I will post the first beta release shortly…

Edit: find all the beta downloads here: Releases · Miff-Real/DanTModules-Manual · GitHub

4 Likes

The first beta build is posted here Release DanT :: NuMetal - v2.0.2 Beta · Miff-Real/DanTModules-Manual · GitHub

In this build there is one prototype module called PolySplice

This is a new polyphonic version of my previous module 5Splice, that is a switch with slew of up to 5 seconds.

The module from top left to bottom right consists of:

  • Signals input, polyphonic up to 16 channels
  • Input attenuvertor
  • Trigger input, each trigger cause the switch to select a new channel, it uses a SchmittTrigger to detect anything > 0 volts
  • Trigger indicator light
  • Slew CV input
  • Slew CV attenvertor
  • Slew parameter, 0 to 5,000 milliseconds
  • Advance Mode CV input
  • Advance Mode attenuvertor
  • Advance Mode parameter: the modes are:
    • Forward Mode
    • Forwards by 2 Mode
    • Backwards Mode
    • Backwards by 2 Mode
    • Ping-Pong Mode
    • Random Mode
  • Advance Mode indicator lights
  • Selected Channel indicator lights, the number of input channels will be light in a faint yellow, the currently selected channel will be lit green, channels with no input will be unlit
  • Polyphonic Output Mode switch, the modes are:
    • Off, just one channel is output
    • Inputs Incremental, the number of outputs will match the number of inputs, output channel 0 will be the selected input channel, each following output channel will be one channel higher
    • All Normalled, the selected input channel will be duplicated to all 16 output channels
  • Selection Value output, this will output a voltage based on the selected channel where channel 0 outputs 0.5 volts, channel 1 outputs 1.0 volts, channel 2 outputs 1.5 volts etc up to channel 16 that outputs 8.0 volts
  • Output attenuvertor
  • Main Output

Here is a little example patch you might use to kick things off: v202DanTNuMetalBeta-PolySplice-Example.vcv (2.3 KB) (Be careful when switching the polyphonic mode in this patch, 16 channels of audio from Plaits can get loud!)

2 Likes

Some observations from using DanTNuMetal-2.0.2-042e494-mac.vcvplugin in VCV Rack Pro 2.1.2 on a macOS Monterey (12.4).

  1. The plugin installed fine, showed up in the module browser without a problem.
  2. Don’t know if this is deliberate as it’s still a beta, but there’s no description of the module in the plugin.json file, so no description shows in the tooltip for the module in the module browser.
  3. The panel feels very “mystery meat”. You have included tooltips describing all the controls, ports and lights, but there’s no labels / descriptions on the panel? Maybe having at least some labels on the panel might make it easier to grok what’s going on? Or making the panel wider so labels will fit? Ignore this if you’re still working on the panel UI.
  4. I would prefer a button to move between the different Advance Modes.
  5. Maybe make the “fade” time of the Advance Mode indicator lights faster? And make the lights bigger? They’re teeny weeny! :slight_smile:
  6. Maybe replace the Advance Mode indicator lights with a text display to make it clearer which mode you’re in? Instead of “hover over light 2 to see the tooltip to show which mode you’re in”, it’s just in a text box to read?
  7. Advance Mode CV input and attenuation works, though do you need the attenuation to be +/- 2? Would just +/-1 be OK for that? Note that the tooltip for the Advance Mode CV attenuator knob hovers over the right side mode indicator lights, hiding them from view when moving that knob.
  8. I couldn’t get Slew CV Input to affect the slew time at all.

I did find what I think is a bug. It seems a slew to the next signal in the chain can be triggered without a trigger being sent to the Trigger input port.

How to replicate this using this set up:

  • In Signals Attenuvertor: 1
  • Polyphonic Output Mode: Off
  • Slew CV Attenuverter: 1
  • Slew: 0 milliseconds
  • Advance Mode CV Attenuverter: 2
  • Advance Mode: 0
  • Output Attenuverter: 1
  • I had a 4 polyphonic signal connected to the input.
  1. Send a trigger. You’ll be “slewed” to the next signal as expected.
  2. Manually change the Slew knob to a longer time. The module will “slew” to the next signal. Not what I expected as I didn’t send a trigger?

Here’s the test patch I used: polysplice.vcv (1.6 KB)

Thanks!

Hi, thanks for the feedback!

tl;dr New beta version with some bug fixes Release DanT :: NuMetal - v2.0.3 Beta · Miff-Real/DanTModules-Manual · GitHub

Yes, as I mentioned in the initial post, these are prototype modules, so it is minimum viable product development to enable testing. Once the module design is stable, then I might start adding the additional features. Having said that, I have added more information to the plugin.json file.

Indeed, for prototypes I am drawing the panel programmatically so that I do not need to spend time working on SVGs whilst the module is still in design flux. The layout is subject to change during this design phase, so changing the SVG every time would just slow me down, especially if the width of the module changes.

Any specific reason? A knob allows the user to right-click and input the desired advance mode directly, a button would need a custom implementation and would require multiple clicks to get to a specific mode.

Also, a button would naturally imply a trigger CV input rather than a continuous signal, similarly meaning that you have to switch through all the modes to get to the target mode, rather than simply jumping directly to the target mode.

Why do you suggest this? I see that if you modulate the advance mode at high/audio rates then it is hard to understand which mode is currently active, however to me there doesn’t seem to be a reason that you would want to modulate this mode at high rates?

These are just the stock VCV lights, they look the same as lights on all the VCV modules don’t they? Obviously once I start adding the panels I will consider custom graphics for all the module controls, but for prototyping I’ll stick with these.

Typically I set my CV inputs so that 10 volts is equal to the maximum parameter value. This means that if you use a unipolar LFO you can modulate the parameter through its full range. This also means that if you were to use a bipolar LFO from -5 volts to +5 volts on a bipolar parameter, using the attenuvertor you can also scale this up to match the full parameter range as well.

Whoops, this is a bug, I actually forgot to scale the CV inputs to match the parameter ranges, should be fixed in the new build.

This wasn’t intended either, the bug was that I wasn’t explicitly turning off the slew once it reached the target value, so manually changing the slew to a longer value caused the slew to resume from where it was left. This should also be fixed in the new build.

2 Likes

To be clear, I don’t mean replace the knob to select the Advance Mode, but including a button as well would be faster sometimes, I think? Maybe working how synthesis mode select buttons on the Audible Instruments Macro Oscillator 2 (aka Plaits) work?

Another idea is to keep the knob but have a button under each light to quickly select that mode directly? Something like in the mock up image below?

Please ignore this one. After playing with the module for a while, this is fine as it is. :slight_smile:

Thinking about this, I can just zoom in to the display. Please ignore this one as well. Apols.

Yes, the slew CV and the trigger bug are fixed for me in v2.0.3. Thanks!

Edit: Forgot to say. This is a great idea for a module. I can see this being useful for all sorts of things, like:

  • Slowing moving between different sources of note sequences.
  • Complex modulation envelopes for physical modelling.
  • A kind of super advanced Bernoulli Gate.

Using a drop down menu, while not very “modular like” is extremely effective for this. And of course no need for knobs, buttons, lights.

2 Likes

Small update to v2.0.4 adds a reset input to PolySplice

Reseters.vcv (8.1 KB)

Nearly finished a new module for this beta plugin, should be able to post new builds soon

3 Likes

Hi all, Friday lunchtime for me means new release announcement (finally, after months of being distracted), woot!

Here is a new build for the plugin (it does include both mac builds, but I have personally only tested windows):

This 2.0.6 version adds an experimental new module called Kalkatron

This module might look a little bit crazy or intimidating, but its really quite a simple idea.

When I was doing some generative patching, I often found I wanted to count something, like gates from a sequencer for example, so that I could automatically change something in the composition during playback.

There are ways to do this of course, but I figured I’d like to just have a dedicated module that does exactly what I want. (This is typically how all my modules start).

So the core concept of this module is: count when something happens, have a signal that allows me to act on that count.

This then grew, because if you can count (ie add), then why not subtract? And if you can add and subtract, then why not multiply and divide? And if we are outputting a signal, then you should have some control over that signal…

Although the core concept is simple, i’ve found that the module is actually quite versatile now that I have implemented everything. You can use it as a sequencer, a mixer, a generative source, a quantizer, an arp… and i’m sure you will come up with more ways.

  • A: Input section - This is where the signal is tracked or generated. There is a signal input with attenuvertor & offset param, and there is a signal sample trigger input and button. When signal sample is triggered, the value at the input will be added to the offset and displayed in the xInput box. Since the value inputs have an offset, you can set this offset to a specific value and leave the input disconnected if you want a static value.

  • B: Maths section - This is where the maths operations can be performed. You can add, subtract, multiply or divide the input signal by a specific value. Each operation has its own controls and they all work in the same way. There is an operation trigger input and button. A value input with attenuvertor and offset. And a sample value trigger input and button. When sample value is triggered, the value at the input will be added to the offset and displayed in the operation box at the bottom. When the operation is triggered, the value in the operation box will be used to perform the operation upon the current xInput value. Note that divide by 0 is a no-op.

  • C: Calculation section - This is where the current calculation result = Equals is displayed. Note that this display is affected by the output mode, output slew, output attenuvertor and output clip.

  • D: Mode & Output section - This is where you control the module output. The lights indicate the currently selected output mode. There is an output mode selector knob, and input with attenvertor. The main module output is bottom right, and it has an attenuvertor and Clip output switch. When clip is active the output will be limited between -10.0 and 10.0. There are 6 output modes:

    • Floating Point - The standard calculation result
    • Rounded .1 - The calculation will be rounded to the nearest .1
    • Rounded .2 - The calculation will be rounded to the nearest .2
    • Rounded .5 - The calculation will be rounded to the nearest .5
    • Integer - The calculation will be rounded to the nearest whole number
    • Quantized - The calculation will be quantized to the nearest note frequency and a note display will be shown next to the Calculation box
  • E: Slew section - This allows you to slew between the previous calculation result and the current calculation result. There is a slew length knob, with an input and attenuvertor. The slew length is in milliseconds, and has a light to show when its actively slewing the output.

  • F: Auto-reset & Bounds section - This area allows you to set an upper and lower bound for the output signal. When the calculation result is out of bounds there are gates output and you can also automatically reset the module. The switch activates auto-reset. The top row is for the upper bound and the bottom row is for the lower bound. The gate outputs for out of bounds signals are to the right. The other controls are the same as the operations, a value input with attenuvertor and offset, and a sample trigger and button.

  • G: Reset section - This is simply a trigger input and button to reset the module, however, the reset behaviour can be customised:

  • Initialize Parameters - On a reset, all the parameters will be set to their default values, the same as if you select Initialize from the context menu
  • Zero Signal Value - On a reset, the xInput value will be set to 0
  • Zero Plus Value - On a reset, the + Plus value will be set to 0
  • Zero Subtract Value - On a reset, the - Subtract value will be set to 0
  • Zero Multiply Value - On a reset, the × Multiply value will be set to 0
  • Zero Divide Value - On a reset, the ÷ Divide value will be set to 0
  • Zero Calculation - On a reset, the = Equals calculation result will be set to 0
  • Reset Upper-bound - On a reset, the upper bound value will be set to the default of 10
  • Reset Lower-bound - On a reset, the lower bound value will be set to the default of -10
  • Sample Signal Value - On a reset, the xInput value sample will be triggered
  • Sample Plus Value - On a reset, the + Plus value sample will be triggered
  • Sample Subtract Value - On a reset, the - Subtract value sample will be triggered
  • Sample Multiply Value - On a reset, the × Multiply value sample will be triggered
  • Sample Divide Value - On a reset, the ÷ Divide value sample will be triggered
  • Sample Upper-bound - On a reset, the upper bound value sample will be triggered
  • Sample Lower-bound - On a reset, the lower bound value sample will be triggered
  • Reset Slew - On a reset, any currently active slew will be ended and the slew value will be set to 0. If the slew length is > 0 this will instigate a new slew, this is great for creating boing noises

Experi-Mental I anticipate a few bugs or undefined behaviours with this module because the complexity of the code grew significantly during development, so I appreciate any reports, please be patient with me.

Ideally I would like to (at some point in the future) expand the functionality of this module, perhaps with new controls, perhaps with an expander that has more output options, perhaps with polyphony (although that most likely needs a complete code refactor, and maybe needs me to learn simd too).

I’d love to hear if you find uses for this module and any suggestions on how it might be more useful.

Thanks, DanT.

11 Likes
4 Likes

The best reason in the world to make a module is to make a module you want/need yourself. Looks like a very interesting module that Kalkatron.

1 Like

Look forward to giving it a go, and “scratching your own itch” is often a good place to start!

New minor release

This is just to fix a bug with the Kalkatron reset, where certain configurations would cause the reset not to execute. Reset should now take priority over any other triggered operation.

2 Likes

Update

added inverted gate outputs for the bounds: They output 10v when the signal is inside the bounds.

added output rectification, controlled by a new 3-way switch in the output section.

You can have half rectify: negative = Equals values will be set to 0

or full rectify, negative values will be changed to positive values.

Notes: The rectification will respect the output attenuvertor, so for example if that is set to -1, the output will negatively rectified.

Currently the auto-reset bounds and the gates are tested before the output attenuvertor, should I change this to after?

3 Likes

Wow, this was perfect for an example I wanted to implement today. I probably massively overcomplicated it, but essentially I have a pitch that is held for a long time and every so often it changes to another, random pitch. I wanted to step between them (ie. if the change was from F2 to C3 then I want up to 4 steps in between, in this case G2, A2, B2 or however they quantize out). I was able to calculate the step size using a cf’s ALG then pass that value into the “Plus” value input et voila along with the outgoing pitch in the main value input. It works great! Thank you for this!

One bit of feedback, since you say “Subtract”, “Multiply”, “Divide”, have you considered saying “Add” instead of “Plus”?

1 Like

It really is the best thing to hear that someone found a use for your module, very happy to have helped you create something.

Maybe this is just because I am stubbornly English, or because I studied maths in higher education (20+ years ago), or maybe there is no real reason other than personal preference, but this + is a plus symbol to me, not an add symbol. Plus is just more mathematics than add. Add feels like the amateur version of plus.

I do realise that some languages struggle with how in English there are multiple words that have the same or similar meaning, it is probably true that in some there is a translation for add and not for plus. I would certainly consider changing something on my modules if it is causing an accessibility or usability issue. But otherwise I’ll chalk it up to my identity being present in my designs. :disguised_face:

Many languages have the ‘one word, meaning and usage depends on situation’ thing :wink:

Oh for sure, but as far as I can tell, the majority of VCV modules are labelled in English and have English manuals (though a fair majority being US English I would guess).

In general I would expect that most British users would not immediately question Add vs Plus, since it is very common to say something like Two plus two is four.

It is also very common to say something like Two times three is six, but I use Multiply not Times, and Equals not Is, for the same reason I use Plus not Add.

Another reason is that sometimes context can mean Add is concatenation rather than addition, for example To pluralise this word you would add an S. Using the word Plus instead of Add in this sentence doesn’t work.

1 Like

indeed, we all have cultural prefs I guess, whatever culture that may be. And our so far life influences our prefs as well. A nice philosophical side-journey :wink:

1 Like

I don’t think this is a case of British vs American. Certainly + is a plus sign, but then - is a minus sign, not a substract sign. So why did you use Subtract?

Subtract, Multiply, and Divide are all verbs. Plus is a preposition, adjective, or noun, but not a verb. Grammatically it makes more sense to use Add in this case for both British and American usage.

I have no problem with inclusion of your “identity” in your design, and Plus certainly is understandable. But I for one will always find the labeling a bit jarring - although nothing to lose sleep over.

2 Likes