Approximating real-world timbres in the Vibro Wavetable Synthesizer Rack Extension

Have an urge to learn, or a calling to teach? Want to share some useful Youtube videos? Do it here!
Post Reply
User avatar
hamzter
RE Developer
Posts: 580
Joined: 14 Apr 2016

21 Jul 2016

(This is tutorial is specific for the Vibro Wavetable Synthesizer, https://shop.propellerheads.se/product/ ... nthesizer/)


Hi!

In this short tutorial, I will try to explain how some of Vibro's bell-like patches (such as the "Big Ben" patch or the two "Prayer Bowl" patches) were constructed by analysing real-world recordings.

Vibro's custom wave editor allows you to sculpt a sound by adding together sine waves. In Vibro, these sine waves are referred to as "harmonic partials", which is another way of saying that their frequencies are integer multiples of the root note (that is, the MIDI note you are playing). Now, most sounds where you can hear a clear tone usually contains a number of prominent “spikes” in their frequency spectrum. And for many pitched sounds, these spikes are at integer multiples of some root frequency (or at least reasonably close). If we know the frequency and amplitude of these spikes, we can create someting in Vibro's custom wave editor that sounds similar.

For example, here is an image of an audio spectrum (which I found by Googling) with six prominent peaks between 0 and 5 kHz:

Image

So let’s say that we have a mono recording of a bell. If we open that recording in an audio editor like Audacity (which can be downloaded for free from http://www.audacityteam.org), we can select a short section of the recording where the pitch and timbre is stable and use Audacity's frequency analysis window to examine the frequency spectrum. If the sound is relatively free of noise, there should be a number of obvious spikes in the spectrum.

Let's assume that the first six spikes we see are at about 215 Hz, 388 Hz, 517 Hz, 732 Hz, 904 Hz, and 1120 Hz. If we take the lowest spike to be the root pitch of the sound, we can divide the frequency of each spike by that root pitch:

215 / 215 = 1.0
388 / 215 = 1.8
517 / 215 = 2.4
732 / 215 = 3.4
904 / 215 = 4.2
1120 / 215 = 5.2

In other words, we would like to set a non-zero amplitude for partials 1.0, 1.8, 2.4, 3.4, 4.2, and 5.2 in Vibro's custom wave editor. Unfortunately, we can’t do that since all partial numbers in Vibro are integers! But what if our bell sound had been pitched three octaves higher? Let’s multiply the spike frequencies by 8 (i.e., three octaves up) and see what that gives us:

8 * (215 / 215) = 8.0
8 * (388 / 215) = 14.4
8 * (517 / 215) = 19.2
8 * (732 / 215) = 27.2
8 * (904 / 215) = 33.6
8 * (1120 / 215) = 41.6

If we round those numbers to the nearest integer, we get partials 8, 14, 19, 27, 34, and 42. So if we set these partials to the appropriate amplitudes and then tune the oscillator back down three octaves (by setting Vibro's OCT knob for the oscillator to -3), we will get a spectrum that’s reasonably close to the one in the recording!

The thing that remains to be done is to figure out what amplitudes we should use for the partials. Vibro’s partial editor shows decibels on the right-hand side, so we can use Audacity (or whatever audio editor you prefer) to increase the volume of the recording so that the highest spike ends up at 0 dB. Then, for each spike, we can check what its amplitude is (in dB) in the audio editor and set the same amplitude for the corresponding partial in Vibro. Voila!

The more partials we include, the closer to the original recording we will get, though it’s usually more difficult to spot the peaks in the higher frequencies, and their amplitudes are usually so small that you can’t set them properly in Vibro. Once the peak amplitudes go below, say, -30 dB it doesn’t make a lot of sense to try to include them.

Of course, no real-life sounds have a completely stationary timbre - the frequency spectrum usually evolves a fair amount over short periods of time. The really fun part begins when you have a recording of something where the timbre changes noticeably over time. With such a sound, you can pick four different points in time in the recording and repeat the above procedure and store the results in the four different wave slots of an oscillator in Vibro. That allows you to “evolve” the sound from the first timbre through to the fourth by turning the oscillator's POS knob (or by modulating it). And for even more complex sounds, you can use all four oscillators and put different timbres in each of the 16 slots!

You will probably discover that this technique for creating timbres works better for some sounds than others. But regardless of how similar the results are to your recording, you'll probably end up with interesting timbres!

Have fun!
Gustav

User avatar
Zac
Posts: 1784
Joined: 19 May 2016
Contact:

22 Jul 2016

Very nice tutorial, thanks. So glad I got to try your synth again. Really getting into it now. I'm getting some amazing results. Love the chorus effect on it too, nice wide parameter ranges.

User avatar
selig
RE Developer
Posts: 11738
Joined: 15 Jan 2015
Location: The NorthWoods, CT, USA

22 Jul 2016

Hi Gustav,

I love this technique and have used it on a few occasions in the past with other synths, sometimes using multiple synths (Thors) in a Combinator to get enough harmonics. I'm currently checking out Vibro (LOVE Neutron, btw), which seems PERFECT for this technique and yet I'm struggling one big issue.

My issue is this - I'm working with a coke bottle sample I took years ago and the harmonics are not that strong and I'm finding it difficult if not impossible to set the desired level on some of the upper harmonics.

In your UI, you've chosen a linear scale (0-1) for the harmonic levels, but I need a log scale since we're working with decibels here. 75% of your scale only covers 12 dB range, with the last 25% covering the remaining range. I'd MUCH prefer at least the OPTION to have a scale that covered 72-96 range.

Because of this I'm finding it very difficult to set harmonics at values such as -24 dB (relative to the fundamental) or -48 dB, yet many of the harmonics I'm working with need to be at that level or lower.

Here's the shot of the spectrum I'm trying to replicate:
Image

And here's as far as I can go with Vibro, and the last two harmonics are already too loud with no way to adjust them lower:
Image

And so my "feature suggestion" is to allow a log display mode that covers 72 or 96 dB across the same range you currently cover, with 36/48 dB at the center point.
It would be GREATLY appreciated if this was possible - otherwise LOVING this synth so far, and even the basic init patch (sine) makes a great bass IMO!
:)
[EDIT: as you can see it's easy to determine the decibel level of the harmonics from the display in Reason, and so it would be great to be easily able to use these values when setting harmonic levels in Vibro, knowing you can't directly type them in (maybe a display for decibel level?).]
Selig Audio, LLC

User avatar
hamzter
RE Developer
Posts: 580
Joined: 14 Apr 2016

23 Jul 2016

Hi!
selig wrote:In your UI, you've chosen a linear scale (0-1) for the harmonic levels, but I need a log scale since we're working with decibels here. 75% of your scale only covers 12 dB range, with the last 25% covering the remaining range. I'd MUCH prefer at least the OPTION to have a scale that covered 72-96 range.
That's a great suggestion, thank you! I'm afraid that it would be a bit tricky to implement, though, because of the way the editor partials are stored in patches. One option might be to add a "hi-res" mode to the editor that encodes the partial amplitudes in a different way. I'll give it some thought.
selig wrote:It would be GREATLY appreciated if this was possible - otherwise LOVING this synth so far, and even the basic init patch (sine) makes a great bass IMO!
Thank you!

Best regards,
Gustav
LoveOne

User avatar
selig
RE Developer
Posts: 11738
Joined: 15 Jan 2015
Location: The NorthWoods, CT, USA

23 Jul 2016

hamzter wrote:Hi!
selig wrote:In your UI, you've chosen a linear scale (0-1) for the harmonic levels, but I need a log scale since we're working with decibels here. 75% of your scale only covers 12 dB range, with the last 25% covering the remaining range. I'd MUCH prefer at least the OPTION to have a scale that covered 72-96 range.
That's a great suggestion, thank you! I'm afraid that it would be a bit tricky to implement, though, because of the way the editor partials are stored in patches. One option might be to add a "hi-res" mode to the editor that encodes the partial amplitudes in a different way. I'll give it some thought.
selig wrote:It would be GREATLY appreciated if this was possible - otherwise LOVING this synth so far, and even the basic init patch (sine) makes a great bass IMO!
Thank you!

Best regards,
Gustav
LoveOne

Yes please, and thank you!
Can I ask how you approach editing partials at these levels (which are quite common IMO)? Do you have a suggested workaround? I basically gave up using it for this task after feeling it was impossible to have any level of control for partial levels below -12 dB or so, which is basically any partial beyond the 4th harmonic - any suggestions would be greatly appreciated!
:)
Selig Audio, LLC

User avatar
hamzter
RE Developer
Posts: 580
Joined: 14 Apr 2016

23 Jul 2016

selig wrote:Can I ask how you approach editing partials at these levels (which are quite common IMO)? Do you have a suggested workaround? I basically gave up using it for this task after feeling it was impossible to have any level of control for partial levels below -12 dB or so, which is basically any partial beyond the 4th harmonic - any suggestions would be greatly appreciated!
:)
Not that I'm aware of, I'm afraid.

