Wavetable - How to create1 cycle wavetable tutorial w. examples


#1

Hey guys :smile:

I just flicked together this tutorial on how to create one cycle waveforms for Axoloti. You can use it instead on an oscillator and gives some new options. Anyway here goes:

Pic of patch:

Video of the Audacity part:

0. Tutorial on how to make 1 cycle waveforms for Axoloti

To start with this I would like to mention that this can de done in many ways and this is just one example, but I found it to work and the wavetables created in this way, seems to be in perfect tune with Axolotis own oscillators.

Using one cycle wavetable is a very sufficient way of adding character to Axoloti, without using up too much Sdram. In this tutorial I will use 1024 samples length for the waveforms. I will try to keep it simple, but keep in mind that most of the steps can be done in different ways to suit different needs.

Also I want to mention that Axoloti usually uses 16 bit signed 48khz bit audiofiles that you then convert into .raw files, but for wavetables you can also use 44.1khz. But IMO it is simpler just keep all audio at one rate, 48khz. Then there is no confusion :wink: Also for wavetable mono is preferred.

Ill explain each step as we go. Let’s get to it :smile:

1. How to create a one cycle waveform in Audacity(video):

First step would be to create some waveforms. I use Audacity in this example, cause it’s free. It doesn’t offer that many different waveforms, but this is just to show the technique. The same can be done in other audio editing apps, with more choices, for example Sound Forge.

A. Get Audacity & open Audacity
B. Set project rate to 48khz
C. Go to generate menu and select “Tone”(to create a waveform)
D. Set these parameters and press ok:

Waveform : Saw, in this example(choose what you like)
Frequency : 48hz
Amplitude : 1
Duration : 1000 samples

Now we have exactly one cycle of the waveform and now we need to stretch it so it fits exactly to Axolotis tables.

E. Go to effect menu and choose “change speed” plug in. Set 1024 samples in “New length”. Press ok.
F. Change bit size to 16-bit signed from 32 bit float.
G. Export the wave file to .raw format in file menu “export audio”. Use these settings:
Format : Other uncompressed files
In Options set:
Header :RAW (header-less)
Encoding : Signed 16 bit PCM

Press ok.

Now you have a one cycle waveform. Next step is getting it into Axoloti.

2. Importing the waveform into Axoloti.

A. Enter card reader mode and copy the folder called “Wt” included in the tutorial folder onto Axoloti Sd card.

B. Open the Axoloti patch included and simply copy the names I have put in comments into the string/c object(for easy access). When changing waveforms, be aware that Axoloti sometimes have to go live a few times before it gets that it is a new file loaded. Also try disconnecting the board if this happens.

I have included a sine and a saw waveform created in Audacity with above method, but I encourage you to create your own. It’s fun and very rewarding :smile: If you have a bunch of synth lying around, record the oscillators and use them in Axoloti. It brings a lot of character to Axoloti. You can test if the tuning os ok, byt pushing the test Axo button. Then it switches to Axoloti oscillator.

Link to patch and waveforms:
https://mega.nz/#!TdBm3ZBS!71T-sOMnLNXhARQT4SZfaRGsB3NdI_zQYZfhKghuEus

There might be errors inthe set up, but this is as far as I have come with Wavetables.. If anyknow find mistakes pleae let me know or have updates. But I think it is pretty useful as it is now. I have used it a lot already :smile:

## HAVE FUN :smile:


The Xylobox Wavetable Synthesizer (hardware + patches)
Which is the best way to use one cycle waveforms as oscillators on a patch?
Lexicon and self-education
#2

Wicked, thanks! Have been looking for a good starting place for a wavetable patch. Will give this a go with my setup tomorrow. :smile:


#3

Let me know fo you have any issues.... I am planning to make another tutorial on now to make wavetables with many waves :smile:


#4

