If you have a problem or need to report a bug please email : support@dsprobotics.com
There are 3 sections to this support area:
DOWNLOADS: access to product manuals, support files and drivers
HELP & INFORMATION: tutorials and example files for learning or finding pre-made modules for your projects
USER FORUMS: meet with other users and exchange ideas, you can also get help and assistance here
NEW REGISTRATIONS - please contact us if you wish to register on the forum
Users are reminded of the forum rules they sign up to which prohibits any activity that violates any laws including posting material covered by copyright
Prototype - Free running poly oscillators
Re: Prototype - Free running poly oscillators
adamszabo wrote:Ok I managed to make it work. Hmm, I think you guys are not doing it the correct way, or at least the way it works in every other synth. When I have two oscillators slightly detuned, their phase offset should follow their relative frequency speed. But in the examples posted, it seems random, so one might as well just use a random number generator which is much simpler. I have posted an example of what I think it should be like. Each oscillator should have its own accumulator that is the same speed as the ramp itself, and when one stops playing a key and starts again, the phase should continue where it left off.
Unfortunately since I had to use mono even though its poly it sounds best only with mono voices
Thanks for the feedback. The aim is to get this working exactly like any other synth. I think the problem is in the implementation I have chosen, the phase is stored per note as opposed to per voice. I thought this would simulate the effect effectively. But I think other synths don't do it this way.
Of course free running oscillators in the mono section or with only one voice is easy for obvious reasons. The problem with poly is we don't have proper access to the voices and so requires some serious hacking .
Free running oscillators is the holy grail for me, no point in progressing with my synth without so gonna put everything into making this work right.
- Exo
- Posts: 426
- Joined: Wed Aug 04, 2010 8:58 pm
- Location: UK
Re: Prototype - Free running poly oscillators
KG_is_back wrote:Yes, that is the thing I have proposed. Current version saves the pases per pitch - so the phase will be recalled only when you press the same key - other keys have their own phase storages.
I have proposed a way that'll use memory queue to store phases. It would be a circular buffer. Every time you release the key, the phase is stored in the queue and queue end is increased by 1. Every time you press a key, the phase is recalled from queue start and start point is increased by 1. If start and end point are identical (which means queue is empty) zero phase is recalled instead.
Yes this sounds like a workable solution
- Exo
- Posts: 426
- Joined: Wed Aug 04, 2010 8:58 pm
- Location: UK
Re: Prototype - Free running poly oscillators
Im glad others want free running oscs as well I am working very hard on a synth too, and this is a big deal for me, so lets band together and hack this thing
- adamszabo
- Posts: 667
- Joined: Sun Jul 11, 2010 7:21 am
Re: Prototype - Free running poly oscillators
Here this one should work. However it is just a prototype so don't expect 100%performance and stability.
A BIG NOTE:
The mem->pointer converter is not 100%stable, because analyzer is quite buggy. Whn you open the schematic, connect a float to the pointer output. If it shows random number it should be working. If it outputs zero, then go inside the module, delete the analyzer primitive and replace it with new one (and don´t forget to connect it the same way it was). Reconnecting the analyzer will not help... you have to delete it and put in new one. After you do that the output of the module should be nonzero random float number.
A BIG NOTE:
The mem->pointer converter is not 100%stable, because analyzer is quite buggy. Whn you open the schematic, connect a float to the pointer output. If it shows random number it should be working. If it outputs zero, then go inside the module, delete the analyzer primitive and replace it with new one (and don´t forget to connect it the same way it was). Reconnecting the analyzer will not help... you have to delete it and put in new one. After you do that the output of the module should be nonzero random float number.
- Attachments
-
- Free running poly osc 2.osm
- (12.16 KiB) Downloaded 1406 times
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
Re: Prototype - Free running poly oscillators
Cool, it almost works. The best way to test it is to have two saws and only slightly detune them so we can actually hear the phase difference. when you open the Schematic, it works great, but if you start detuning them and pressing some keys, the phase will get messed up after a while and it will be wrong for some reason.
- Attachments
-
- Free running poly osc 2.fsm
- (146.65 KiB) Downloaded 1369 times
- adamszabo
- Posts: 667
- Joined: Sun Jul 11, 2010 7:21 am
Re: Prototype - Free running poly oscillators
Double check whether both mem to pointer modules work correctly when desync happens. When they don't both phase writing and recalling will be bypassed.
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
Re: Prototype - Free running poly oscillators
KG_is_back wrote:Double check whether both mem to pointer modules work correctly when desync happens. When they don't both phase writing and recalling will be bypassed.
Im still having a hard time understanding your mem read/write hack, so I am not sure what to check for when this desync happens exactly.
- adamszabo
- Posts: 667
- Joined: Sun Jul 11, 2010 7:21 am
Re: Prototype - Free running poly oscillators
the pointer module should output nonzero value.
- Attachments
-
- memtop.png (57.99 KiB) Viewed 32352 times
- KG_is_back
- Posts: 1196
- Joined: Tue Oct 22, 2013 5:43 pm
- Location: Slovakia
Re: Prototype - Free running poly oscillators
KG_is_back wrote:Here this one should work. However it is just a prototype so don't expect 100%performance and stability.
A BIG NOTE:
The mem->pointer converter is not 100%stable, because analyzer is quite buggy. Whn you open the schematic, connect a float to the pointer output. If it shows random number it should be working. If it outputs zero, then go inside the module, delete the analyzer primitive and replace it with new one (and don´t forget to connect it the same way it was). Reconnecting the analyzer will not help... you have to delete it and put in new one. After you do that the output of the module should be nonzero random float number.
Nice work .
I am currently developing a totally different way of doing this now which I think will work better going forwards. The analyser is a clever hack but as you say it is buggy.
Basically each oscillator has its own constantly running mono ramp which is set at a very low constant frequency. The frequency of the ramp is adjusted from a detuner(which is also detuning the osc). Each voice is using this same ramp but each note played samples the phase at different points so the phase for each note will be different but related.
Although not technically 'correct' I think this method is creating the sound one would expect from true free running oscillators.
I am going to do a few more tests and post this up tomorrow.
- Exo
- Posts: 426
- Joined: Wed Aug 04, 2010 8:58 pm
- Location: UK
Re: Prototype - Free running poly oscillators
Ok here is my latest prototype...
It is very similar to the example that you posted adamszabo, but with some tweaks.
This method I think recreates how the phase on a DCO(Digitally controlled Oscillator) works. Basically each osc has it's own phase which comes from a 'master clock' this phase is the same for all voices. DCOs use a master clock to keep all the voices in tune which also means they have the same phase so to recreate a DCO we don't need to worry about setting the phase per voice just per osc. This sounds good to me and I reckon will be how many soft synths do it.
Each 'master clock' has a slightly offset phase from each other which enables that phasey sound and I change the frequency of the clock when detuning to offset/change the phase further. Let me know if this sounds OK to you.
It is very similar to the example that you posted adamszabo, but with some tweaks.
This method I think recreates how the phase on a DCO(Digitally controlled Oscillator) works. Basically each osc has it's own phase which comes from a 'master clock' this phase is the same for all voices. DCOs use a master clock to keep all the voices in tune which also means they have the same phase so to recreate a DCO we don't need to worry about setting the phase per voice just per osc. This sounds good to me and I reckon will be how many soft synths do it.
Each 'master clock' has a slightly offset phase from each other which enables that phasey sound and I change the frequency of the clock when detuning to offset/change the phase further. Let me know if this sounds OK to you.
- Exo
- Posts: 426
- Joined: Wed Aug 04, 2010 8:58 pm
- Location: UK
Who is online
Users browsing this forum: No registered users and 31 guests