The amplitudes of the partials in the wave editor are encoded as a single string in the patch file, and the "resolution" of the values depend on the way I chose to encode that string. Introducing a "hi-res" mode for the editor would allow encoding the amplitudes in a better way. I chose the current solution because I wanted to keep patch sizes relatively small (and the encoding/decoding code simple!), but in hindsight it would probably have been better to use a longer encoding.

Best regards,
Gustav

User avatar
selig
RE Developer
Posts: 11738
Joined: 15 Jan 2015
Location: The NorthWoods, CT, USA

23 Jul 2016

hamzter wrote:
selig wrote:Can I ask how you approach editing partials at these levels (which are quite common IMO)? Do you have a suggested workaround? I basically gave up using it for this task after feeling it was impossible to have any level of control for partial levels below -12 dB or so, which is basically any partial beyond the 4th harmonic - any suggestions would be greatly appreciated!
:)
Not that I'm aware of, I'm afraid.

The amplitudes of the partials in the wave editor are encoded as a single string in the patch file, and the "resolution" of the values depend on the way I chose to encode that string. Introducing a "hi-res" mode for the editor would allow encoding the amplitudes in a better way. I chose the current solution because I wanted to keep patch sizes relatively small (and the encoding/decoding code simple!), but in hindsight it would probably have been better to use a longer encoding.

