Polyphony example?


#1

I'm trying to figure out how the polyphony works, but actually, I have no clue on how this works.
So my request is this:
could someone make a small tutorial/example to explain how to do this:
a simple 2 voice synth, both voices in unison, but the second voice is always pitched 1octave higher.


#2

ok, the simple (but slightly incorrect) answer, is you cannot do this.

voice allocation is done by midi note, which is done in the midi handler in the parent patch.
so you need midi note to invoke a voice....

the normal way to do unison is to put the oscillator in the same patch

BUT i said, this was the simple but incorrect answer

the reason is, you are able to generate midi, and send it via the 'internal' bus, so i this way, you can create your new midi note, and it will then be sent to the subpatch and allocate a voice accordingly.
(not tried, but this should work fine)

but I don't think it would be too difficult for us to create a new subpatch type, that allow explicit routing.
(the main issue being the inlets currently go to all voices, so it would have to somehow 'stall' these and only send to the active voice ... remember we are using midi as the routing currently which is a different handler)


#3

Do you mean a two oscillator mono synth?
Or do you really want every note to allocate two voices, where the 2nd voice is one octave up?

You can get the voice number in a polyphonic subpatch through the "patch/polyindex" object.

I don't understand the use case or how that 'd work.


#4

What I mean is an example to get started, because I cant find any info on how to use 'polyindex' and 'polyphonic subpatch' ...

yes.
What I (eventually) want to create is something like this (korg volca keys):


#5

multi voice subpatch...

well the use case is quite simple... anywhere where you don't want the voices/notes to be from midi
the unison is a reasonable example, but others could from sequencers sending in note inputs...
also should we want to move midi to a 'wire', then this might also become a use case. (depending on implementation)

how would it work...
well i would envisage, it working in a similar way to the way poly~ works in max, its pretty simple and works very well (its a fairly simple switch (with 0 for all) that determined where current control messages go).
the best part is it means you can design your own voice allocation algo, which is actually very handy. (there is more than one reasonable way to handle the 'running out of voices' scenario.

the current midi/subpatch type routing is absolutely fine for most scenarios, after all most voices originate from midi, but it we get into algorithmic poly patches, then going via midi is arguably not the most efficient way.


#6

This tutorial shows how to make a poly synth: https://www.youtube.com/watch?v=d7Xv99v1RwI
There are also quite some examples provided,
Menu File->library->demos->synth ...

I would not call Volca polyphonic, with only one envelope and one vca. That Volca knob is changing the routing quite a bit. This is easier expressed in separate patches.


#7

Custom voice allocation schemes: I can certainly see the use for that. I believe these things are better expressed in code than by a patch.

Poly~: Max uses control messages, Axoloti does not have this concept. Manipulating parameters of individual voices is a (currently unexposed) possibility.


#8

yes, the main difference being that on 'one control rate loop' you can actually send multiple messages in max/reaktor etc,
otherwise its pretty close. to having an voiceIdx inlet, i.e. it can work, but is not as flexible as max.

(i do understand that creating multiple paths , e.g. like the trigger object in max/pd would be quite difficult in axoloti)


#9

Maybe I'm doing something wrong...
I've followed the youtube demo, saved the patch as voice.axs, and created a new one, but when I start to type ./ to the browser, nothing shows up :frowning:
I'm sure that it must be a folder problem, I'm from Mac.
Is there a way to manually link the subpatch?


#10

Nope, tried several times, doesn't work for me.
Every time I start typing ./name, I get a demux object :frowning:


#11

You can use patcher object instead of subpatch. Copy/paste stuff from your subpatch into patcher object, then go to patcher settings and set everything like for subpatch and then push update button on patcher.


#12

Did you save the new patch you've created in the same directory?


#13

Did anyone get this working? I cant get it working either. I go to settings and set patch to be subpatch polyphonic.
I then save it. Named AAVoice in folder X
I then make a new patch named AASynth. Save that in folder X
I go into the AASynth pach and press space to get the browser. I type AAVoice and nothing happens.

EDIT: Got it working by using Kaustos suggestion

Thanks:)


#14

Meh. Thought i got it working, but I didnt. I dont see any option to change polyphony on the master patch. Weird. It worked earlier?!? Might just copy the poly patch from the examples project and work on that.


#15

Try these steps:

  1. create new patch
  2. create "patch/patcher" object
  3. click on the edit button in the "patch/patcher" object, new patch window opens
  4. in the "View" menu, choose "settings", patch settings dialog appears
  5. select Subpatch mode:polyphonic
  6. close settings dialog
  7. go to the top-level patch (from step 1)
  8. click the "update" button in the "patch/patcher" object, "poly" popupmenu appears in the "patch/patcher" object
  9. now let's add an outlet object
  10. click "edit" in the "patch/patcher" object, the patch window from step 3 appears on top again.
  11. add a "patch/outlet a" to that patch
  12. go back to the top-level patch (from step 1), click "update" in the "patch/patcher" object, and the corresponding outlet appears in the "patch/patcher" object.

Using a "patch/patcher" object avoids maintaining file-references, the top-level patch will also contain the sub-patch.


#16

Might help visually @the19thbear ...
Great step thru @johannes ;-



#17

Great. Thanks to both of you:)
I had missed the step where I had to open the polypatch and click settings. I thought I only had to select the polypatch, not open it. Working now.
Thanks again:)


#18

Just to make sure, when making polyphony with subpatchers, we can only activate/deactivate voices using MIDI, right? So, currently, we can't use an internal axoloti sequencer to trigger a polyphonic patch. Thanks for confirming.


#19

If you use polyphonic expression then each voice is on a different midi channel.


#20

Thanks. Actually, I want to make sure that to use a polyphonic subpatch, we need MIDI or MPE. We can't play voices in a polyphonic subpatch from, say, an axoloti sequencer mechanism, without MIDI input to axoloti. Right?