Splat~ Overdub gets louder when interpolating.

Jonatan Krogh's icon

Im using Splat~ with @overdubmode accum. If i record at standard speed it all works well, but if i record at lower speed so the interpolation kicks in, then the overdubbed sound gets louder. The slower it records, the louder and glitchier it gets.

Also, Im using the trick from the iPoke documentation of connecting a signal from the patcher playing back the sound to the poker, to force it to play before recording. Seems a bit dodgy though so would love to know if there's a better solution.

jkPoker_test.maxpat
Max Patch

Graham Wakefield's icon

I think this may be expected behaviour? If you slow the write speed down, then you are effectively pouring more samples into an equivalent space of the buffer. Imagine you are icing a cake: the slower you move the icing tip, the thicker the icing will be, because more of it accumulates on top of each other.

If it helps: The splat~ op in gen basically just spreads the input sample value between the two nearest sample slots in a buffer, with a linear mix between them, and the overdubmode=accum means that it adds to the existing data in the buffer.

If you wanted to counteract this and balance the amount regardless of the speed, you'd need to attenuate the signal before it goes into splat~, with some factor that inversely proportional on the write speed.

Jonatan Krogh's icon

Thats what i thought was going on behind the scenes too, but it doesn't seem like the most intuitive behaviour or something I'd do on purpose, more like an oversight.

I implemented this in the example, and it does indeed seem to work as expected when overdubbing. If this is the intended functionality, why is it only happening when overdubbing, and not when replacing? If overdub is zero, it's recording at normal volume, so to get the "expected" behaviour i need to interpolate between 1 and the speed-compensated gain. (second example).

Another confusing behaviour is that if record with overdub 0. (replacing) at low speed, then jump to a higher speed, the old audio stays. Again the behind the scenes explanation makes sense, it's just skipping samples, but since it's supposed to be "interpolated overdubbing", this is not what i would expect.

jkPoker_test2.maxpat
Max Patch

jkPoker_test3.maxpat
Max Patch



Julien Bayle's icon

The speed change part and the pouring that "jumps" and let the previously recorded parts unchanged is as normal considering the implementation, as interesting in some ways, as confusing at the first time, indeed.

Will work on it in our current training sessions with our students here today, ✨

Jonatan Krogh's icon

Ahh, wish I was there! If any interesting thoughts or examples comes out of it I’d love if you could share it here!