• akwizgran

    Each time a tabosc4~ reads a value from its table, it uses a combination of the four values closest to the given index. This allows it to produce a suitable value through interpolation even if the index isn't a whole number.

    Let's imagine an object that does this without using guard values.

    When the object is reading from the start of the table (any index less than 1), one of the four values it needs to combine lies before the start of the table. Because the waveform repeats, this is the same as the value at the end of the table. So the value can be read from there instead.

    Similarly, when the object is reading from the end of the table (any index within 2 of the last index), one or two of the values it needs to combine lie beyond the end of the table. Because the waveform repeats, these are the same as the values at the start of the table. So the values can be read from there instead.

    So our imaginary object without guard values works - what's the problem? The problem is that checking for those special cases increases the cost of looking up every value. It's more efficient to make copies of the extra values we need - one at the start and two at the end - when setting up the table. This extra work only needs to be done once, and then the lookup code that runs thousands of times per second can be as efficient as possible.

    To answer the question about the discrepancy in the documentation about whether we should have three guard points at the end, or one at the start and two at the end: either way will work. Both approaches will produce waveforms that repeat cleanly, but the start point of the waveform (and thus its phase) will differ by one sample depending on which approach we choose. So if it's important to preserve the phase of your original waveform, add one guard point to the start and two to the end.

    posted in technical issues read more

Internal error.

Oops! Looks like something went wrong!