Wavefinder - Generate wavetables with Tonverk ONLY

The purpose of this topic is to find the best ways to generate wavetables from Tonverk standalone. Please don’t post links of numerous generators or free wavetables. Music math nerds warning !

The main idea is to record quantized audio in a pattern AS A GRID that matches default Wavefinder specs :
64 slices, 2048 samples wavetable length.

2048 samples correspond to 23.4375 Hz. So for tests I made this 48KHZ 32BIT sine wave at required frequency :

Pattern Tempo : 87.9 BPM, which is just above theoretical BPM : 87.890625…

On first video I used a SINGLE PLAYER to play the sine wave and added an LFO on FOLDER.

RECORDER : 1 bar recording, R.START = Play

WAVEFINFER : choose recorded sample in USER/RECORDINGS

Let me know what is confused, missing, wrong, and please post your experiments !

I chose 2048 file to avoid renaming. Wavefinder can load 2048 x 64 waves by default, or any sample (I don’t know how it is truncated, what is the limit). It is possible to rename wavetables having different lengths (64, 128, 256, 512, 1024, 2048, 4096 samples).

From ELEKTRON :

WAVETABLE

The Wavetable machine gives you two independent wavetable oscillators that can be blended and modulated individually. SRC Page 1 controls Oscillator 1, and Page 2 controls Oscillator 2. Press [SRC] to access these parameter pages.


SRC Page 1

TUNE

Sets the pitch of Oscillator 1.
The control works in a bipolar range, where a value of 0 leaves the pitch unchanged.


LEV

Sets the output level of Oscillator 1 and Oscillator 2.


POS

Sets the wavetable slice position for Oscillator 1/2.

When moving through the wavetable using the POS parameter, transitions between slices are interpolated, meaning the sound is smoothly blended from one slice to the next.


SLOT

The wavetable slot is used to browse and assign wavetables to the oscillator.

Each project can load up to 63 wavetables into RAM. A wavetable must first be loaded from the SD card to the project before it can be assigned to a track.

To load a wavetable:

  1. Turn DATA ENTRY knob D and select an empty slot.
  2. Press [YES] to open the wavetable browser and view the contents of the SD card.
  3. Use the [ARROW] keys to navigate:
  • [UP]/[DOWN] scroll through folders and files
  • [RIGHT] opens the highlighted folder
  • [LEFT] moves up one level in the folder structure
  1. Use the [KEYBOARD] to preview the highlighted wavetable. The DATA ENTRY knobs can still be used to adjust parameters while browsing.
  2. Press [YES] to load the selected wavetable into the chosen slot.

To select a previously loaded wavetable, turn DATA ENTRY knob D or use [UP]/[DOWN] to navigate to the wavetable and press [YES].

Press [FUNC] + [YES] while a wavetable is highlighted to open the browser at the location where the file is stored.

Wavetables can also be loaded via the Sample Browser.

The SLOT parameter can be parameter-locked to change the wavetable on individual steps of the sequencer.


SPD

Controls the length or speed of the waveform movement defined by the ANIM modulation shape.

For looping shapes, the parameter is tempo-synchronized, and SPD snaps to musical beat divisions.


A.LEV

Sets the modulation depth applied to the LEV parameter by the internal modulator.


A.POS

Sets the modulation depth applied to the POS parameter.

At a value of 0, no modulation is applied and the oscillator plays only the wave selected by POS.

Positive values add modulation to the POS control, while negative values subtract modulation.


ANIM

Selects an internal modulation shape that affects the position (POS) and level (LEV) of the oscillator.

These shapes function like a collection of envelope and LFO-style modulation sources, creating different types of movement and character in the sound.

Available shapes:

  • Exp Down (one-shot)
  • Ramp Down (one-shot)
  • Tri (one-shot)
  • Ramp Up (one-shot)
  • Exp Up (one-shot)
  • Ramp Down (looping)
  • Tri (looping)
  • Square (looping)
  • Ramp Up (looping)
  • Random
  • Sample and Hold
  • Wavetable 1/2 (looping)

SRC Page 2

SRC Page 2 controls Oscillator 2.

Most parameters function the same as on SRC Page 1, but affect Oscillator 2 instead.


