Accueil > Renoise > A Basic Native Formant Filter for Renoise [English]

A Basic Native Formant Filter for Renoise [English]

06/04/2013

Bit_Arts initial work gave me high hopes to build a native formant filter in Renoise by myself, and I’m actually on the path  to rebuild another similar one from the start and I’m reading some articles for that.

I’ve read this very interesting webpage :
http://www.soundonsound.com/sos/mar01/articles/synthsec.asp

Theory

It says that formants consist in a set en 3 parallel bandpass filters ; 5 voyels are emulated by defining specific bandpass frequencies in 3 mixed separate (i.e. send) tracks. The input sound should be « pulse-modulated » / distorded (shift model) or (why not) Lofimatized (Bitcrushed), for better sounding results. Vowels morph because parameters are slowly modulated so I guess that we would need some « Inertia » in the formula.

What we’ve got in our hands with Renoise

  1. the DSP *Filter (it has an internal BP mode that could help me to rebuild the setup)
  2. the *multiTap device can be another option : behind the 4 delays mechanism, it has 4 internal Filters with a BP option but it has apparently no inertia so it should probably produce not human vocal results
  3. the *multiband device, that’s able to route the signal in 3 separate channels in which I could put the desired BP *Filters
  4. or the typical *Send routing device, that can be chained with Keep source 2 time, and Mute source for the last routing.
  5. the *Hydra meta-device, that can just control 3 parameters with 1 input, could be usefull to change vovels more easily
  6. and much more… 😉

Back to S.o.S site, the 3 Frequencies are defined in this 3×5 matrix :

  • « ee » sounds like « leap » F1=270 F2=2300 F3=3000
  • « oo » sounds like ‘loop’ F1=300 F2=870 F3=2250
  • « i » sounds like like « lip » F1=400 F2=2000 F3=2550
  • « e » sounds like « let » F1=530 F2=1850 F3=2500
  • « u » sounds like « lug » F1=640 F2=1200 F3=2400
  • « a » sounds like « lap » F1=660 F2=1700 F3=2400

The problem is to « store » somewhere this 3×5 frequencies matrix.

I remeber a nice piece of random tune called Invisible Melodies. In this tune notes are stored in custom LFOs with points and those custom LFOs points are triggered with the modulated « Reset » button (One Shot Mode).

  • So following this example, Renoise can store the 5 specific frequencies (corr. to each vowel) in 3 custom LFOs and the frequency selection has to be made with a Hydra device pointing to the « Reset » of the LFOs. If you link the LFOs to Filters and use the « External Editor » to adjust precisely the point values, you can reproduce exactly the previous 3×5 matrix. The only difference is that the input value has to be shown in a % and not in Hz :

With an amplitude of 50% and an Offset of 42.30% the corresponding LFO Values (% instead of Hz) :

  • « ee » sounds like « leap » F1=0% F2=70.755% F3=81.509%
  • « oo » sounds like « loop » F1=2.222% F2=34.34% F3=70%
  • « i » sounds like « lip »  F1=9.811% F2=65.283% F3=70%
  • « e » sounds like « let » F1=18.113% F2=62.264% F3=74.151%
  • « u » sounds like « lug » F1=23.962% F2=46.038% F3=72.453%
  • « a » sounds like « lap » F2=25.094% F2=59.057% F3=72.45%

Download

This is a FIRST test that uses typical SEND BASED routings. Download HERE the .XRNS demo example.

Usage

It’s based on 3 specific hydra devices, don’t worry I’ve renamed them so that they’re easy to understand. I tried to make it as simple as possible.

First SEND YOUR SOUND to ControlF.

Then MODULATE the 3 parameters there :
(1) Formants – self explicit.
(2) Bandwidth – increase/decrease formant filters
(3) Transitions – human/robotic vocal transitions

Modifying Formants :
0 % ======================================>> 100 %
« ee » =====> « oo » =====> « i » =====> « e » =====> « u » =====> « a »

Credits

* Bit_Arts – showed that doing it in Renoise was possible and pushed me to move my ass to understand the mechanism by myself
* The BellowsInvisible Melodies
* MXBResynth 4 is perfect to build the right pulse wave samples with no time

PROBLEMS & TO DO LIST :

That’s fucking painfull to insert this logic in my new modules ! I need to find something EASIER. I need to find a way to put most of the usefull data into one chain, for example.

Still searching for the best trick…

Thanx for reading
have fun with Renoise !

kurtz/lapiNIC