Free Wavetables: 128 Wavetables (Serum format) plus single-cycle waveforms, from a huge forthcoming collection

Hi there! :wave: I’m new here in the Vital forums and haven’t yet gotten into Vital, but I’m a Korg modwave/modwave native user and beta tester and wavetable freak so…

tl;dr: I’ve been working on an absolutely ginormous collection of single-cycle waveforms (more than 29,000) that I’ve assembled into some really cool wavetables (more than 36,000), and you can get a sampler pack of these that includes 127 wavetables that should be easily importable to Vital (via the Serum .wav versions) here: Free Wavetables for Korg modwave, Serum, and other wavetable synths plus single-cycle waveforms

Lots more words about these:

These aren’t based on audio samples, they’re the real wavetable/single-cycle waveform deal. Pure data.

The commercial version featuring 36,000 wavetables, 29,000 source single-cycle waveforms, and more will be available soon (and just $29). This free collection includes modwave/native .mwbundle versions, Serum compatible .wav versions, and also includes Korg multisamples for an assortment of waves (use them in your wavestate!) as well as samples of the core .wav files themselves (with full-length loop points set) that can be used in a wide variety of applications.

This project started as an exploration of waveforms created using various mathematical series, especially the polygonal number series, which have a really unique bell-like timbre. (I first heard these types of waveforms via Galbanum’s Architecture Waveforms collection, where there are a few examples, but the method wan’t very deeply explored.) So, I wrote code to make zillions (well, thousands) of variations on polygonal-series-based waveforms and then, just kept going with waveforms based on other types of numeric series and bunch of other novel single-cycle waveform generation techniques (“non-binary bitmask synthesis”, anyone?)… More on this in future videos.

The page mentioned here is a work in progress, and there will be a demo video soon, but why wait to share some fun? So, go ahead and get some free wavetables you can use in Vital and other wavetable synths.

These should be easily importable into Vital. The Serum folder you’ll find in the sampler contains 32-bit .wav files where each waveform frame is 2048 samples (in case you need to know that). Each free example wavetable has no more than 64 frames (more detail on what the various types of wavetables are, below).

AND… If anyone who might want to create some cool Vital patches using these and share them with me as examples, I’d be happy to return the favor with a copy of the full collection.

Since I don’t have a long, talky video about this collection just yet, here’s a little more background about what’s in the free collection than is currently present on the download page:

ABOUT THE DIFFERENT WAVETABLE TYPES:

The other types are as follows:

  • “Pgon 16”: These wavetables are 16 frames composed only of the polygonal numbers waveforms and their variations. There are more than 700 of these in the full collection.

  • “Rand Explore”: Composed of 4 randomly selected waveforms from the Vol 1. collection. These are great for position morphing as you’ve got lots of room between the frames.

  • “Rand Explore 16”: Same thing, but 16 frames per wavetable. 1500+ of these in the full collection.

  • “Rand Explore 64”: Same thing, but 64 frames per wavetable. This makes the frames quite close together, but it’s an easy way to browse the wavetable collection is a random way and discover happy accidents.

There are also some examples of wavetables that use different crossfading/morphing techniques than time-linear crossfades:

“Mband” wavetables: The “Mband” wavetables are composed of 8 frames, created as follows:

First, two waveforms are selected at random from the collection (either “Vol. 1” or “Vol. 2” as implied in the names). These define the start and end points of the wavetable. Then, the harmonics are considered as 4 bands (think of it as low, low-mid, high-mid and high) and one of these bands was selected randomly to crossfade linearly (1:1) across the entire wavetable. The remaining bands are randomly assigned a different morph slope (between 0.5 and 1.0) and so may transition from the start to end somewhat faster than the linear band. This creates a bit of timbral variety, though the effect is subtle.

Then, based on this rule, we generate 6 evenly-spaced interstitial frames and the final wavetable contains 8 frames. In your wavetable synth with interpolation turned on, you then hear the wavetable smoothly morph between these frames.

In the commercial version, this technique was applied to the entire Vol. 1 and Vol. 2 waveform collections – with a rule that any given waveform is only used once – resulting in more than 12,000 Vol. 1 Mband wavetables and more than 1800 Vol. 2 Mband wavetables!

“RAIM” wavetables: The wavetables labeled “RAIM” are similar in that they again start with a beginning and ending waveform and some interstitial frames are generated to give a slightly different result than pure linear crossfading.

The technique I’ve dubbed “RAIM” stands for “Random Adaptive Interpolated Magnitude” and works as follows:

