[.uhm] FM Synthesis in Hive

Official support for: u-he.com
Post Reply New Topic
RELATED
PRODUCTS

Post

Not the most elegant and well thought out script, but still sounds interesting. I was testing different ways of filtering out harmonics in Spectrum mode to use them for FM. And then I digressed to try different blend modes.

Code: Select all

NumFrames = 10
Envelope L0=1 T1=1 L1=0

Spectrum start=9 end=0 direction=backward "rand"
Spectrum "x * (index<30) * env(table)"
Wave "sin(2*pi*phase*3.15 + x*1+table)"
Wave start=4 end=0 target=aux1 "lowpass(main, env(table), 0)"

Phase "rands * 2 * pi - pi"

Wave blend=max "table+aux1"
Wave blend=max "sin(2*pi*phase*1.22 - x*2-table)"

Spectrum lowest=0 highest=0 "0"
Normalize base=each
https://soundcloud.com/drzhnn/uhm-wavetable-test-2

Post

Hehehe, I love where this is going! :)

(I'm currently on a short mini-vacation, will be back posting more by the end of the week)

Post

Have a nice vacation, Urs! And we'll be right here waiting for you to come back with some new .uhm tutorials (hopefully formant synthesis related)!

Until then, here's my take on it. I generated some noise in Spectrum mode and filtered out most of its harmonics. Then I applied a round() function to that noise to reduce the curvature of the waveform and make it all square-ish and blocky looking. Then I used this waveform as a phase modulator (or rather phase distortion) for a sine wave. After that I applied 2 bandpass() filters (in parallel) with high resonance. Both filters sweep in opposite directions across the table, adding that vocal-like quality to the sound. Then - Interpolation, to smooth very noisy transitions between frames. Finally, tanh(x*0.25) is acting as a maximizer and peak limiter.

Changing NumFrames and Seed values will change the character of the "voice".

Code: Select all

NumFrames = 100
Seed = 6387445
Spectrum "rand * (index<41 % 14)"
Wave "round(x)"
Wave "sin(2*pi*phase*randf + x*14)"

Wave target=aux1 "main"

Wave blend=add "(phase>0.01+table)*(phase<0.3+table) * bandpass(aux1, 0.5, 0.9) + aux1"
Wave blend=add "(phase>0.5-table)*(phase<0.6-table*0.5) * bandpass(aux1, 0.6, 0.99) + aux1"

Interpolate type=morph2 snippets=100

Wave "tanh(x*0.25)"

Spectrum lowest=0 highest=0 "0"
Normalize base=each
https://soundcloud.com/drzhnn/uhm-wavetable-test-3

Post

drzhnn wrote: Mon Oct 08, 2018 1:46 pmwe'll be right here waiting for you
Do I hear Richard Marx at the end of your SC clip? Hehe! :D
Cheers
Rob
u-he | Support | FAQ | Patch Library

Post

#rob wrote: Mon Oct 08, 2018 2:46 pm
drzhnn wrote: Mon Oct 08, 2018 1:46 pmwe'll be right here waiting for you
Do I hear Richard Marx at the end of your SC clip? Hehe! :D
Nice one, Rob :tu:
It's an Easter egg for those who listens my clips all the way through :hihi:

Post

Really nice wt drzhnn !
Best
YY

Post

Whywhy wrote: Mon Oct 08, 2018 6:49 pm Really nice wt drzhnn !
Thank you!

Here's an evolution of a previous script. I used Spectrum lowest=0 highest=2 "0" as a highpass filter to remove the fundamental and chaos surrounding it, and then I mixed in a clean triangle wave to compensate for the lack of low end. This way I don't need to use a dedicated subosc later on 8)

Code: Select all

NumFrames = 20
Seed = 754889
Spectrum lowest=1 highest=40 "randf"

Wave target=aux1 "main"
Wave "(phase>0.01+table)*(phase<0.1+table) * bandpass(aux1, 0.6, 0.99) + aux1*2"
Wave blend=sub "(phase>0.3+table)*(phase<0.4+table) * bandpass(aux1, 0.55, 0.99)*4 + aux1"
Wave "sin(table*10 + x)"
Wave "lowpass(x, 0.4, 0)"
Wave "round(x*1.2)"

Interpolate type=morph2 snippets=20

