From the original SynthMaker forum (2004–2014), with its members’ names and dates.
chackl ·
Hello!
I've recorded a chorus from my Roland FP9. This chorus sings with a wide opened mouth (we in austria would say the chorus is singing "Haaaaaaaaaaaaa". But i don't think so, that it's the same in england)
Now I,ve this vouce, and how am I able to make vowels (like a,e,i,o,u...) with this chorus. It would be built in a new project of me, for plugins, that spetialise on acustics. The Chorus will needed spetial for a gothic Voice.
C.Hackl
nix ·
Hey,
You probably already know about this one, but here is a vowel synth: Delay Lama->
http://www.audionerdz.com/
I am not sure about the method but will think about it.
Cheers
kirkagur ·
i think that if you will take a 3 delays, with the same ratio that format filter has.
move it all together with lfo and you will get the effect.
*this is a theory only i dont know if its close to reality. 🙂
philter5 ·
as far as i know it is possible to get such vowels without using samples,
they can be created with the regular synthesis modules.
but i´ll have to google to proof if i am right or not 😕
philter5 ·
here is what i´ve found.
very interesting if you would like to create a vowel synth... 😉
VOWEL SYNTH
stw ·
philter5 wrote: here is what i´ve found.
very interesting if you would like to create a vowel synth... 😉
VOWEL SYNTH
Thanks for the link! 😍
chackl ·
Ok.
Have now built that in sm but the Vowels are not sounding like that as they have to.... Why?
OK. But how can i make such filter curves in sm (if that are filtercourves. it also can be additive osc, but i think that's not that.)
I never focosiced om filters so now im a total greenhorn at it.
rl ·
Typically vowels have 3 or 4 dominant formants.
The easiest way to build a formant filter in SM is using 3 parallel bandpass-filters. Feed that with a harmonically rich signal like a saw or rect wave. Add a little chorus and reverb for an ethereal effect.
Search the web for frequency data, e.g. here: http://www.phon.ucl.ac.uk/home/wells/fo ... able-2.htm.
Adding a little filter resonance might help in vowel perception but also adds ringing noise.
BTW: The famous formant filter source from the musicdsp.org archives cannot be ported to SM, since SM does not support double precision floats.
chackl ·
Sorry but dead link...
rl ·
huh? not from here. Maybe try again.
BTW: this is the formant data I'm using in one of my synts:
I tryed with a sine, and with my voice of the chorus. but didn't get a good resultat.
Also i've to ask for:
Does anybody have a code only for a BandPass filter. or is that no problem. it schould be CPU cheap...
Will try it again with the ASM-Code from myco.
rl ·
What result do you expect from filtering a sine wave? It contains only one (1, uno) frequency!. As I said: Use a harmonically rich signal like a saw or rectangle wave.
IIRC Stefan posted a CPU-cheap bandpass code some time ago.
chackl ·
Thanks to all!
Got it now working!!!
I've only to experiment now with my chorus, that only is recorded in one vowel. to get it, i've to tune frequences so that may take a bit.
Great thanks to all that helped me!
Great thanks to rl for the frequences!
C.Hackl
martinvicanek ·
Here is a stable single precision version of the public source code formant filter at http://www.musicdsp.org/showone.php?id=110 by [email removed]. The original 10-pole filter requires double precision. I have factorized it into five 2-pole filters which work fine at single precision. Factorization of polynomials up to degree 100 can be done easily with the online root finder at http://www.akiti.ca/PolyRootRe.html.
martinvicanek ·
Another nice feature about the decomposition into five 2-pole filters is that you can morph any two (or more) vowels by linear interpolation of the filter coefficients. The filter is stable by design. 🙂 Attached is a human sounding wah-wah demo.
tester ·
But... there are more vowels.
http://en.wikipedia.org/wiki/Vowel_diagram
or to emphasize the understanding through google search:
http://www.google.pl/search?q=vowel+cha ... 18&bih=676
I mention this, because my language speaks differently english vowels.
MegaHurtz ·
I have wondered a couple of times which filters would be best to do this with, it seems linear phase isnt quite it.
stw ·
martinvicanek wrote: Another nice feature about the decomposition into five 2-pole filters is that you can morph any two (or more) vowels by linear interpolation of the filter coefficients. The filter is stable by design. 🙂 Attached is a human sounding wah-wah demo.
Nice work Martin! Thanks for sharing... 😉
martinvicanek ·
tester wrote: But... there are more vowels.
Absolutely. A rough representation of the IPA chart would be this XY pad morphing with the four corner vowels spanning the possible space:
MegaHurtz wrote: I have wondered a couple of times which filters would be best to do this with, it seems linear phase isnt quite it.
An allpole filter (the one used here) is also the natural choice in LPC, refer to this thread.
RunBeerRun2 ·
Pretty cool! I like the 2-way one best, cpu-wise.
tester ·
This one is cool, thanks 😉
Now some pitch changer and we have singing whispers and vocals 🙂
The pitch changer must be designed to understand formants of human voice as far I remember. Or the formnat scheme could include pitch changing via shifting the filter values (correlated with input frequency change).
cyto ·
Very cool examples, Martin, as always. I wonder, though, if it is really necessary to have all the coefficients declared and interpolated, etc in code. Couldn't it be just as effectively be done in green? Also, I'm assuming this isn't compatible across sample rates. What rate is it tuned to? 44.1kHz?
-cyto
MegaHurtz ·
It does sound lovely, even on my standard laptop speakers 😀
Works nice on an impulse as well.
infuzion ·
martinvicanek wrote:
tester wrote: But... there are more vowels.
Absolutely. A rough representation of the IPA chart would be this XY pad morphing with the four corner vowels spanning the possible space:
Nice 10 vowel filter! I do think you can make the XY value setting in one Code block with lots of reduction, rather than 5 modules that you have now. Tip: I'd try a Float Array to select between banks of vowel values, since you don't expect that to change too much. Get Troggie to do some SSE array compressing if you can get him to stroke the keyboard instead of his new woman long enough.
Interesting that it uses 10 poles. Usually I've seen 3, though I hope for 4 (SSE) for 10+ vowels. Google is not helping though.
The OSM is giving me a flashback:
martinvicanek ·
Thanks for your good feedback guys! Yes, the 4 way interpolator looks a little bulky with 46 inputs, hehe. It could be done in a cascade of two blocks half the size each, but that would just be cosmetics without CPU gain. Yes, it could also be done in green, and in fact that was my first thought. I discarded that idea, though, because in green, operations are not done synchronously, resulting in an inconsistent parameter set for a short period of time when you change the xy too fast. I was afraid that this transient could make the filter unstable. However, thinking again, the two pole filters are so docile it should not be a problem. Hmmm.
@Cyto: well spotted, it' for 44.1 kHz only. I'll upload a sample rate independent version later. Thanks!
@infuzion: the original filter is from musicdsp, not mine. The 10 poles are in fact 5 formants (pairs of complex conjugates). Which is still one too many for SSE 🙁 Each formant is characterized by its frequency and strength (the latter is less well documented in the literature).
infuzion ·
I was thinking the data would be in green, but the XY crossover would be in Code/ASM.
trogluddite ·
Sounds great!
I'd be tempted not to bother with using all the SSE channels - the filter code is very economical, and could be really beautiful used on a poly synth - a nice multi-stage envelope for each of the two crossfade axes would make some great evolving pad sounds!
One trick does occur to me - getting the correct coefficient values to the 'corner' variables of the crossfader could be done using a routine that is executed only upon changing the selections (or from a note trigger when used in a synth).
martinvicanek ·
Okay, here is my next (and probably last) update:
- filter coefficients are handled completely in green
- coefficients are adjusted so the filter works independent of sample rate
- schematic is now better organized
Not that it'd improve on CPU or sound any different though. 😉
I am sure there is still potential to cut down a few cycles in the filter processing. Packing 4 of the 5 filters into Mono4 has not proved efficient, however. Obviously that optimizing part is beyond me. 😉
martinvicanek ·
trogluddite wrote: a nice multi-stage envelope for each of the two crossfade axes would make some great evolving pad sounds!
One trick does occur to me - getting the correct coefficient values to the 'corner' variables of the crossfader could be done using a routine that is executed only upon changing the selections (or from a note trigger when used in a synth).
Yeah, I can almost hear it! Trog, you are so creative. I wish I had read this before, and also infuzion's comment. Looks like one should do the corners in green and the xy-mixing in code - that would leave all options open. Hmmm.
tester ·
When moving the blue dot to the left upper corner, sound dissapears abruptly, at least on my machine.
@martinvicanek - could you add a node for vocal pitch change (without making "Alvin and the Chipmunks" effect)? I guess it would involve some additional calculations on formants to make it right, but you seem to be well oriented in that area. Thanks!
martinvicanek ·
tester wrote: When moving the blue dot to the left upper corner, sound dissapears abruptly, at least on my machine.
That's strange. No such problem here. Please make sure that x and y both stay within the range [0,1].
tester wrote: @martinvicanek - could you add a node for vocal pitch change (without making "Alvin and the Chipmunks" effect)? I guess it would involve some additional calculations on formants to make it right, but you seem to be well oriented in that area. Thanks!
Yeah, formant preserving pitch shifting is cool! That's one of my favorite themes, please refer to my thread at PSOLA based real time pitch manager.
tester ·
I just downloaded and opened "as it is", but I will check it on another computer.
Regarding pitch shifting algos. I was rather thinking about real-time modeling - paralel change of the input (or using noise) while changing the filtering parameters. Should work nice with slow modulators too. Processing an output signal through the pitch-shifting routines - will affect the quality of sound, because the sound is being fragmented in order to make it fit; I like the inner warmth of what it is now 😉 Pitch shifting isn't a big problem with many instrumental or simpler sounds, but with more complex patterns which have internal structures - it becomes an interference issue.
stw ·
Here's a packed Mono Version. I put it all into one asm block to have it complete in one module though i don't know if the last 2 pole really saves any cycles.
tektoog ·
I'm also working on a "Singing" synth...
Here's a short video of a beta version:
I used the stepLfo on pitch and on filter selection to create some kind of "articulations" and variations...
With the midilearn on each parameter, it's posible to achieve quite some interesting results...
but still needs some work and finetuning to be really convincing...
nix ·
Did u use tuned bandpass filters too tek?
Sounds cool btw, how does realtime voice sound through it?
edit- I read ur post again. So u r stepping through different filters?
tektoog ·
nix wrote: I read ur post again. So u r stepping through different filters?
nix wrote: Did u use tuned bandpass filters too tek?
Yes, the signal goes thru 4 svf3 bandpass filters with arbitrary frequencies (ah,e,ee...),
then in a switch driven by a stelLfo.
Depending on the value sent by each stepLfo steps , the signal is sent to one of the 4 filters.
There's a threshold to play with, to make variation for the switch behavior.
There's a random button to switch the filter types on the fly. To go straight from OO, AH, AE to U, EE, E for example.
before that, the signal is pitched by a second stepLfo and a master tuner. Midi key can also be played one octave up simultaneoulsy to thicker the sound...
All this can be midi controlled in the DAW.
nix wrote: how does realtime voice sound through it?
I havn't try that... was focusing on a synth...
but it might be cool as an effect too...
nix ·
Well done,
sound cool/interesting.
I have one by drumma, another essemmer,
It sounded wicked too on synth.
I don't think any of us can top audionerdz delay llama on graphics though!?
hehe
I'm gonna work a formant filter into my synth thanks to drumma
Between us, I think we can get some epic electronic chants going
martinvicanek ·
stw wrote: Here's a packed Mono Version. I put it all into one asm block to have it complete in one module [...]
Good job, Stefan! I still need to figure out this shufps thing.
infuzion ·
martinvicanek wrote:
trogluddite wrote: a nice multi-stage envelope for each of the two crossfade axes would make some great evolving pad sounds!
One trick does occur to me - getting the correct coefficient values to the 'corner' variables of the crossfader could be done using a routine that is executed only upon changing the selections (or from a note trigger when used in a synth).
Yeah, I can almost hear it! Trog, you are so creative. I wish I had read this before, and also infuzion's comment. Looks like one should do the corners in green and the xy-mixing in code - that would leave all options open. Hmmm.
That's exactly why I suggested it; you need to keep the XY mixing in Code so it can be altered at sample rate.
I would also pivot the data tables, so you have 10 Float Arrays that contain 1 value of each of the vowels. That way you can not use the Selectors & use only the Get At Float Array to choose the vowel.
stw ·
So here's a streamed version of the Mono Filter...
cheers
martinvicanek ·
stw wrote: So here's a streamed version of the Mono Filter...
I'd say you pretty much nailed it! Just one very minor comment: I think there's no real need for the three de-zippers before the filter (coeffs are already blue there). However, I'd throw some in in the green yx path. All in all very well optimized!
@tester, it occurred to me that I might have messed up the sample rate conversion, which could explain the lock-up in one of the corners. What sample rate did you use?
tester ·
44.1kHz and directsound output instead of asio - the latest mod also produced such claches when playing manually with "touchpad", but fortunately sound does not disappears (downloaded again now it seems to work; I don't know what is going on).
infuzion ·
martinvicanek wrote:
stw wrote: So here's a streamed version of the Mono Filter...
I think there's no real need for the three de-zippers before the filter (coeffs are already blue there). However, I'd throw some in in the green yx path.
I agree, but for a different reason; the De-zippers themselves are 1 pole filters. The hops can be made smaller if one is worried about zippering. Or put the Pack8 inside the XY mix; I'd want to test if the hops go out of sync. I'd experiment with & without big hops & De-zippers either way.
Also, why is the filter mono, or atleast the c/b input? Why go though all that packing? Maybe I'm misreading the code...
stw ·
infuzion wrote:
martinvicanek wrote:
stw wrote: So here's a streamed version of the Mono Filter...
I think there's no real need for the three de-zippers before the filter (coeffs are already blue there). However, I'd throw some in in the green yx path.
I agree, but for a different reason; the De-zippers themselves are 1 pole filters. The hops can be made smaller if one is worried about zippering. Or put the Pack8 inside the XY mix; I'd want to test if the hops go out of sync. I'd experiment with & without big hops & De-zippers either way.
Also, why is the filter mono, or atleast the c/b input? Why go though all that packing? Maybe I'm misreading the code...
For the zippers - i didn't test if they are of any use here. I just left them in to prevent any glitches from the hopped code.
I guess the dezippers are more efficient than a less hopped code in this case. I'd always prefer to choose higher hops in combinmation with a dezipper if the code is worth it. BTW the dezipper isn't a usual 1pole filter because it generates linear transitions whereas the 1pole filter does exponential fades.
The filter is mono because it's an optimized 4 pack version of martins original 5 2pole serial filter approach. I took 4 of the 2poles into one 4pack. That's the reason for all that packing. Unfortunately the filter design demands 5 2pole filters so i had to deal with the last one with some extra calculation. That's the reason for that whole fpu code.
tester ·
I was wondering. How to change the pitch if the input is noise? (as a result - nice whispering)
pall ·
Nice work Martin. I wonder how it sounds in chorus ( and in chords). I do research in this sense. And thanks!
Cheers!
trogluddite ·
Some more great teamwork paying off - this is looking (sounding!) very nice indeed!
infuzion wrote: I'd want to test if the hops go out of sync.
I did some extensive testing of this when I first started using hopped packs and unpacks. The 'ecx' register is AFAIK used as SM's internal sample counter and is rock solid - the value is global to the whole schematic, and will not change when execution passes from one code block to another - it just increments by one for every sample period.
I think some other registers are also used internally by SM - I guess that is why the assembler only recognises 'eax' for most of the x86 opcodes, and why 'ecx' must be copied into 'eax' before calculating hops.
infuzion ·
stw wrote:
infuzion wrote:
martinvicanek wrote: I think there's no real need for the three de-zippers before the filter (coeffs are already blue there). However, I'd throw some in in the green yx path.
...De-zippers themselves are 1 pole filters. The hops can be made smaller if one is worried about zippering. Or put the Pack8 inside the XY mix; I'd want to test if the hops go out of sync. I'd experiment with & without big hops & De-zippers either way.
Also, why is the filter mono, or atleast the c/b input? Why go though all that packing? Maybe I'm misreading the code...
For the zippers - i didn't test if they are of any use here. I just left them in to prevent any glitches from the hopped code. I guess the dezippers are more efficient than a less hopped code in this case. I'd always prefer to choose higher hops in combinmation with a dezipper if the code is worth it. BTW the dezipper isn't a usual 1pole filter because it generates linear transitions whereas the 1pole filter does exponential fades.
The filter is mono because it's an optimized 4 pack version of martins original 5 2pole serial filter approach. I took 4 of the 2poles into one 4pack. That's the reason for all that packing. Unfortunately the filter design demands 5 2pole filters so i had to deal with the last one with some extra calculation. That's the reason for that whole fpu code.
Ah yes thanks for the linear De-zipper reminder! You can merge the Octal Packs into the Coeffs x-fade to cut the cycles needed by about 2/3 (since the code that is usually running is the actual hop stuff). From there, you can experiment with lowering that one hop samplerate. I think I'm more focused on keeping green triggers low & green -> stream sampling accurate since I can assume people will do wild & precise (starting/end points) automation.
I still don't understand your filter; the "a, b, c, etc" variable names with no comment/Code to refer to do not help. Perhaps I'm becoming too old & senile to wrap my mind around it; reading Ruby & JavaScript withDescriptiveVariableNames === selfDocumentationCoding has spoiled me. (apologies with those who web-translate)
If you have time, please diagram, or improve the variable names, or something?
Thanks Trog for the testing results!
stw ·
infuzion wrote: You can merge the Octal Packs into the Coeffs x-fade to cut the cycles needed by about 2/3 (since the code that is usually running is the actual hop stuff). From there, you can experiment with lowering that one hop samplerate. I think I'm more focused on keeping green triggers low & green -> stream sampling accurate since I can assume people will do wild & precise (starting/end points) automation.
I still don't understand your filter; the "a, b, c, etc" variable names with no comment/Code to refer to do not help. Perhaps I'm becoming too old & senile to wrap my mind around it; reading Ruby & JavaScript withDescriptiveVariableNames === selfDocumentationCoding has spoiled me. (apologies with those who web-translate)
If you have time, please diagram, or improve the variable names, or something?
Yes you're right. I could have made it a bit more explaining though it's sometimes hard to find the right variable names. But at least i should have documented better. However i'm not a big fan of that endlesslongselfExplainingVariablenamethingy and so i sometimes forget that it may be easyer to read for the outer world...
So here's a more descriptive version.
I don't think that the packing inside the x-fade code would save cycles because the packings are hopped itself. I didn't merge these modules on purpose and for different reasons.
1. I definitely don't want to deal with app. 50 inputs in one code module!
2. Hopping of the packing could be way higher than the x-fade code. Or the other way round - if you really want that sharp transitons you just can comment the hop out of the x-fade code without touching the packing.
3. Despite my other description failings i'd say the detachment of packing gives a better overview of what's going on.
Hope that makes things easier to understand...
Xtinct ·
Example synth
tester ·
Could you post osm schematic or standalone exe?
I know I know - I am just lazy sometimes 😉
tektoog ·
Xtinct wrote: Example synth
Nice job!
Sounds pretty good... And nice GUI too...
Xtinct ·
Hi Tester heres the exe
Tektoog 😀 😀 😀
If I can please my peers I'm doing somthing right
martinvicanek ·
Sounds great, thanks for sharing!!
Xtinct ·
To quote Placebo without you I'm nothing
those fiters rock 😀 😀 😀
infuzion ·
Xtinct wrote: Hi Tester heres the exe
If I can please my peers I'm doing somthing right
The dual-filter with reverb is a great idea! Implemented well also, except I think I hear digital clipping.
Xtinct ·
Yeah the O's and U's in the filter can seriously boost the bass into clipping, thats the reason for the bass cut.
Will look into any other sources and upload any changes.
Wrote something here? To have a post removed or your name hidden, write to [email protected].