Waveform and Spectrum visualization

Hi everybody,

wrote some code to visualize the Super6 Waveform format and it’s spectrum.

Here are the overview results for the buildtin waveforms.

Next i’ll prepare a function to convert and filter custom WAV files …
The functionality to decode the patch file format is currently “work in progress”, so stay tuned. ;^)

5 Likes

This is great! I had thought of doing this but you nailed it. Definitely keeping an eye here for the waveform builder

Here are the alternate waveforms.


1 Like

For each waveform there is also availabe a more detailed view:

For explanation:
The first diagram is the waveform itself in the “time” domain in fully linear view, in the overview each 8th sample used, in the detail view each second (without any interpolation). The red horizontal line is the average value of the waveform and is only displayed if not zero, means that this waveform has some kind of DC content.

The second diagram is the spectrum view computed by Discrete Fourier Transform of multiple copies of that waveform, using only the absolute values (ignoring phase). The gaps between the value lines are technically correct because a waveform can (by definition) only contain integral multiples of its base frequency and nothing in between. The top left red line is again the DC content, the next line is the base frequency, followed by lines for each integral multiple.
The X axis is in linear scale with divider lines at each octave, marked with the number of octaves above the base frequency… and everybody who know how to calculate octaves immediately understands that this must end at octave 9 if there was a cutoff at 512 times the base.
The Y axis is in a square root scale (to amplify lower levels) but with linear divider lines to split this in 8 segments.
In the overview the spectrum diagram ends at 9th octave, in detail view it goes till 10th so one can check if the cutoff filtering was done good enough (and obviously it was).

Good news: It’s allmost done!
Uploading a WAV file to the software works, the code automatically analyzes the WAV by autocorrelation to find repeating waveforms and suggests a list of best fitting sample lengths.

Here an example how that looks after i uploaded a sample of a church organ patch of another instrument that i sampled at 96000 samples per second.

After selecting one of the waves (by pressing the Convert button), this is converted (streched or shriked) to a single cycle waveform of 4096 samples (currently using linear interpolation).
The only open task is the lowpass filtering…
For that i want to invest some more brain, just to try/offer different options

  • the hard and rigid cutoff (like we see it in the factory waveforms)
  • alternative softer filter slopes that prevent the well known filter pre- and post-ringing at steep flanks
3 Likes

very nice, was thinking of starting to write some python script but you are many steps ahead. well done!
will you share this as open source code eventually ?

Excellent ! :clap: I imagine vocoders wav…

Vocoders yes, why not but given the formant nature of vocoders I don’t know if it would transpose well ?

Good news of today: Cutoff filtering went easier than expected.
Just loaded the *_ChurchOrgan.ws6 to my Super6 and felt a little pervy by playing Bach on that synth. :clown_face:
The only limit was: That simple delay does no realistic Church reverb & delay simulation. :nerd_face:

It would transpose not at all! Vocoding is a feature done by formant filters and has not much to do with waveforms.

No chance! Without the usage of proprietary libraries this wouldn’t have gone that fast.
It’s implemented as a web service so i could eventually make the software available online for dedicated users.
I’ll think about that if it’s running stable.

1 Like

I use CXM1978 (certain setting, can’t remember from memory, gives an extra vibe / Timbre touch to the sound) into UAD Lexicon 480L (I think large cathedral setting). This gives the S6 an immense wide attractive natural sound.
I really want to get 2 BBD pedals to put before the reverb pedal.

Thank you for your deep dive into the S6 Code. When I’m at the S6 I will send you the patches that give me scratches :slight_smile:

“It’s implemented as a web service so i could eventually make the software available online for dedicated users”

Oh yes please !! Can completely understand you would rather not share all dependencies from your library. Just out of interest what is the coding language you are using ? I use Python a lot and with classic scientific libraries such as numpy and scipy there is a great deal you can achieve in these tasks.

a pc application that would be great !

Let’s open a new topic on that:
“The ultimate after-effect device for your Super6” :+1: :wink:

It’s pure Java… but there ist nothing special about Java except that i prefere this language now for 20 years and have a well sorted bunch of libraries and a web application framework to reuse for this.
One positive side effect: Nearly no plattform dependencies (except for stuff like identifying the Super6 USB drive mount point).

1 Like

And the show goes on! :partying_face:

Enhanced the WAV importer by

1. Additive Synthesis Waveform builder

The yellow lines are typical hammond drawbar harmonics, the others are more church organ registers.
Each harmonic can be any of the given waveforms (making even more overtones) and can be shiftet in phase individually.

2. Step Sequence Waveform builder

Can make a waveform out of up to 64 steps.
Here you see the result of a modified Lowpass with a 3 octave linear ramp down characteristic.
The slopes are a little less steeply, but have nearly no pre- and post-ringing / overshoot.
The one octave ramp ist just a compromise.
The “none” button is just there for testing, didn’t try what happens if i would feed the Super6 with that.

This example waveform i allready uploaded to the LFO1 of my Super6 and used it to modulate the VCF…
… gives a rhythmic VCF arpeggio … the ears of my girlfriend are bleeding. :joy: