weird behavior from DELAY in simple Karplus-Strong patch

I set up a very simple Karplus-Strong patch and am noticing that the pitch oscillates in a downward ramp that resets at a steady interval (maybe three seconds or so), even if I don’t change any parameters. Is there something about the DELAY module that has some kind of internal buffer that’s being reset or something?

Patch linked below…

karplusstrong-weird-oscillation.vcv (1.2 KB)

And here’s a copy-paste of the patch you can just drop in:

{
  "modules": [
    {
      "id": 2391496175426799,
      "plugin": "Fundamental",
      "model": "SEQ3",
      "version": "2.3.1",
      "params": [
        {
          "value": 1.0,
          "id": 0
        },
        {
          "value": 0.0,
          "id": 1
        },
        {
          "value": 0.0,
          "id": 2
        },
        {
          "value": 8.0,
          "id": 3
        },
        {
          "value": 0.0,
          "id": 4
        },
        {
          "value": 0.0,
          "id": 5
        },
        {
          "value": 0.0,
          "id": 6
        },
        {
          "value": 0.0,
          "id": 7
        },
        {
          "value": 0.0,
          "id": 8
        },
        {
          "value": 0.0,
          "id": 9
        },
        {
          "value": 0.0,
          "id": 10
        },
        {
          "value": 0.0,
          "id": 11
        },
        {
          "value": 0.0,
          "id": 12
        },
        {
          "value": 0.0,
          "id": 13
        },
        {
          "value": 0.0,
          "id": 14
        },
        {
          "value": 0.0,
          "id": 15
        },
        {
          "value": 0.0,
          "id": 16
        },
        {
          "value": 0.0,
          "id": 17
        },
        {
          "value": 0.0,
          "id": 18
        },
        {
          "value": 0.0,
          "id": 19
        },
        {
          "value": 0.0,
          "id": 20
        },
        {
          "value": 0.0,
          "id": 21
        },
        {
          "value": 0.0,
          "id": 22
        },
        {
          "value": 0.0,
          "id": 23
        },
        {
          "value": 0.0,
          "id": 24
        },
        {
          "value": 0.0,
          "id": 25
        },
        {
          "value": 0.0,
          "id": 26
        },
        {
          "value": 0.0,
          "id": 27
        },
        {
          "value": 0.0,
          "id": 28
        },
        {
          "value": 0.0,
          "id": 29
        },
        {
          "value": 0.0,
          "id": 30
        },
        {
          "value": 0.0,
          "id": 31
        },
        {
          "value": 0.0,
          "id": 32
        },
        {
          "value": 0.0,
          "id": 33
        },
        {
          "value": 0.0,
          "id": 34
        },
        {
          "value": 0.0,
          "id": 35
        },
        {
          "value": 1.0,
          "id": 36
        },
        {
          "value": 1.0,
          "id": 37
        }
      ],
      "rightModuleId": 7231901113346625,
      "data": {
        "running": true,
        "gates": [
          1,
          1,
          1,
          1,
          1,
          1,
          1,
          1
        ],
        "clockPassthrough": false
      },
      "pos": [
        7,
        0
      ]
    },
    {
      "id": 7625796517684121,
      "plugin": "Fundamental",
      "model": "Delay",
      "version": "2.3.1",
      "params": [
        {
          "value": 0.11204822361469269,
          "id": 0
        },
        {
          "value": 0.9855421781539917,
          "id": 1
        },
        {
          "value": 0.41927731037139893,
          "id": 2
        },
        {
          "value": 1.0,
          "id": 3
        },
        {
          "value": 0.0,
          "id": 4
        },
        {
          "value": 0.0,
          "id": 5
        },
        {
          "value": 0.0,
          "id": 6
        },
        {
          "value": 0.0,
          "id": 7
        }
      ],
      "leftModuleId": 6084063640555024,
      "rightModuleId": 352078529807277,
      "pos": [
        44,
        0
      ]
    },
    {
      "id": 352078529807277,
      "plugin": "Core",
      "model": "AudioInterface2",
      "version": "2.1.2",
      "params": [
        {
          "value": 0.43614456057548523,
          "id": 0
        }
      ],
      "leftModuleId": 7625796517684121,
      "data": {
        "audio": {
          "driver": 5,
          "deviceName": "ODAC-revB USB DAC",
          "sampleRate": 44100.0,
          "blockSize": 1024,
          "inputOffset": 0,
          "outputOffset": 0
        },
        "dcFilter": true
      },
      "pos": [
        53,
        0
      ]
    },
    {
      "id": 7231901113346625,
      "plugin": "Fundamental",
      "model": "ADSR",
      "version": "2.3.1",
      "params": [
        {
          "value": 0.0,
          "id": 0
        },
        {
          "value": 0.0,
          "id": 1
        },
        {
          "value": 0.0,
          "id": 2
        },
        {
          "value": 0.0,
          "id": 3
        },
        {
          "value": 0.0,
          "id": 4
        },
        {
          "value": 0.0,
          "id": 5
        },
        {
          "value": 0.0,
          "id": 6
        },
        {
          "value": 0.0,
          "id": 7
        },
        {
          "value": 0.0,
          "id": 8
        }
      ],
      "leftModuleId": 2391496175426799,
      "rightModuleId": 1057192661270205,
      "pos": [
        29,
        0
      ]
    },
    {
      "id": 1057192661270205,
      "plugin": "Fundamental",
      "model": "Noise",
      "version": "2.3.1",
      "params": [],
      "leftModuleId": 7231901113346625,
      "rightModuleId": 6084063640555024,
      "pos": [
        38,
        0
      ]
    },
    {
      "id": 6084063640555024,
      "plugin": "Fundamental",
      "model": "VCA-1",
      "version": "2.3.1",
      "params": [
        {
          "value": 1.0,
          "id": 0
        },
        {
          "value": 1.0,
          "id": 1
        }
      ],
      "leftModuleId": 1057192661270205,
      "rightModuleId": 7625796517684121,
      "pos": [
        41,
        0
      ]
    }
  ],
  "cables": [
    {
      "id": 8110577262042541,
      "outputModuleId": 7231901113346625,
      "outputId": 0,
      "inputModuleId": 6084063640555024,
      "inputId": 0,
      "color": "#3695ef"
    },
    {
      "id": 5492913091269812,
      "outputModuleId": 6084063640555024,
      "outputId": 0,
      "inputModuleId": 7625796517684121,
      "inputId": 4,
      "color": "#ffb437"
    },
    {
      "id": 7897046921702626,
      "outputModuleId": 7625796517684121,
      "outputId": 1,
      "inputModuleId": 352078529807277,
      "inputId": 0,
      "color": "#ffb437"
    },
    {
      "id": 8713252966205186,
      "outputModuleId": 2391496175426799,
      "outputId": 13,
      "inputModuleId": 7231901113346625,
      "inputId": 4,
      "color": "#00b56e"
    },
    {
      "id": 4651881086708948,
      "outputModuleId": 1057192661270205,
      "outputId": 0,
      "inputModuleId": 6084063640555024,
      "inputId": 1,
      "color": "#00b56e"
    }
  ]
}
type or paste code here

This seems to be a bug in the delay module. I tried other delay modules that worked fine, e.g.

or the new Delay by Surge XT. Here you have to add some modulation to get higher frequencies.

1 Like

please report that to support@vcvrack.com so it gets fixed.

I’m wondering if that is more of a feature (perhaps unfortunate), designed to give some variability (richness) to the delay sound, which ends up making it less than ideal for Karplus Strong.

1 Like

If you are using the SurgeXT modules we actually have a tuned delay module which takes the delay time in V/Oct specifically for KS, and also has a sample delay offset so you can compensate for loop length sample delays in rack and stay in tune. (We also have the regular digital delay but the tuned delay is really made for KS).

3 Likes

If you have Surge XT and BaconMusic plugins installed (as well as bog, vult, etc…) this is a pretty good demo of how that module works for absolutely super simple feedback sound creation.

SimplestKS.vcv (1.7 KB)

2 Likes

Can’t find the thread right now but this has been discussed I think. The fundamental delay is not your choice for KPS.

1 Like

Thanks, everyone! I’ll take a look at the Surge XT delay - the v/oct input for setting delay time is extremely handy.

You should still report the bug to the VCV devs. Hopefully they can fix it.

Also have a look at the Waveguide Delay

The Surge XT Delay gives you stereo processing, as well as polyphony that are not available in the Waveguide Delay.

But the Sckitam Waveguide Delay has some extra ports that make it simpler to do a few things.

  • Feedback input with attenuverter so you don’t need an external mixer for feedback
  • Pk Pos knob/input and Pickup output that effectively let you shift the phase of a tuned input by 0 to 360 degrees, assuming the Delay input V/Oct matches the frequency of the input.

Oh the poly mapping thing, by the way, I got into the version we have waiting in the library queue so the first release will have that polyphony driven by v/oct and broadcast from mono input to channels.

As to the other features we discussed, I put them https://github.com/surge-synthesizer/surge-rack/issues/646 and will definitely get a version of the tuned delay with different modulation targets into the 2.1 release.

The 2.0.3.0 release is available https://github.com/surge-synthesizer/surge-rack/releases/tag/v2.0.3.0 while we wait for the library also. That’s the recommended version for all users pre-lib.

1 Like