Formant Filters - Anyone made one with Hise yet?
-
Just diving into this....
-
It's on the todo list.
Filters are pretty hard dsp but I have a feeling there will be plenty of online github repositories for formant filters which can be used as reference. Research papers too. I have a feeling it's not too complex. -
@DanH Did you check
-
@aaronventure I did, they're all synths, aren't they?
-
@DanH It's a bunch of formant filters (I haven't played with them to be honest), but voice-focused. You can test them out and see if you're after what they do, check the source code in the library on github and potentially take them apart to suit your needs.
-
@aaronventure might need some help taking them apart - don't know Faust well enough! Especially how to input audio - these use the filters to generate the signal. For example:
//-------`(pm.)formantFilterFofSmooth`-------------- // Formant filter based on a single FOF filter. // Formant parameters are linearly interpolated allowing to go smoothly from // one vowel to another. Fof filter parameters are lowpass filtered // to mitigate possible noise from varying them in realtime. // Voice type can be selected but must correspond to // the frequency range of the provided source to be realistic. // // #### Usage // // ``` // _ : formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) : _ // ``` // // Where: // // * `voiceType`: the voice type (0: alto, 1: bass, 2: countertenor, // 3: soprano, 4: tenor) // * `vowel`: the vowel (0: a, 1: e, 2: i, 3: o, 4: u) // * `nFormants`: number of formant regions in frequency domain, typically 5 // * `i`: formant number (i.e. 1 - 5) used to index formant data value arrays // * `freq`: fundamental frequency of excitation signal. Used to calculate // rise time of envelope //-------------------------------------- declare formantFilterFofSmooth author "Mike Olsen"; formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) = fofSmooth(formantFreq(i),formantBw(i),formantSw(i),formantGain(i),tau) with { tau = 0.001; index = (voiceType*nFormants)+vowel; // index of formant values // formant center frequency using autobend correction formantFreq(i) = ba.listInterp(formantValues.f(i),index) : autobendFreq(i,freq,voiceType); // formant amplitude using vocal effort correction formantGain(i) = ba.listInterp(formantValues.g(i),index) : vocalEffort(freq,gender); formantBw(i) = ba.listInterp(formantValues.bw(i),index); // formant bandwidth // formant skirtwidth formantSw(i) = skirtWidthMultiplier(vowel,freq,gender)*formantBw(i); gender = voiceGender(voiceType); // gender of voice };
-
@DanH said in Formant Filters - Anyone made one with Hise yet?:
// #### Usage
//
//// _ : formantFilterFofSmooth(voiceType,vowel,nFormants,i,freq) : _ //
This is your clue.
Did you use Faust at all before?
-
@aaronventure yes lots, but I haven't done a huge amount of editing to existing code