Expanse – Creating Wavetables

wavetables

Any Old Sample

Using the browser, you can load wavetables into Expanse’s oscillators. You are not limited to the wavetables provided by Blamsoft. An easy place to start with wavetables in Expanse is just to load any samples you have lying around, or anything from Reason’s factory sound bank. Or use the sampling button to sample your voice or a guitar. Expanse will always do something with the audio data. Experiment!

Import Setting
You can use the import setting (in the lower right-hand corner) to smooth out the wavetable by choosing a Crossfade or Spectral Morph with fewer than all of the frames. Crossfade is a smooth transition in the time domain, Spectral Morph results in a smooth transition of frequency domain components, or Off provides no transitions and uses all of the frames.

Serum-compatible Wavetables

Wavetables in a Serum-compatible format can be directly loaded into Expanse. You can also make your own Serum-compatible wavetables using Serum or other audio software, or programming environments that offer wav file output. The format is as follows.
– 2048 samples per single-cycle
– Maximum of 256 frames (positions), less than 256 frames will be morphed or crossfaded according to the import setting.
– For example, a 256 frame wavetable has exactly 524288 samples. If you use a powerful audio editor, such as Audacity, you can see the exact number of samples in the file.

Extracted Wavetable – Thor

Sampling an Oscillator
In addition to Serum-compatible wavetables, you can also sample an oscillator to create a wavetable. Expanse processes an audio sample and extracts the periodic waveforms present in the file. For Expanse to do this well, there are some things you can do to help. In this tutorial we will walk through an example of sampling Thor.

Setup the oscillator
We need a long steady tone from the oscillator. That means removing the effect of envelopes. Filtering can have an unexpected result when sampling an oscillator. It is best to listen to the oscillator at the pitch it will be sampled (covered below). In this example, we will not use filtering. In this Thor, we start with Reset Device. Then we are using the wavetable oscillator, the amp envelope provides a steady sustain, and filters are bypassed. This results in a raw sound of the oscillator.

wavetables_2

Create the note data
Create a long note on the Thor track. Low notes are best. These are the ideal notes based on Reason’s sample rate.
44100 – F0 – MIDI Note 17
48000 – Gb/F#0 – MIDI Note 18
88200 – F1 – MIDI Note 29
96000 – Gb/F#1 – MIDI Note 30
176400 – F2 – MIDI Note 41
192000 – Gb/F#2 – MIDI Note 42
Make the clip several seconds long, it is recommended to use at least 10 seconds.

In this example, we use F0 for 8 bars at 120 bpm, that is a 16 second long clip.

wavetables_3

Use automation to vary the waveform
To extract Thor’s wavetable, we need to sweep through the wavetable settings. Right-click on the wavetable position knob choose “Edit Automation”. Create an automation clip that goes from zero to max on the wavetable position during the note. To capture the last setting, it may be necessary to end the automation sweep slightly before the end of the clip.

wavetables_4

Bounce to a clip
Right-click on the note clip and choose “Bounce in place” to create an audio clip.

wavetables_5

Bounce to a sample
Right-click on the new audio clip and choose “Bounce clips to new samples” to create a sample that can be loaded into Expanse.

wavetables_6

Load the sample into Expanse
Create an Expanse synth and load the sample into an oscillator. That’s it! Now you have a custom extracted wavetable. You can use the sample editor to adjust the starting and ending points in the sample clip.

wavetables_7

Extracted Wavetable – Subtractor

In this section, we will create a wavetable that is a spectral morph of a few Subtractor waveforms.

Setup the oscillator
This time we will use Subtractor. Again we need a long steady tone from the oscillator, use the note recommended above. From the Reset Device patch, increase the filter frequency to max and the amp envelope sustain to max as well. This results in a raw sound of the oscillator.

wavetables_8

Use automation to vary the waveform
This time we will step through four waveforms. Right-click on the wavetable display choose “Edit Automation”. Create an automation clip that has four wave settings evenly spaced in the clip.