The harmonics of the start and end waveforms are ever-so-slightly perturbed using a Gaussian distribution (so it’s quite subtle) and then morph targets are generated by interpolating the harmonics between the spectral magnitude of the two waveforms. But what about the phase of the morph targets? This is where we get to the “Adaptive” part (it refers to “Adaptive Phase Selection”). For each morph target, we generate two candidate waveforms, one with the phase of the “start” waveform and one with the phase of the “end” waveform and then select the one with the least DC offset. So, theoretically, there are fewer phase shift artifacts within the wavetable, but really it’s just an experiment in getting slightly different transitions than you’d get if you just had a two-frame wavetable! They sound quite cool.

Anyway, I hope you’ll come check these out and let me know if you have any issues using them in Vital!

Cheers,
Keith

7 Likes

And, BTW, full “KRC Mathwaves” commercial collection with more than 36,000 wavetables, 29,000 single-cycle waveforms and multi-samples is now available here:

KRC Mathwaves: Wavetables for modwave, Vital, Serum, etc.

Thanks to everyone who came to visit the free wavetables collection from this forum! It’s still available of course!

4 Likes

Hey there! Check out a brand-new longer, talkier, and more hi-fi version of my intro video about my massive wavetable collection on YouTube here:

ALSO… if you’re interested in a discount on the full collection, see my post here (valid only for the next few days… save more than 50%):

Cheers,
Keith from wavetables.lol

2 Likes

Hey Keith, these Wavetables sound amazing! The long form video you did was really informative. I’ll create some Vital patches with them, and will send you a PM here on the forum.

1 Like

Oh hey @coolwav, thanks for the kind comments. Do @ me when you’ve done something!

Cheers,
Keith

My “reverse” Black Friday sale on the full version of KRC Mathwaves continues. The REVBLACK1 discount code currently gets you the full collection of 36,000+ wavetables and 29,000+ single-cycle waveforms for just $13. The discount keeps going down as we get closer to Black Friday… So get in now while the gettin’s good. ALSO, some interesting new stuff coming to the collection soon, in case you STILL don’t have enough wavetables…:

1 Like

I just buy the massive packs today for 18€ (with tax) , seems to be great stuff.
I’m now trying it, and yes its great stuff, perfect for Vital.

2 Likes

@tinga hey thanks for your patronage! I’m glad you took advantage of the sale! :smiley: Do check out the new “VAE” waveforms as they are quite unique and have a different character from the “precision” of the core Mathwaves set.

Some intro info on the waveforms made with my wavetable VAE, and what the different categories mean, can be found here:

And for anyone else curious about these, my “reverse Black Friday” sale continues this week at KRC Mathwaves: Wavetables for Korg modwave, Serum, and other wavetable synths plus single-cycle waveforms

1 Like

Yes I check out the new waveforms, tons of new stuff!
I like the multi linear series. But so many wavetable to try! :laughing:

2 Likes

What an incredible bit of creative output! Thank you for sharing, Keith! Thank you too for making it even more alluring with the sale pricing. :slight_smile:

I am curious about your creation process - and I have enjoyed reading the details you have already provided. I am dubbing this to be the next generation of Galbanum tables!

Happy holidays :turkey:

1 Like

@keith are the KRC Math Vol. 1 and 2 accessible for non modwave users? I downloaded the 1gb+ zip file and don’t see them in the directory.

Hey @sunsnail, you’ll find all of the .wav format wavetables (which are what you’d import into Vital) in the SERUM Wavetables: KRC Wavetables Collection - Serum Table Folder zip file. Inside it, and when unzipped, the top-level directory structure will look something like this:

Let me know if you’re still having trouble!

Best Regards,
Keith

Thanks! I see those folders. The naming for the scaled polygons is different from the modwave files and that is what threw me at first! I found them in ‘Polygonal Series Variations’

One further question - I do not seem to be able to import any of these tables into Surge. :frowning: I am given the following error
image
Any chance that on your end you could make it so that there are encoded with a .wav header instead of raw pcm? I don’t think I have the expertise / ability to do this. My attempts to import the file into audacity → re-encode → back into Surge results in a destroyed waveform…

1 Like

Hey @apoorbaugh, thank you so very much for your kind words! Yes, I was highly inspired by the Galbanum waveforms (later wavetables) collection I’ve long enjoyed. And it’s struck me as strange that nobody has produced anything quite like it in a long time.

As for the creation process: I’ve long been fascinated by some of the waveforms in Galbanum (the polygonal series waveforms particularly as I note in the sell page for KRC Mathwaves) but the slightly cagey documentation provided (at least to my mind) scant little information about how – exactly – those waveforms were computed (and how the heck they got turned into .wav files). But, as you’re probably aware, data science has advanced quite a lot in the intervening years and there are some very useful tools for doing things programmatically with audio now that were not available before.