Best regards,
Gustav
I'm no expert here, but I don't think I'm suggesting high resolution. The current span is 0-1, which covers a very wide range. All I'm suggesting, and this may be an oversimplification, is to spread those same values out over a different "curve". It will still be 0-1 in the end, but with a log curve applied.

The resolution is the same, it's just spread more evenly from a decibel perspective. For example, currently you have 50% of the entire resolution going across only 6 dB of the range, which is wasted because you don't need THAT much resolution at that range. 1 dB steps would be PLENTY for this application since more resolution is not needed. What IS needed is more RANGE, and IMO a CONSISTENT resolution as it applies to decibels, e.g. 1 decibel per "step".

All you really need is somewhere from 96 to 127 total steps of resolution, which is probably in the neighborhood of what you currently have, right? This would be akin to having two modes for drawing, both that store the same values as before: a linear mode (current mode) and a log mode (1 step per dB).

Again, I may be oversimplifying things in my ignorance, but IMO it's not about MORE resolution, it's about having levels adjusted in a log (decibel) scale. Even the 14:2 and Line mixer, which don't have dB values but ARE a log scale) only have 127 steps, but the steps are LOG so that they make sense to the way we hear levels. This allows them to cover a wider range with their resolution distributed in a manner that makes sense to the human ear.

Hope I'm making sense…
Selig Audio, LLC

User avatar
orthodox
RE Developer
Posts: 2286
Joined: 22 Jan 2015
Location: 55°09'24.5"N 37°27'41.4"E

23 Jul 2016

selig wrote:Even the 14:2 and Line mixer, which don't have dB values but ARE a log scale) only have 127 steps, but the steps are LOG so that they make sense to the way we hear levels.
Excuse my being overly precise, but they are not exactly log scale. The formula is a mix of linear and exponent so it's hard to tell what they are.

... to those concerned, it is gain = (a/100) * 2^((a-100)/32)