Very instructive, thanks a lot! I've even managed to build a wavetable with 4 wavecycles of 1024 samples with Audacity. With the mix/mix2 object I can set the length of what has to be read. So set that at 16 (= 25%) for a 4 cycle tabel with length of 4096. With the position-dial I can point to any of the 4 waves. So set that to either 0, 16, 32 or 48.
So although it works, I don't completely understand how it works. Left bottom, the objects for wavetable position (why does it have to go through the /divremc and the /nointerp ?). And the part that resets the wavetable doesn't seem to do anything in my case.
I am now going to try wavetables form this source and see what comes out! I also found a free wavetable creator for Blofeld that exports tables as wav-files, here.
edit: From that Stromeko-site I got wavetables (from Doepfer, Prophet, look under synths/downloads). Transformed them to .wav files in the Blofeld-wt-creator, and used Audacity to make 16bit 48kHz RAW files. Works perfect in the Axo. You can step throught the 64 sounds with the position-dial.


#5

As i mentioned in a comment that knob is only used when loading wavetables with MORE than one wave. So not really neede fot his setup really.

It also says "as far as i know" still need to test it thoroughly. I know how to test it now, just have to find time for it :smile: If the knob does something it is very subtile and will only be heard when playing a note.

Using WaveCreator editor is super fine. I used that a lot all ready. I made another thread regarding wavetables, which also has got a lot of details on programs etc. I just thought Id make this tutorial in a new thread. Was planning to make one for wavetable with more than one wave later

Those file from Waldorf page could maybe be used. But you would have to convert them with a program, cause axoloti doesnt accept midifiles or sysex files.. and export them as wav and them import them into axo :smile:


#6

Just got around to testing the reset function. You can delete it, it does not do anything. THe wavetable is reset everytime it is retriggered by default. I think the problem I had actually is related to the envelopes not being able to be reset everytime. Like a monophonic envelope that is retriggered everytime. Axolotis envelopes behaves a little bit differently.


#7

Thank you. Cant wait to be back at home.


#8

Thanks for this, very useful.
I've been testing a load of one cycle samples collected by Adventure Kid : 4300 one cycle waveforms .
I needed to convert them to 48kHz, 1024 samples long and RAW, but once done, it can add some great oscillators to the Axoloti capacities.


#9

some of those waveforms are nice

surely there must be a command line app that can do this conversion, would be great to just point it to a directory for it to do them all.


#10

I tried like mad using audacity, but couldn't do it done in one batch script, ended up by doing it by hand (after deleting 4300 times a lot of files in the wrong format)


#11

Why use batch script(except if you want to converted a lot at the same time, but that is not advisable since wavetable vary a lot in size.. some are 356 samples, some are 1234, some are other sizes, so they dont need to be stretched same amount). In audacity there is a function called change speed that lets you set the exact sample length in samples. BUt yeah, it take a little bit of " hard" work to get started to get a library going.....

@mtyas

If you want to dig into wavetables I'd suggest to also check Serum VST/AU. Very capable of making wavetables, both 1 and multicycles..... Serum export 1cycle WTs in wav and 2048 samples long.. SO you ONLY have to drag them into audacity and convert them to .raw... file size is perfectl al ready..

Serum video:


#12

Just have in mind that wavetables are NOT all 32, 64, 128 waves.. some have weird sized, in context to Axoloti.... And with the multi cycle wavetables sizes and wave numbers are VERY important.. if you try to stretch a 142 wavetable with a sample size of 2631333 samples you CANNOT stretch it to axolotis tabel sizes and expect it to be click free... There will be a lot of clickin, cause the indexing will not de right

WHat I do is import them into Serum first and check how many waves they actually have(most wavetables from the web does not gives this info, yuo have to find out yourself).. ANd for example if the wavetable is 140 waves.... you just cut away down to 128 waves.. and export it. and since Serum converts it automacitally to riggh sizes, this is the best way to go, imo....

So one cycles are pretty easy.. but take care with the multi wavetables. Batch processing i dont think wil be succesfull, cause you have to get hands on with each indivudually file anyway to get sizes wave nr, etc...


#13

@jaffasplaffa, yup I recognise this, but I was talking specifically about the adventure kid samples, which are all identical in size/sample rate etc but there are a huge number of them :smile:

@mytas why did you convert them to 1024 in length, are you just standardising on the size?
since the playback mechanism can be adapted to any size.

(hmmm, we should actually make the table load return the file read size as an outlet, to allow it to be dynamic)


#14

ahh ok.. Sorry :smile:

Going to look into those too then.