Note that I’m an older person with experience in many programming languages and a bit of a background in scientific data visualization (among many other things), but like many semi-developer types these days, my strongest skills are with JavaScript. But JavaScript is very much centered on web development and makes dealing with raw data rather a challenge.

The alternative is Python, which is really the descendent of the scientific visualization languages and systems I’d worked on and worked with in the 80s and 90s, but I didn’t realize this until recently. I hadn’t fully realized how handy Python is (particularly its vast libraries for handling all sorts of data types, including audio).

A huge sea-change came this year with the advent of GPT-4, which is sort of the ultimate code tutor and programming partner, particularly once the “Code Interpreter/Advanced Data Analysis” mode became available. And to be honest, that is what has taught me Python and enabled this ever-growing collection.

Now, you can’t just feed the documentation for Galbanum Waveforms into GPT-4 and say “hey, can you work out how to generate these waveforms as wave files?”… BUT, if you understand audio and have some idea of how novel waveform generation might work, it can be an incredible time saver. After much experimentation, I did (with the help and interactive code execution capabilities of GPT-4) work out exactly how the polygonal waveforms were generated and, once I had that, it was a simple matter of plugging in other series I was interested in.

My own technique for generating these math-series-type waveforms is actually a bit more advanced than what I think was used in Galbanum (e.g., I generated those with specific numbers of max harmonics), but the core concept is the same.

Anyway, once you’re rocking along those lines, it’s easy to go crazy imagining new techniques for waveform generation and realizing them much faster than one would have been able to even just a year ago. The Galbanum waveforms collection is similar. There are a lot of “opaque” techniques developed there that are basically just summing partials with a 1/n amplitude relationship as the harmonics go up, but the exact algorithm in terms of biasing the partials cannot be known.

Now, generating waveforms is just one component of generating wavetables. At some level, wavetables are completely arbitrary – they are just a stringing together of different waveforms in some order. I used various techniques for Mathwaves Vol. 1 and Vol. 2. For the mathematical series wavetables, I sorted the waveforms by their max harmonics and base frequencies. And for other things, like the Bin AFM wavetables, they are simply in the order in which my script spit them out.

Having created a very large collection of waveforms, I became interested in creative ways to combine them into wavetables and the most obvious things to try, of course, are just randomly selecting some number of waveforms and throwing them into a wavetable and exploring what comes out! That’s what the “Explore” wavetables are all about.

And then another obvious thing to do is just select two different waveforms at random and morph between them. This would be tedious to do manually (and would take a great deal of time), so scripting it makes that much easier. But of course linear morphs between two waveforms are what (most) wavetable synths do. So, to make that more interesting, I developed the “Mband” and “RAIM” ideas, where we pick two waveforms and then morph between them in ways that are not exactly the linear way that a wavetable synth would do by default.

All of this proved to be pretty interesting! (If you’re me. I know that this sort of thing isn’t everyone’s cup of tea, but I love to have options and I love to explore stochastic/random combinations of things.)

But then I got interested in other, more advanced, ways of automating and approximating how a human being might design a wavetable. I might grab several random waveforms, put them in Serum, and then sort them by their max harmonic spectra, yeah? Or I might say to myself, “well, this waveform seems to ‘lead to’ this waveform and so on” and organize the wavetable that way. But again, this is tedious and time-consuming and… let’s face it… completely arbitrary.

(It’s just “my OPINION, maaaan!”)

So what are some scientific but creative ways to approach this? Well, that’s what led to the PATH wavetables that I showed in the Mathwaves video (but haven’t actually published as I’m not sure they are particularly useful). The idea was, let’s use machine learning techniques to categorize the waveforms and then, having a (two-dimensional) “map” of how they relate, navigate through them and assemble the wavetables based on their relationships. (For example, picking two waveforms at random, find the shortest connected path between them which is what the PATH algorithm does.)

But, this actually leads to using more advanced machine learning techniques – like training a Variational Autoencoder (VAE) – to preserve higher-dimensional relationships between waveforms and navigate through them in the higher-dimensional space. This seems much more interesting to me and that’s where the newer VAE wavetables come from. (This has the side-effect of generating novel waveforms that are not simply linear morphs between known waveforms, but probabilistic representations of musically useful waveforms that “might” be imagined but have never, exactly, been constructed.)

