Open trynsta opened 1 week ago
I think majority of the wavetable world seems to have taken the Serum method as de-facto standard, more or less. The other end is u-he's UHM format, but this one has some closed source bits (certain interpolation algos etc).
My personal opinion is that this is a lot of work, I'm not sure if we really want to maintain this, it's not really a standard if we don't get anyone else on board (and why would Serum, Vital, u-he etc. do this when they already did the work their own way?). And xkcd 927...
Yeah I am not sure if other plugins would adopt it but anyways including some type of WT in text format would make WT in Surge more flexible.
We had a draft and partly coded lua wavetable generator we never finished - I kinda concluded we would need too much dsp code to make it useful
I think the project you are suggesting - which is a good but ambitious one - is a little dsl to control an engine which renders frames. That as a standalone c++ library could then be included in surge but also in python and others. But it’s a big project!
Is your feature request related to a problem? Please describe! I think it might be useful to implement some kind of standardization for WT. I described my idea below.
Describe the solution you'd like:
I’ve got an idea for a portable format which could store wavetables. It should be an open standard with his own git repository with documentation. This standard should be under license which allows using it also in proprietary software (MIT? Creative Commons Zero?).
Pros:
Cons/ issues:
How it could look in JSON:
Description:
To reduce file space we can use JSON arrays (first value is fft_number, then fft_value and fft_phase):
That was an example of a single-frame wavetable. This format should be able to store multiple wavetables with various interpolation types between them. This standard should contain at least all interpolation types from the Vital synthesizer. There also should be at least two types of wavetables: FFT based (just like "Wave source" in Vital) and those indicated by points and curves between them (like "Line source" in Vital). Example:
If the value of "Wavetable_type" is "Line source," then:
"curve_type" - interpolation type between this and the next point (eg. "linear", "exponential" etc.).
"curve_type_value" – the amount of curvature.
"Interpolation_type" – specifies the interpolation type between the current and the next keyframe.
"Keyframe_x_position" - specifies a position of a keyframe on the timeline. (Maybe values between 0 and 256?)
"Interpolation_value" – the amount of curvature.
Other parameters which might be useful:
I think that even if Surge currently doesn't support all functions mentioned above, this standard should have a wide variety of parameters so that it supports a wide range of software. Also, if Surge gets one of these futures, we don't need to change the specification.