Phase "rands * 2 * pi - pi"
Spectrum lowest=0 highest=2 "0"
Wave "tanh(x*4)"
Wave "(1 - abs(2*phase-1)*2) + x"

Normalize base=each
https://soundcloud.com/drzhnn/uhm-wavetable-test-4

Post

cool stuff!

Post

The idea behind this one is very promising and is worth exploring further!

I wanted to create a Perlin noise (it's the one they use in CGI to create natural looking procedural textures). The key word is 'natural'. Unlike digital noise, which generates random values for each step, Perlin noise takes into account a value in previous step, so that the next generated value is random but not too far from the previous one. This makes the noise more natural-flowing and smooth. Another property of Perlin noise in graphics is that it is scalable and preserves high level of detail when texture is zoomed in.

So I used lowpass() to smooth the default rand function. And to keep high frequency content I mixed three layers of noise, each using different cutoff frequencies:

Image

The result is a waveform that looks very similar to what you'd find in samples of acoustic instruments. It doesn't look 'digital'. And the sound is harmonically rich but not harsh.

Code: Select all

NumFrames = 10
Envelope L0=0 T1=0.1 L1=1 T2=0.8 L2=1 T3=0.1 L3=0

Seed = 7983165
Wave "lowpass(1-2*rand, 0.1, 0) * 4"
Wave blend=add "lowpass(1-2*randf, 0.35, 0) * 0.1"
Wave blend=add "lowpass(1-2*rand, 0.50, 0) * 0.21"
Normalize base=each

Wave "x*env(phase)^0.5"

Wave "sin(2*pi*phase * 7 + x*2.8)"

Spectrum lowest=0 highest=0 "0"
Normalize base=all
I added some FM in the end because this thread is about FM :)

https://soundcloud.com/drzhnn/uhm-wavetable-test-5

Post

I forgot to mention, ^ that Perlin noise wavetable is supposed to be used as a waveform bank, rather than a scan-through kind of wavetable. So you may want to switch the Auto Mode to Off and find the right timbre manually, or by modulating Position with Velocity, Random or Keyfollow via ModMatrix.

Post

Rather static sounding wavetable. I wasn't too excited about it in the beginning :phones:

Code: Select all

NumFrames = 20
Seed = 1439805

Envelope L0=0 T1=0.1 L1=1 T2=0.9 L2=0
Wave "lowpass(1-2*rand, 0.02*env(table), 0.0) * 2"

Phase "x * rands*1.7"

Wave blend=multiply "sin(2*pi*phase*10 + x*env(table)^2)"
Wave "x * env(phase)^2"

Interpolate type=morph2

Spectrum lowest=0 highest=0 "0"
Normalize base=each
https://soundcloud.com/drzhnn/uhm-wavetable-test-6

Post

drzhnn wrote: Fri Oct 12, 2018 5:54 am Rather static sounding wavetable. I wasn't too excited about it in the beginning :phones:
Cool stuff! :)

Thanks for all your scripts! I've been occupied elsewhere, but look forward to trying some of your scripts!

Think you could come up with some vocal sounds? oohs aahs etc? That would be so sweet!

Post

pdxindy wrote: Fri Oct 12, 2018 7:54 am Think you could come up with some vocal sounds? oohs aahs etc? That would be so sweet!
Yeah, that's where I'm heading to. But I'm not there yet :oops: It shouldn't be too hard recreating these vowels using Spectrum mode, but somehow it feels like cheating, so I want to crack this in Wave mode.

Post

Re vocal sounds: As a simple example, in the WIP folder there's a table called "HS Vocalese.uhm".

Post

Anyone tried making drumkits yet? I'm stuck. Say there's a 100 frames .uhm where first 50 frames contain a kick and last 50 frames - a snare drum. How would one go about triggering them independently? In Zebra it can be done easily using key scale editor and modulation map but in Hive I can't quite figure it out. :help:

Here's FM 808 Snare:

Code: Select all

NumFrames = 100

Envelope L0=1 T1=1 L1=0

Wave "1-2*rand"
Wave "lowpass(x, 0.9*env(table), 0.0*env(table)) * env(table)^3"
Wave "bandpass(x, 0.55, 0.5)" blend=add
Wave "tanh(x*2)*env(table)^5"

Wave "sin(2*pi*phase*3 + x)*env(table)^8"

Normalize base=all
https://soundcloud.com/drzhnn/uhm-wavetable-test-7

Post Reply

Return to “u-he”