Training machine learning models like this is actually pretty hard (and somewhat costly) but I’ve been a Google Colab Pro+ user for a long time and had racked up quite a few credits which let me do a lot of experimentation the last few weeks. Ultimately this has lead to the development of a whole family of VAE architectures that can generate high-quality single-cycle waveforms and assemble them into wavetables.

My VAE architecture is influenced by other research, but is mostly novel and based on experimentation. I started with experimenting with training on just the time-domain (waveshape/samples) representations of the waveforms, then adding spectral representations of each waveform (its FFT), and then incorporating a spectral loss function. The real breakthrough in quality came with data enrichment. (Basically, taking the training dataset and generating interstitial morphs of random waveforms – just like a wavetable synth would do – and including those in the training dataset.)

Sorry, this is hopelessly long-winded and nerdly. I’ll have a video or two in the future that might explain some of this in more detail / in a more understandable way.

TL;DR department: The individual waveforms of KRC Mathwaves were generated using Python scripts. I learned to program in Python with the help of an artificial intelligence (which strikes me as mind-blowing and weird to say). I favor randomness and exploration in terms of how I generate wavetables from those waveforms. And, finally, all of that has inspired and enabled me to create new AIs that generate new waveforms and wavetables without writing Python scripts. :man_shrugging: It’s the future.

1 Like

Hey, @sunsnail, I’m not a Surge user, but I see what you’re dealing with.(Before I launch into being cranky, thank you for your patronage.)

My wavetable .wav files are 32-bit integer .wav files. Pretty much every other commercial wavetable synth accepts them just fine. I see that Surge is expecting 32-bit floating-point files. This isn’t really a ME problem, but a THEM problem, if you know what I mean. If you’re serious about wavetable synthesis, I’d encourage you to get something more professional. But I digress…

Anyway, here’s a test. Go get the zip file here and let me know if you can import it properly:

Let me know what you find.

I have, in fact, converted the entire KRC Mathwaves product (as it exists right now) to a floating point version, but it’s 14 Gigabytes spread across 84 files. Try the example file linked above and let me know your results.

Do the files inside work? I really want to make you satisfied as a user, but this is a format that seems kind of wonky. If there are any other “Surge” users here, speak up if you’d like official support for this. :man_shrugging:

1 Like

@keith Thank you so much for taking the time to help and potentially offer a solution! I know that this is more than I could expect from most.

Surge is a synth that I really enjoy using - it falls under the FOSS category which is something that I do appreciate in a piece of software and I have enjoyed the community. It is unfortunate that your files do not work natively! (Which is no fault of yours!)

I have downloaded the provided zip and I am attempting to import ‘RAIM 00010’. And… it works!.. kind of.

I am able to import the file into Surge as you would expect. However, the morph function does not change smoothly between the ‘frames’ of the wavetable and instead jumps abruptly. The file also just plays back as a oneshot - from the documentation I believe that this means there are no loop points present in the file. I was reading about there needing to be correct tagging in the wav file itself, here;

It looks like this is all possible when starting from single cycle waveforms which you do have available in the collection files. Or, alternatively, using the provided GitHub Python script to tag the files with the size so that surge can interpret them correctly.

I would be happy to try and do this myself - but would gladly welcome your help and computer science background at how to batch this out more efficiently!

I know surge is not the most popular synth, but I do believe this would be a great addition to your product portfolio to have as a drag-and-drop compatibility.

Thanks again! :slight_smile:

I was able to use the script add-surge-metadata.py in the Surge github to modify one of the RAIM wavetables that you provided. This allows surge to interpolate in the table - however, the wavetable does not seem to be correct. I need to do some more digging to see why. It looks like it is just repeating two halves of the first ‘frame’ over and over again. If they were to be considered A and B;
Frame 1 - A
Frame 2 - B
Frame 3 - A
Frame 4 - B
. . .
Last Frame - C

Here is the resulting wavetable

This is awesome! However, now I have to ask, how would I go about creating a python script that will loop through all files in a directory and apply the metadata script to them? I believe that I will have to make use of os and os.path modules.

Hey @sunsnail, thanks for the pointers to the documentation. That’s a little bit whack how they’ve implemented wavetables, but good to see that you’re able to run their Python scripts!

Scripting was going to be my suggestion for how to best do this. I can create a script that can process an entire folder hierarchy of files, converting them to Surge’s funky format. (Might not be today as I’ll be wrestling with a Thanksgiving turkey, but soon! :stuck_out_tongue_winking_eye:)

1 Like

No worries at all! Wrestle away. Mine is in the smoker currently and hopefully doing all the good cooking on its own!

I’ll do some more digging and see what might be a good and repeatable method.

Enjoy your dinner!

1 Like