DETUNE

Sets how much Oscillator 2 is detuned relative to Oscillator 1.


LEV

Has the same functionality as the parameter with the same name on SRC Page 1.


POS

Has the same functionality as the parameter with the same name on SRC Page 1.


SLOT

Has the same functionality as the parameter with the same name on SRC Page 1.


SPD

Has the same functionality as the parameter with the same name on SRC Page 1.


A.LEV

Has the same functionality as the parameter with the same name on SRC Page 1.


A.POS

Has the same functionality as the parameter with the same name on SRC Page 1.


ANIM

Has the same functionality as the parameter with the same name on SRC Page 1.


Additional Notes:

  • Each wavetable preferably should contain no more than 64 slices. If there are more slices than 64, like 128, it picks every second slice.
  • The wavetables can have different lengths (128, 256, 512, 1024, 2048 samples).
  • If the wavetable length is anything else than 2048, the length should be specified in the file name by appending _wt” For example a wavetable with 1024 samples could be called: my-cool-wavetable_wt1024.wav, or a wavetable with 128 samples could be called: my-crappy-wavetable_wt128.wav.
  • For raw (non-interpolated) upsampling, append “R” to the file name (for example wavetable_wt1024R.wav).
24 Likes

A few questions, as I’m clearly not as proficient as you in making wavetables.

  1. How did you determine sample length on the Tonverk alone? I am assuming it’s a mathematical relationship between the BPM and frequency, but please elaborate.

*edit: 2048 / 23.4375 = 87.3813333333, which is so close as to make me wonder if my thinking here is correct, but wrong enough that I’m… left confused a bit.

  1. What was your thinking in selecting the BPM? (implied above, but wanted to be explicit).

  2. The Tonverk’s inputs aren’t ac coupled? Technically 23.4375 hz isn’t subaudible, not for most people I guess, but it’s getting close to what I assumed Elektron would have filtered out. Do we know what the roll off is if they are ac coupled?

Thanks.

From Elektron samples and specs.

64 x 2048 samples slices.
At 48 Khz, one slice duration is :
2048 / 48000 = 0,0426666667s

Slice frequency :
1 / (2048 / 48000) = 23,4375 Hz

Multiply this frequency by 60 to get a bpm, divide by 16 to get 4 beats (16 slices per beat).

23.4375 x 60 / 16 = 87,890625 BPM. (87.9)

This way we get 16 steps for 64 slices. In order to be able to have a plock per slice we can use 64 steps by doubling tempo and scale :

175.8 bpm, Scale X2, record 2 bars.

5 Likes

That is related to wavetable specs.
I don’t know the theory, I made it empirically with some math and it works. Tempo isn’t perfect, but resampling my original sine wavetable is played without major artefacts.

Wavefinder uses 1024 samples per slices internally, but without renaming, wavetables are considered as 2048 samples.

Ok, cool…

Just to be clear here, I was mostly remarking on you being able to sample what almost amounted to an LFO into the box. Most professional inputs will filter out low frequency signals as they’re seen as dc-offset defects (and can hurt speakers). As a modular guy I’m constantly hunting for inputs that aren’t ac coupled to allow the recording / playback of LFOs and other dc-offset like things (envs, etc).

No problem in practice : wavetable frequency is low but it is logically made to be played higher than lower. Better than the opposite (high frequency played lower).

Hmm … I’ll have to try a few of these ideas on the DT2

Not sure about “non-interpolated” in this context. Is it

  • telling the TV about whats in the file ? (e.g. less than 64 steps ?)
  • telling the TV what to do with the file once loaded (don’t interpolate)

?

I tested with 64/128 samples length wavetables with RAW UPSAMPLING. Nice crunchy results…

More informations from Matthias (Elektron) :

"The size of the wavetable determines how many overtones you have. Early wavetable synthesizers used very short tables to save on memory, but they also had extremely crappy ways of reading them out that introduced a lot of artifacts. When we tested those wavetables on wavefinder, which reads out the wavetable in a near perfect way, you only hear the overtones that are actually present in the wavetable and it sounds pretty dull. So I added this mode which simulates the crappy readout which adds all the tasty crunch you hear from vintage wavetable players.