Is the idea to be able to adjust table size while "live"? Maybe with a ctrl/i object?


#15

I didn't know about adapting the playback mechanism to any size, that is why I was trying to stretch all to 1024.
I like your idea about the futur dynamic aspect of it.

Do you think some day it will be able to read wav files (kind of skip the header function), it could save some time and complications for new users

Otherwise, it seems that the files I downloaded from Adventure Kid were sometimes in 44kHz and sometimes 48kHz, unless some of my batch converting messed everything up.
Actually doing it by hand and picking out the ones you want using these previews makes more sense for myself. I can get to know my waves :smile:


#16

ANyway you can already set the table siezes dynamically......

Just set denominator for 2 instead of 1. And change the tablesize to 2048.. Then you can play 1024 samples WT in a 2048 samples table.... Use the position to test it:

  1. First test the position with table of 1024 sample size and denominator to 1 and and scan through the 1cycle with the position. with 1024 samplesize wave of course.

  2. Then change the tablesize to 2048 and denominator to 2 and scan though it again with the position.. These two setting sounds EXACTLY identilcal......

But yeah, regarding the Adventure kid samples. I had them already... and they are not all same sample sizes. some are 1024, some are 2048 some are 4096, etc.... So batch converting is still not the best idea for this.. Like Mtyas mention it is better to do it by hand, cause there are many variables that can go wrong, which wil jst leave them useless.

For example a lot of the Serum wavetables you find are morphed wavetables so they actually consist of only very few waves,, like 4-6 waves. These I dont know how to import to Axoloti yet..


#17

from his website

Really, perhaps we are talking about different ones...
Im looking at the AKWF set, these have a a readme which says they are all 600 samples long, and and all Ive looked at are 44.1/16 bit.

perhaps your looking at a different version?
anyway no matter, it was just a passing comment anyway.

I discussed this with Johannes the other day, as I thought it would be 'relatively straightforward',
and his answer was very interesting...
the reason he hadn't done this so far, is due to block sizes on the SD cards, essentially the wave headers offset the real wave data, such that streaming it would be less efficient.

so what we thought was:
a) perhaps have this 'inefficiency' but warning, that raw files are better... the issue with this, is no matter how many times you remind people, they will use wav files as its the easy way :smile:

b) conversion... this is the better way, but more work, provide some kind of conversion mechanism such that when you transfer the files they are converted from wav to raw. this makes more sense since potentially we can then expand the conversion formats (or resampling), and also means its done once, with the powerful cpu of the computer rather than the limited resources of the STM32F4.
this is probably also in line with thinking on package management etc.


#18

ah yes.. Maybe the ones I had was different format :smile: And not sure I actually got them form his site. Myabe some one else already did some conversion on them.. Gonna check it...


#19

Oh, forgot to explain a bit here. The divremc c makes it play only 1 cycle at a time. The 1 cycle length is set by the phasor oscs frequency.

The no interp make sure the position knob only controls position and not the pitch.. the pitch is controlled by the phasor osc... So it is basicly to seperate pitch and position control :smile:

Hope that helps :smile:


#20

Finally finished up my new enclosure and had a go at the wavetable stuff tonight. Seems to work well! I'm still downloading the 1.0.6 patcher (github seems to be throttled on my ISP?) so I have to use the old file browser to add the files for now. :expressionless:

However the bulk import/export functions in audacity seem to be working well for the adventurekid waveforms so far. Importing/exporting 10 at a time is a breeze, so should be able to finish up a batch quickly. I may be truncating the files on playback, but they sound good to me – will have to test accuracy against some other WT player (maybe in max msp?). My enclosure has a 2-digit seven segment display so I'll try to winnow it down to 100 of my favorites and then be able to scroll through them on the synth.

Also interested in the "morph" functions I've seen on Serum and Massive (don't have either myself), I wonder if it'd be possible to build a feature like that into a synth patch. If it's a simple x-fade, it might be as easy as having 2 selectable waveforms and a fade control. Would be great to hook up to an envelope I suspect.

Any thoughts on wavetable synths I should check out for design ideas? Have been meaning to snag the demo of NI massive anyway, but I'm a complete n00b to the wavetable game, so all recommendations are welcome!