From the original SynthMaker forum (2004–2014), with its members’ names and dates.
lg ·
Something important I'd like to know about is how SM manages polyphonic operation.
What module allocates voices? Maybe the MIDI to Poly? What happens exactly to modules when a new note begins?
How and why are oscillators turned off by note off messages? I'm used to oscillators that oscillate forever (SynC Modular, SynthEdit, Reaktor...) and are then multiplied by an envelope to hear notes, those in SynthMaker are too smart.
What is the maximum number of voices? What happens when it is exceeded?
If voices are stolen from old notes, how are they selected?
How does SM decide that a note is finished and its voice can be recycled?
jorge ·
Hi lg, welcome to the forum and thanks for your questions.
lg wrote: What module allocates voices? Maybe the MIDI to Poly? What happens exactly to modules when a new note begins?
-No notes playing
-NoteOn arrives at MidiToPoly
-MidiToPoly creates a new SSE sound process ( each SSE sound process is used to process 4 notes at a time )
-MidiToPoly initialises the new sound process data
-Second NoteOn arrives
-MidiToPoly notices that there are still 3 available channels in the current sound process so takes one for the second note
-MidiToPoly initialises the second channel of the sound process
etc
lg wrote: How and why are oscillators turned off by note off messages?
-NoteOff message arrives at MidiToPoly
-MidiToPoly checks to see if it has a channel already playing that note
-MidiToPoly finds a channel playing that note and starts release stage
-When release stage is finished MidiToPoly receives a notification message
-MidiToPoly frees the channel and if it is the last channel in a sound process it removes the whole sound process.
I dont see any point in having CPU processing notes that are not playing.
If you want something to be constantly running like an effect for example, just put it in the mono section of the schematic.
lg wrote: I'm used to oscillators that oscillate forever (SynC Modular, SynthEdit, Reaktor...) and are then multiplied by an envelope to hear notes, those in SynthMaker are too smart.
Isnt that a waste of CPU?
lg wrote: What is the maximum number of voices?
No limit. Whatever number your computer can handle.
lg wrote: What happens when it is exceeded?
🙂 That would mean you'd have reached infinity and beyond, if it happens to you I'd really like to know how it feels.
lg wrote: If voices are stolen from old notes, how are they selected?
At the moment there is no Note management, it's a feature a lot of early adopters have already requested. It's rapidly moving up in the list of priorities, probably wont take long.
lg wrote: How does SM decide that a note is finished and its voice can be recycled?
On NoteOff the release stage begins. When all the releases of all the ADSRs that have the last input ( that's the hold boolean input ) set to true have reached zero the note is finished .
stefan ·
Just want to add one small thing 🙂
Oscillators themselves no nothing about that they are playing a note. They only exist within a polyphonic voice and there's no difference between oscillators / filters / whatever that reside within that process. Oscillators doesn't really stop when they are finished, they are totally removed from the synths process, and same applies for anything within the poly section. Basicly what Jorge said, but with totally different semantics... 🙂
infuzion ·
jorge wrote:
lg wrote: I'm used to oscillators that oscillate forever (SynC Modular, SynthEdit, Reaktor...) and are then multiplied by an envelope to hear notes, those in SynthMaker are too smart.
Isnt that a waste of CPU?
Maybe
But if you want a LFO to modulte say a filter, & you want that filter to allways be occelating regardless of input so when you do turn on a note you can catch it at a (pesudo-random) point mid-way, then you need something to be outputing a constant stream. I do this sometimes myself in Buzz.
Shifrin ·
I think the technical term is 'Free-running' oscillators, and from what I understand they have their uses 🙂
Shif.
jorge ·
Shifrin wrote: I think the technical term is 'Free-running' oscillators, and from what I understand they have their uses 🙂
Shif.
Indeed and that's why you have them in SM. An oscillator connected to a mono section of the schematic is free-running.
Maybe what's missing is a MonoToPoly so that you can use a free-running oscillator to control a poly section of the schematic. The way the sound engine works that component is very easy to implement and it has been planned already.
Shifrin ·
Thanks for the info jorge!
Shif.
lalo ·
I think the technical term is 'Free-running' oscillators, and from what I understand they have their uses Smile
yesss
Indeed and that's why you have them in SM. An oscillator connected to a mono section of the schematic is free-running.
Maybe what's missing is a MonoToPoly so that you can use a free-running oscillator to control a poly section of the schematic. The way the sound engine works that component is very easy to implement and it has been planned already.
and yesssss 🙂
free running oscillator are definitely a must for many synthesis tricks 🙂
(even some sort of 'analog emulation' where the osc aren't triggered by keyboard..the ADSR/Gate is 😉 )
Sk ·
Maybe my question is now futile. Is it possible to have an oscillator that works as a generator? Let's say I enable a swtch and the osc starts oscillating endlessly (well, till I turn the switch off).
jorge ·
Sk wrote: Maybe my question is now futile. Is it possible to have an oscillator that works as a generator? Let's say I enable a swtch and the osc starts oscillating endlessly (well, till I turn the switch off).
[old link]
infuzion ·
Seems to me in the example above, that the sine is still running, just the audioable output is muted? I would think that if an OSC has values connected in, & a connected out (even if nulled), then the OSC is running. If that's true, would this be a better OSC switch?:
jorge ·
infuzion wrote: Seems to me in the example above, that the sine is still running, just the audioable output is muted? I would think that if an OSC has values connected in, & a connected out (even if nulled), then the OSC is running. If that's true, would this be a better OSC switch?:
Your version would still have the sine osc running all the time, I think what you're trying to do is the following:
[old link]
Notice the code for the sine oscillator moving in and out of the compilation when you press the switch. Now when the switch is off the sine osc uses no CPU at all.
infuzion ·
jorge wrote: Notice the code for the sine oscillator moving in and out of the compilation when you press the switch. Now when the switch is off the sine osc uses no CPU at all.
Yep, there we go. cheers
However, I hear a distinct poping sound when I turn it off & on. Most likely the same as this bug
jorge ·
infuzion wrote: However, I hear a distinct poping sound when I turn it off & on. Most likely the same as this bug
Yeah, I did a schematic that would show you how to do the switching without any clicks in the sound but because of the bug it didnt work. I'll try to fix the bug very soon, I'll let you know.
lg ·
Thank you for the nice answers, but I still find oscillators too smart for their documentation.
Gated oscillators are not a significant limitation by themselves, but how does the ADSR override the default hidden envelope? Jorge is not very explicit.
jorge wrote:
lg wrote: How and why are oscillators turned off by note off messages?
-NoteOff message arrives at MidiToPoly
-MidiToPoly checks to see if it has a channel already playing that note
-MidiToPoly finds a channel playing that note and starts release stage
-When release stage is finished MidiToPoly receives a notification message
-MidiToPoly frees the channel and if it is the last channel in a sound process it removes the whole sound process.
The mentioned release stage has to be either the default one or the ADSR's one according to whether an ADSR is present; like the attack stage, it is triggered behind the scenes by MIDI events.
- What if there are more ADSR modules? What are their scopes?
- If the ADSR module is magic, how can a user build custom envelopes?
In Synthedit and in Reaktor envelopes have a simple gate signal as input, without hidden communications: building custom envelopes or adapting the library ones is easy.
infuzion ·
lg wrote: Gated oscillators are not a significant limitation by themselves, but how does the ADSR override the default hidden envelope? Jorge is not very explicit.
There is no "hidden envelope". An OSC is either on by feeding the freq input with a value greater than 0, or off otherwise.
unkargherth ·
infuzion wrote: There is no "hidden envelope". An OSC is either on by feeding the freq input with a value greater than 0, or off otherwise.
Not really true. If you feed nothing to an osc freq but feed for example the ramp polyout into osc pahse in, the osc works perfectly
By now ADSR gets "automagically" triggered on Mini Note On and Stops on MIDI note Off, except if Hold INn is true. In these situation ADSR start to linearly decay from sutain point to 0 , and decay is exacly Release number of samples. In that moment the voice is stopped
Wrote something here? To have a post removed or your name hidden, write to [email protected].