Taking Advantage of Striso's Responsiveness

For the past 8 months I’ve been working on a single synthesizer that takes full advantage of what the Striso can do. I’m not nearly as far along as I want to be. In my enthusiasm I hijacked another thread talking about it. So, I’m moving the conversation over here, with a bit of context.

The work to date is in the main branch of my dyanamic Striso control firmware repository. If there’s interest I’ll see about putting together a compiled release. What’s in main at any given point in time should be fully playable.

My first work was to spend time improving the amplitude envelope. After months of work I think I’ve finally got it to the point where it’s a matter of twiddling parameters. The envelope rises to an attack based on the highest pressure (z-axis) before the attack is reached. It does not make use of the velocity at this time. Instead what I have works (roughly) like this:

  1. Initial State is at 0 pressure (what the musician is doing) and 0 amplitude (the sound the instrument is making.
  2. Attack: The musician has increased the pressure to a nonzero value. The amplitude starts increasing to that value plus a fixed percentage over the pressure at a linear rate. This target will be based on the maximum pressure reached during attack, so should the musician very quickly press down, then back off, it will still be based on their highest pressure.
  3. Decay: When the attack value has been hit, decay will begin in the same way, now targeting the current pressure.
  4. Sustain: The amplitude will follow the pressure with a certain degree of delay (this allows for an actual ‘release’ value instead of just going to zero when pressure does).
  5. Release: If the pressure is ever at 0, then release will begin, descending to 0 at a fixed velocity.
  6. Quick Release: If, during release, the pressure goes above the amplitude then it will quickly drop to 0, and attack will begin again, allowing for more staccato play.

This basic pattern holds for all playing. The Y axis will vary the results as follows:

  • Centered: Play feels fairly similar to how it does with the current normal mode, with a little more attack and a little longer release, there is also just a bit of lag in response time during sustain.
  • Pushed Forward: Extremely tight play, there is no lag at any point.
  • Pulled Back (think as though you were ‘plucking’ the buttons): This is intended to be more like strumming. Attack is a little slower, and release is MUCH longer.

All of the above is based on constants that can be set in the code. I like where they are now, but I’m not convinced that they’re perfect, just good enough that I’m comfortable moving on to the instruments timbre.

So, that’s my 8 months of work to date. A lot of it was spent picking the right way to solve the problem and the right tooling, then getting good with Faust, and learning as much acoustics & psycho-acoustics as I can… I’m still working on the last two parts.

The rough model I’ve had in my head for the target sound is a violin… mixed with a guitar… mixed with a Yaybahar. In the last case, I’m thinking of using to add richness to Bass notes.

The Striso is a highly responsive instrument, we should use that responsiveness to create the maximum expressiveness imaginable.

To that end, here are a few of my own thoughts:

  • At lower frequencies I want to aim for having more complex overtones.
    • By corollary, higher frequencies should be more ‘pure’, though perhaps with some element of white noise to keep them from being piercing.
  • The kind of timbre we get should be influenced by how hard we press. In addition:
    • Because I have an amplitude that follows pressure, how far apart they are will effect timbre.
    • The current velocity of pressure will also have effect.
  • Obviously Y-Axis will already effect timbre because it will effect distance between pressure & amplitude, but it should also effect it on its own. I’m thinking more complex timbre the to less = forward to back. This will mean the ‘plucking’ will have a less complex sound and make it better for acting as accompaniment.

When I’m reasonably satisfied with the timbre. Then I want to start hitting the Striso.

I’ve already done proof of concept, it’s possible to use jerk(jerk is to acceleration as acceleration is to velocity), to detect if the Striso is being tapped. Tapping on one side will give one kind of drum sound, tapping on another will give another kind. It can detect how hard you’ve tapped, so that can effect amplitude. I think it’s rotation will even be able to give a hint on whether it was tapped close to the center or edge. But all I’ve done is proof of concept, so take a pinch of salt with the lot of it.

1 Like

You may need to inject some quotes from the original thread, for further context.

1 Like

That’s a good point. I did a relatively quick copy/paste/edit and left out a lot of context. I just did a re-read through and cleaned it up to better set context, and remove unnecessary context.

Thanks,
Frank

1 Like

Hey Frank, replying here to the message in the original thread.

Y0 is intentionally a bit laggy, if you want it to feel fast, then push a little and it will be significantly more responsive

When playing 16th notes it’s almost impossible for me to consistently adjust Y to the point it doesn’t feel unresponsive, there are always a couple notes that are randomly out of time. I think there may be a sweetspot somewhere near to Y0 in Y+ that will better align both with your vision and with the need to play 16th notes consistently from time to time.

I’ve made a branch where I have more attack with higher Y values

That sounds cool, will try it and share my thoughts!

The rational behind having Y0 be a little laggy is close to the feel of a real instrument, say a violin, which takes time for the instrument to energize

It’s been a decade since I last played the violin, but I don’t recall it being so laggy.

I don’t know if you’re old enough (for all I know you may be older than me), but If you remember, there was a time when consumer audio cards could not deliver delay times below 30ms, and they were literally unusable for playing the guitar through a digital effect chain. After the delay dropped below 20ms, I’ve found myself using my PC more than my physical amp, because finally I could react to the sound in time. Pretty sure me being unable to play fast with your synth grows from the same root.

If you’re interested in getting to the bottom of it, I would suggest getting Tenacity or any other audio editor, finding a YouTube video of a solo violin (or guitar) that you like, and measuring the attack, decay and release times. Most likely you will need to make adjustments to the decay and release times to account for the reverb.


RE: strumming. There are two ways to get something that sounds like strumming.

  1. Have insane release time. It may be intuitively what it should work like, because surely in a real guitar this is what basically happens: you just pluck the string, and let it ring as the amplitude decays to 0.
    It’s enought for a demo, but absolutely unviable musically. To strum musically you’d need a way to dampen the strings at will, lest your music devolves into pure chaos. On the guitar, this is where the many muting techniques go. On the electric guitar, muting techniques are easily the most important skill for your sounds to resemple music.

  2. Just put the ringing into the sustain part of the envelope and control each note as usual. The string ringing time is even called sustain on the guitar. It might not answer some of the intuitions, but it’s a lot more practical, and you can make it a lot easier and more realistic with a pedal.

Speaking of pedals, Pianoteq plays sounds on both pedal up and down, and the pedal affects the timbre as well. A similar mechanism would make for a very realistic guitar strumming. Pedal down, notes are left ringing; pedal up, notes are muffled–ringing or otherwise. Could be amazing in terms of vivid dynamic range.

Rereading this I’m not sure if i get any points across or am just rambling, but hopefully you’ll find this entertaining or useful. Cheers!

1 Like

Update: I had the chance to try the sharper attack branch. I certainly feels a bit more responsive, and I can clearly hear the attack when playing mezzo-forte-ish. What I’ve said above still applies though.

I’ve also encountered a strange bug (having played with Faust for a while, might as well be a bug in Faust itself), where the volume suddenly can become quite uncomfortably loud in the headphones when playing chords and simultaneously changing the Y axis. Can’t reach the same loudness with high initial velocity, and can’t pinpoint the exact repro steps, so just FYI. Didn’t experience that with the default striso synth, but I don’t usually play in headphones, so I might just not notice until now.

1 Like

Good luck on your efforts. I’ve also noticed that the amplitude envelope is a really tricky decision to make for instruments that rely on a continuous pressure signal. I’ve seen a lot of breath controller players just rail the amp open and use the filter to modulate the loudness, but sometimes you don’t want that sound. For my synth Wiggler I’m complimenting the pressure signal with an attack decay envelope, then mixing the pressure signal with the AD envelope to modulate the amp envelope. Or at least that’s the direction I’m going, I haven’t found a recipe I like yet.

2 Likes

The Wiggler looks really cool, especially in terms of having all the controls you’d want in a nice minimal form and pretty clear to understand.

For me a lot of what I want is heavy interactions between the amplitude envelope and the timber envelope, and neither to be static based on time, which looks like part of what you’re doing there.

Bit of an update. Sadly I don’t have anything really worth sharing at the moment. I’m struggling with the limitations of the device, and my own ignorance. Today I started hooking it up to a software oscilloscope and learned a few interesting things I didn’t understand before, so well worth the time.

An interesting discovery that I made (which is only interesting if you’ve been digging into @pierstitus 's source code) is that vpres is NOT what you usually think of as pressure velocity in midi, where it’s a static value of how hard you pressed initially. Instead it’s a constant measure of velocity, which is far more useful… even if it would have been nice to know that before I spent 2 hours debugging why my vpres attack wasn’t working the way I expected.

Right now I’m seeing significant problems on my state machine, anyone who wants to kibitz, my current working branch is expDecay. I’ve tended only to push when it’s in a vaugly working state, but I make no promises.

-Frank

Hi folks,

So, I gave myself a year to work on this… and I think it works. I have Release 1.0.

So, this is how it’s working at the moment:

  1. ‘Plucking’ works. If you tap a button, then it will ring out more like a plucked string. The ‘attack’ phase in all conditions is based on the difference between the velocity going up and down.
  2. Similar to the standard Striso design, the Y-axis affects the timbre, the goal is for the sound to be more clean and fluteish pushing forward (Y+), and more complex pulling back (Y-). The target for pressing straight down is to have a similar level of complexity to a violin.
  3. There is some difference in timbre over the process of changing the amplitude.
  4. If you press relatively gently, you’ll get no real attack at all because the velocity will be lower than your current pressure, this allows for a more legato style of play.

Honestly I think the most important thing I’ve done is commenting the code into the ground. If it doesn’t have comments on it, I don’t understand it (I’m looking at you stack of uncommented hsliders).

I did do some work on using the Striso percussively, if you like living on the edge you can find the branch here.

It works as follows:

  1. Hold the Striso ‘upright’, so the buttons are facing you.
  2. Tap the side.
    • Lighter taps will be quieter than harder taps
    • In principle tapping toward the middle will have a lower pitch than toward the top/bottom. But I don’t have a lot of variance there.
  3. Be aware, there is a bug that’s adding an amount of static when you tap it, I have no idea why.

Things I’d like to have in release 2.0:

  1. Being able to control the strength of the attack via setting. @pierstitus any wisdom on how this works would be most welcome.
  2. Being able to control the length of the release via setting. Ditto.
  3. Having the ‘drum’ mode be in the release.

But. This is it for me for a while, I promised myself this was a 1 year project. Now I’m going to work on getting good at playing it as it stands. That being said, I’m sure I’ll tinker some, and pull requests are eagerly welcomed. I’d love to hear feedback also.

I’ll try to get a video together demonstrating the new functionality in the next week or two.

If you got this far. Thanks for reading,
Frank

6 Likes

Looking forward to the demo video!

1 Like

Release 2.0:

So I only added the drum sound for this release because it’s what had the most need for.

The video is coming, and this time I mean it.

2 Likes

Great, I look forward to seeing what you are capable of demonstrating.