Announcing: Sapphire Elastika

From Module.hpp

        struct BypassEvent {};
        /** Called after bypassing the module.
        */
        virtual void onBypass(const BypassEvent& e) {}

        struct UnBypassEvent {};
        /** Called after enabling the module.
        */
        virtual void onUnBypass(const UnBypassEvent& e) {}
1 Like

Sweet! I will fix that problem in Moots right now then!

1 Like

I agree, that would be great.

I also imagined some kind of diagnostic module that deliberately generates NAN and/or infinite voltages on purpose, as a fuzzing tool. The same sort of thinking Netflix uses in its Chaos Monkey, or how security researchers look for bugs and vulnerabilities by injecting crazy inputs into things to see what happens.

I don’t know if there could be some way of segregating developer tools like this from normal modules that non-developers would use. It would be weird to put stuff like this in the VCV Rack Library mixed in with everything else.

1 Like

Great! I just added an issue for this. I’ll put this in the next release, which I intend to submit for approval within the next few days.

There was a module that did just that in V1.6 - not sure it made it to V2 though. it was called the 'Module from Hell" or something like that… :slight_smile:

Edit: Here’s a thread about it:

Edit2 - lol - just re-read that thread and realised it was me that came up with the name for it haha.

3 Likes

It is interesting that in that thread Volt Meter would indicate a NaN or inf. I have never seen it do so. I suppose that means that these things I see are not in fact NaN but rather very large numbers, possible by “almost dividing by zero”.

Well you named it! image

1 Like

I don’t think it’s possible/allowed in V2.

I fixed the following issues so far:

  • Added bypass support for Elastika and Moots.
  • Sum polyphonic inputs (audio and CV) in Elastika and Moots.
  • Check for NAN outputs every quarter of a second and auto-recover if found. I still haven’t seen the NAN issue happen, so I hope this works!
  • Added right-click menu slider to adjust output DC reject corner frequency. Default is 20 Hz, but can go up to 400 Hz.
  • Prevent randomization of input and output level knobs.

I will let everyone have a chance to bang on the released version for a few more days and see what other bugs/suggestions pop up. I will do some heavy testing myself. Sometime next week I will submit a new version for approval.

Thanks everyone! Now if you’ll excuse me, I live in Florida so I have yet another hurricane (second this year) to enjoy.

9 Likes

Be safe and good luck!

2 Likes

Sounds like a good idea.

I’m glad other people feel the same way. That change is now in the GitHub repo.

1 Like

Hurricane Nicole wasn’t so bad where I live. The loud wind and rain kept me awake most of the night, but there is no flooding or wind damage at my house. I still even have electricity! :partying_face:

7 Likes

This is a really interesting module, thanks! I’m not quite sure how the physics model affects the audio, is it feeding back the input signal according to the simulated values of the nodes? I can’t wait to try it with guitar, but in the meantime here’s a quick video I knocked up running the Warp Core complex oscillator into it (inspired by another thread on phase modulation sysnthesis!) The sounds it made kind of caught my ear straight away, it’s gritty and distorted but in an unusual way, with harmonics slowly coming in and out from modulating it with Caudal.

P.S I’m glad there’s no damage from Nicole. I live in Scotland now, where we seem to have high winds the whole time, just not quite hurricane level!! :wink:

13 Likes

Thanks for sharing that video! It’s really cool as a developer to see what people do with a module. May I use a link to that video as a demo on my documentation page?

About the physics model: the audio coming into the L and R inputs causes the position of 2 selected balls in the network to move back and forth. Each voltage instantly sets the position of the corresponding input ball. As the balls move, they push/pull the springs that connect them to other balls. The other balls start to move too. There is a chain reaction. The whole network of balls and springs starts moving around based on simulated physics: force, velocity, acceleration, etc.

A second pair of balls act as outputs. The output balls’ positions determine the L and R stereo output voltages. The input TILT knob controls the angle in 3D space that the input balls are moved, and the output TILT knob controls the angle by which to sense the output balls’ positions. The result causes a voltage to appear on the audio output jacks.

There is a lot more to it, which I describe in the physics model documentation. I’ll be happy to answer more questions about this stuff, because it’s a lot of fun and a lot of time and work went into it.

7 Likes

Awesome, yep you are more than welcome to link to the video! I read the documentation but kind of skimmed through it, so I need to read it properly again. I’m just trying to understand if it completely resynthesises the audio based on the model, or it’s the original sound fed through the mesh? It does sound like there’s some of the dry sound there too. I’ve run out of time tonight but did try it briefly with guitar and it’s wild! Certainly worth further experiments :wink:

I guess it depends on how you look at it. Because the output is related to vibrations moving through a simulated system, and those vibrations come from the input audio, the least confusing answer is that it’s the original sound fed through the mesh.

However, it’s also possible to put Elastika into a mode where, even without any input, it spontaneously starts making sounds on its own, so it acts like a synthesizer voice. This is not the sort of thing that would happen in the real world with passive components like balls and springs obeying Newtonian physics, because of conservation of energy and all that.

But because I’m doing a finite time step approximation of such a system, the simulation doesn’t completely obey conservation laws. The approximation is inexact enough that when you push it to extremes (e.g. very low friction and higher magnetic fields), free energy can appear out of nowhere and build up. Because my Δt is finite, not an infinitesimal dt, there are slight inaccuracies in the force, acceleration, and velocity calculations that lead to tiny violations of energy conservation that can accumulate.

This would be a problem if I were trying to model something for engineering or scientific purposes. But for a synth module, it turns out to be fun and interesting.

You can think of the unrealistic spontaneous vibration as being similar to amplifier feedback in the system that causes Elastika to sometimes create sounds on its own, in addition to reacting to any input you might feed it. The amplifier feedback is not explicitly coded that way, it’s just a side effect of the finite step approximation’s imperfect accuracy.

7 Likes

Love this module! Thank you so much for creating such a beast, I have created some pre-sets for this, based on feeding it a Vocal wav from Nysthi Complex Simpler. Truly wonderful results in a messed-up reverb echo universe!

2 Likes

Or think of it as being similar to Fonzie punching the juke box. Ayyyyy! :+1:

Fun module. Nice work. Thanks!

1 Like

Wonderful sounds!

1 Like