User avatar
rcbuse
RE Developer
Posts: 1176
Joined: 16 Jan 2015
Location: SR388
Contact:

23 Jul 2016

selig wrote: Again, I may be oversimplifying things in my ignorance, but IMO it's not about MORE resolution, it's about having levels adjusted in a log (decibel) scale. Even the 14:2 and Line mixer, which don't have dB values but ARE a log scale) only have 127 steps, but the steps are LOG so that they make sense to the way we hear levels. This allows them to cover a wider range with their resolution distributed in a manner that makes sense to the human ear.

Hope I'm making sense…
I know when I was making the catalog for nostromo those high partials are very very quiet but make a big difference to our logarithmic ears. I would suggest making the gain values (x/N)^2 or (x/N)^3 where N is your range (127,255,etc.). Or at least have a switch that changes from X to X^2 or something.

User avatar
hamzter
RE Developer
Posts: 580
Joined: 14 Apr 2016

24 Jul 2016

rcbuse wrote:
selig wrote: Again, I may be oversimplifying things in my ignorance, but IMO it's not about MORE resolution, it's about having levels adjusted in a log (decibel) scale. Even the 14:2 and Line mixer, which don't have dB values but ARE a log scale) only have 127 steps, but the steps are LOG so that they make sense to the way we hear levels. This allows them to cover a wider range with their resolution distributed in a manner that makes sense to the human ear.

Hope I'm making sense…
I know when I was making the catalog for nostromo those high partials are very very quiet but make a big difference to our logarithmic ears. I would suggest making the gain values (x/N)^2 or (x/N)^3 where N is your range (127,255,etc.). Or at least have a switch that changes from X to X^2 or something.
Points taken! Very good input - thank you!

Changing this would require a separate mode switch for patch compatibility, but I don't think that's a dealbreaker.

Best regards,
Gustav

User avatar
hamzter
RE Developer
Posts: 580
Joined: 14 Apr 2016

26 Jul 2016

Hi again,

Just thought I'd let you know that I've implemented a "log mode" in the partial editor. It will be included in the next Vibro update (1.1.1).

Unfortunately, I cannot submit the update to the shop until after the Vibro song challenge deadline. (The reason is that Propellerhead cannot/won't reset trials for Vibro, so I'm assigning beta licenses manually to people who want to join the competition.) If you want to test the log mode feature now, please send your PH user name to gustav@loveone.se and I'll assign a beta license to you.

User avatar
selig
RE Developer
Posts: 11738
Joined: 15 Jan 2015
Location: The NorthWoods, CT, USA

26 Jul 2016

hamzter wrote:Hi again,

Just thought I'd let you know that I've implemented a "log mode" in the partial editor. It will be included in the next Vibro update (1.1.1).

Unfortunately, I cannot submit the update to the shop until after the Vibro song challenge deadline. (The reason is that Propellerhead cannot/won't reset trials for Vibro, so I'm assigning beta licenses manually to people who want to join the competition.) If you want to test the log mode feature now, please send your PH user name to gustav@loveone.se and I'll assign a beta license to you.
HUGE THANKS - and very quick response too!!!
Selig Audio, LLC

User avatar
hamzter
RE Developer
Posts: 580
Joined: 14 Apr 2016

30 Aug 2016

Hi,

Just thought I'd mention that Vibro 1.1.1 is out now (a free upgrade). It has the dB display mode that was requested in this thread.

/Gustav
LoveOne

User avatar
Zac
Posts: 1784
Joined: 19 May 2016
Contact:

30 Aug 2016

Great stuff, thanks Gustav.

User avatar
moneykube
Posts: 3449
Joined: 15 Jan 2015

04 Sep 2016

hamzter wrote:Hi,

Just thought I'd mention that Vibro 1.1.1 is out now (a free upgrade). It has the dB display mode that was requested in this thread.

/Gustav
LoveOne
wohwoo thanx.... :thumbs_up:
https://soundcloud.com/moneykube-qube/s ... d-playlist
Proud Member Of The Awesome League Of Perpetuals

Post Reply
  • Information
  • Who is online

    Users browsing this forum: No registered users and 10 guests