It only makes sense to use with small wavetables, but with those you get a nice lofi texture.

I would recommend add that r (or raw) to the suffix if you have some very short wavetables. Its very nice on anything that is for example 128 samples long.

The differences are most pronounced when you play low notes."

3 Likes

Recorded that drum loop with a TV drum kit, following OG post rules…
(1 bar at 87.9 or 175.8 bpm)

13 Likes

13 Likes

Thank you for sharing these mini tutorials! Super useful

2 Likes

At the risk of sounding daft, I’m not following how to replicate this. You say that drum loop, but I’m unsure what you’re referencing.

I get the next bit is a a reference to the original post, but I’m not following what aspects of the original post would be relevant since the start of the post deals with a sine of a specific frequency to make the math work, and then leads into a generalized tutorial / overview of the wavefinder.

Honestly, all the generalized commentary about the wavefinder and its parameters, how to load them, how many wavetables can be loaded at a time (etc)… all of this distracts from what should be the core of the post (simple steps to create a wavetable, irrespective of then loading it into wavefinder or manipulating it).

p.s. I’d recommend writing something for the description of that Youtube video, even if it’s just a link back to this thread. It really does sound great.

*Edit: To say this all again more simply – Are you simple recording a 1 bar loop of subtrack produced drums, and then loading it into wavefinder, or is there a more exacting process being applied here?

Is the BPM the only thing to stay mindful of when recording this internal drum loop?

From your prior statement:

Given the sample rate will always be 48khz, and we’re aiming for 2048 samples slices irrespective of the source material (for ease of file name conventions), most of the math above will be invariant from sample to sample, so this tutorial essentially bakes down to “record a bar loop at 87.9 bpm, and then load into wavefinder” right?

(or some mathematicall related quantity, like the 175.8 bpm alternative listed at the end).

1 Like

First audio you hear in the video…
The sample I load in Wavefinder is a loop I made with a Subtrack machine, using 87.9 BPM I mentioned in OG post.

Most important is tempo and recording length.

The 64x2048 sine wave I use is a reference. If you resample it at 87.9 bpm, 1 bar, wavetable is still a sine.
If you change it to a weird pitch, tempo or recording length, it doesn’t match the default 2048 wavetable length grid.

That said you can load any sample and have nice results. If you want to match wavetable slices grid, there are some rules to respect. Of course you can multiply or divide tempo or frequency by power of 2 values…

2 Likes

Gotcha.

The bit I requoted from you at the end of my last post (perhaps edited in after you started your last reply) should have formed the foundation of the first post. That math, though invariant and unnecessary to know in order to achieve the end, illustrates your thinking wonderfully. Reminds me of a lot of the tempo related math I needed to employ when working in PD and Max/MSP.

Anyhoo, thanks for confirming it’s mostly the resulting tempo and pattern length that is meaningful here. Will have to play around.

1 Like

:+1: I found the sine wave interesting for tests, because you immediately hear if something is wrong with settings. For instance, using Chrono Pitch fx induce a delay, and an offset in the wavetable.

Lfo on pitch (even synced) can mess with wavetable match…

Another approach is to use a bus with trigs on each step, scale x2 and 175.8 bpm. Use envelope attack / decay. Feed it with any sound…or use an lfo on amp vol…

2 Likes

@sezare56

Good day tv wt guru,
have a question for u.

Say i have sin and a tri wave, is there a way to make a wt which will be able to go directly from a sin to tri? Without any morphing…

Asking cause I wondered, wt “picker” with 64 classic single cycles for use as mono/poly synth.

2 Likes

@sezare56 I don’t have a TV but just wanted to send some love your way. You continue to push these boxes to their limits. Thank you for all your hard work and creativity

6 Likes

I don’t think it is possible.
I made a test with only 2 wavetable slices. There is a morphing.

Could be a feature request to snap to the different slices without morphing using Func + Encoder or Encoder push…

But values would be weird with 120 for 64 slices…64 slices is apparently the maximum…

1 Like

Yes 64, seems like there are 4 slices of transform… Would be a trip to plock the slice value haha!

1 Like