Poly scanner/noob question?


#1

Just got the Axoloti, so expect tons of noob questions from me;)

-I am currently experimenting with a virtual analog design. I want it to be polyphonic and create a "voice card" for each voice.

Im thinking something like 4 voices. Is there a way to somehow define a counter, that on each gate inputs (starts with 1) and then adds +1 each time and then starts over when 4 has been reached?
And then i need a 4 way switch, controlled by the counter. The switch should pass through gate/midi notes on to the corresponding voice card.
Does that make sense? Its hard to explain:)

Basically i want one new voice card activated every time i press a key. It should cycle through 4 different ones.
Thanks:)


#2

im not quite sure what your trying to achieve... as you've not defined what a "voice card" is...
(and how it differs from a norm poly sub patch, which is a voice)

but inside a polyphonic subpatch, you have polyindex, which tells you which voice has been allocated for that note/gate etc. so that can be used creatively for varying routings per voice.


#3

Thanks. I'll try to explain it another (and in a better) way:)

Old analog synths would have a voice card. A singe board that contained all the things for a monosynth.

The jupiter 4 for instance had 4 voice cards. Each card had 1 vco, 1vcf, 1vca etc. A full analog synthx4.
It would the scan the keyboard to see what keys were pressed and cycle through and activate each voice card.
So if you press one note 4 times after each other you would cycle through each 4 voice cards. If you made a 4 note chord all the voice cards would play at once.

I am trying to make a polysynth with slight variations (osc drift, filter variations etc) per voice card.
So essentially 4 mono synths. I then need something to assign midi/gate etc to each of the cards, one after another.
Does that make sens?
:smile:


#4

so you could use polyindex for deriving things which you want a 'calculated difference'

but from what your saying these slight variations can be introduced by an appropriately scaled (= quite small) random variable into filters etc... remember every voice is already a separate instance of the patch, so the random will be different for each.

note: you can also introduce a one off random element by calculating this when the patch 'loads', this will mean each voice gets a different offset.

from memory (I'm not 100% sure, its a while since i looked at the code!) the voices are allocated in rotation, such that the oldest voices is used - this is quite common as a strategy, as it means envelope release tails, voice echoes/reverbs etc can be allowed to ring out for as long as possible.

have you tried this?


#5

Hmm. Just made a polyindex object inside the poly subpatch and connected a disp/hex to it to see the values that i play on the keyboard, there is no change in the display. It always reads 0xxxxxxx


#6

And by the way, i already have some random parameters set up to control the oscillators. A sh circuit where the speed of the sh is controlled by another sh circuit:)


#7

but how can you see all instances of a poly objects :wink:

here try this patch... pitest.axp (4.3 KB)

its a trivial example, just just plays the note you play, plus an interval based on the voice.

when i tried it (quickly) it sounds like there may be a minor issue with channel rotation, it sounds like it goes 1,2,3,4,1,1,1,1,1 , though it also acts a bit differently if you change notes.
(theres also a possibility its my patch, but looks ok to me)

sorry, I dont have time to look into this any further, hopefully in a musical context it wont be so obvious.


#8

You da da man! I'll check it out! THANK YOU!


#9

Ok. Fiddled around with it yesterday evening and got it partially working (only partially because of a brain fart that i realised before i went to bed).

technobear you mention that:

"note: you can also introduce a one off random element by calculating
this when the patch 'loads', this will mean each voice gets a different
offset."

How would you go about this? what objects would you use?

If i go down the "one polypatch with random built in" - path, as you suggest, i might be facing some problems.

I would like a common control to adjust the amount of "uncertainty" between the voices.
One master parameter could be "random amount" (which adjusts the amount of modulation a S/H cricuit would affect the VCO drift).
Another could be "Random Keyboard Tracking" (which will add or subtract a small number to the octave tracking for each voice. So one voice tracks perfectly and the other one is slightly below one octave, the next slightly above etc.

Both of these parameters should control all voices but in different ways for each voice (a random amount for each voice). My question is not how to implement the "one master control for a certain randomisation parameter within one voice". That would be easy if i made, say, 4 discrete voice patches. But if i only have one polyphonic, how would I acces that parameter realtime?

Does that even make sense? I'm very bad at explaining this, i know:)
Thank you SO much for your time:)


#10

I'm investigating this... stay tuned :slight_smile:

Found and fixed in the development git repository, soon in a fresh release...


#11

I mentioned earlier that i thought i had got the thing working, but i still havent.
I just experiemnted further I would a like a numeric readout from the polyindex, just to see whats going on.
I guess there is something fundamental i dont understand still.. If i make a poly subpatch and i want to view the value that is being triggered/sent out by the polyindex, i dont know what to do.

I make an integer outlet inside the poly subpatch and connect the polyindex to the integer outlet. Outside the patch i then connect a disp/integer, to the integer outlet and i only get the number 6 all the time. This is with poly set to 4. If it set to 2 then the integer out value is 1.

This is by using your pitest by the way:)

Yeah i know im asking a lot of questions, but i just cant seem to get 4xmono synths playing as a polysynth. And still (as i asked in my latest post), maybe there is a way to only have one polyphonic voice, but still acces certain randomization parameters.

And i just saw Johannes fixed the bug he mentioned above. THANKS! but is there another "manual" way to do poly scanning? Something like this: Each gate adds a +1 to a counter. When 4 has been reached it should start over counting.

The counter should control a 4 way switch. The switch should behave like this: if counter=1, go to position/switch 1. If counter=2, go to position/switch 2.
The switch should have the midi signal connected on its input side, and the oscillator pitch on the other side.
Then you could have a duplicate of that arrangement, but just control the gate signal instead, and then you would have a working solution. Right?

Thanks people!


#12

The outlet on a polyphonic subpatch gives you the sum of the outlet values of each voice inside.
So for 4 voices: 0 + 1 + 2 + 3 is 6.
It's hard to inspect a value in a single voice of a polyphonic subpatch, can only be done by adding explicit logic to your subpatch:

I think voice allocation is difficult to express by patching together primitive objects.
It is more complex than a counter, if you hold one note, while playing a melody I'd expect the held note to stay playing as long as possible.
Generally I believe that polyphonic subpatches allow to do what you intend.


Sub Patching Topology Question
#13

Thanks Johannes. I'll look into it:)