wavetables_9

Bounce and Load
Bounce the sample and load it into Expanse exactly as was done with the Thor sample. The last step is to choose Spectral Morph – 4 Frames as the import method. That will result in the four different waveforms being chosen as frames to morph.

wavetables_10

Python Script

ReasonTalk member Stephen Pinton has graciously shared his Python code for creating a wavetable from a script. The full details are beyond the scope of this tutorial, but this code should give you a good start.

#!/usr/bin/python

import wave
import struct
import math

frame_count = 256
frame_size = 2048
file_name = "wave_table.wav"

wav_file = wave.open(file_name, 'w')
wav_file.setparams((1, 2, 44100, frame_count, 'none', 'not compressed'))

values = ""

for i in xrange(frame_count):
    for j in xrange(frame_size):

        value = math.sin((float(j)/frame_size) * (i+128)/256 * 2 * math.pi)

        if value < 0.0:
            value = 0.0
        if value > 1.0:
            value = 1.0
        
        value *= 65535  
        value -= 32768

        values += struct.pack('h', value)

wav_file.writeframes(values)
wav_file.close()

print "Created " + file_name

 
That’s all there is to it. Have fun creating your own wavetables!

8 thoughts on “Expanse – Creating Wavetables

  1. Hi Guys,
    I’m loving all these new features with Expanse, so much so that I’m going to purchase Reason 9 (with the update to 9.2) just so I can use this incredible looking synth.
    I noticed that lower frequency samples ( such as F0 ) are better for Expanse to read/scan, but how would it handle higher frequency samples such as vocal/voice samples?
    I have some great ideas for sound designing with this beast of a synth, I can’t wait to get it!
    Thanks for your time,
    Kris A

    1. Lower frequency samples are much more likely to get the exact waveform. You might still have luck with higher frequency samples. You will at least get something, maybe it will be useful in combination with the Spectral Morph settings.

  2. Just bought Expanse, and experimented with vowel samples created in reason. Using a key reset LFO to play the wavetable “start to end”, sampler style, I had great success with some files, but not with others.

    Question 1: The successful ones, could it be because they by pure chance were multiples of 2048 samples in length? Or was it purely because of file content/data? Computer crashed, so couldn’t export and analyse files in Sound Forge.

    Question 2: Going forward with custom wavetable creation in Sound Forge, am I correct in assuming that a good/successful wavetable is a multiple of 2048? Or should the be the full 256*2048? At 44.1 kHz, that’s a rather long sample, I’d even say excessive for most cases.

    I’d love to have a discussion with Daniel about creating wavetables. Is this a good place for it?

    1. It is unlikely that you had a sample length that was a multiple of 2048. The import algorithm works best on low sounds that are constant in pitch, near the pitches listed.

      To make your own wavetable, it can be any multiple of 2048, but if it is not a multiple it will be processed and not be exactly what you created. If you email info@blamsoft.com I can put you in touch with Daniel.

      1. Wow, thank you for the quick reply! That’s the thing, it worked even without the import algorithm! Will try to reproduce today.

        You have a great, great synth here! A really “mature” product.
        Congrats on a job well done!

        I’ll just post in the Reasontalk thread from now on. 🙂

  3. One could nudge closer to optimum by tweaking the cents, I suppose?
    For 44100/2048 ≈ 21.5332Hz use F0 – 23c ≈ 21.5387Hz
    For 48000/2048 = 23.4375Hz use F#0 + 23c ≈ 23.4339Hz
    That should give an error of about half a sample. Would some Reason instrument support sub-cents, -23.44c and +23.26c gets closer yet. To double the sample rate, go exactly one octave up. Keep the cents.

    1. Good point. Expanse makes it so you don’t have to worry as much because of its pitch detection and resampling.

Leave a Reply to blamsoft Cancel reply

Your email address will not be published. Required fields are marked *