Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unison mode #315, add a "All TG" menu #396 #405

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

abscisys
Copy link

@abscisys
Copy link
Author

Addition of a "Unison" menu entry right after the Effects one that contains:

Enable: true/false
All TG: for a global edit of all parameter of all TGs. 2 exceptions: Pan and Detune that both represent the spread of respectively the Detune and Pan params. Note that when enabling Unison, this is TG1 that serves as a template for the other TGs 2 to 8 so that appart from Detune and Pan all the other params of TG1 are copied over to other TGs 2 to 8

@abscisys
Copy link
Author

abscisys commented Jan 5, 2023

Any interest on this one: Unison + AllTGs menu? Feedback would be appreciated.

@probonopd
Copy link
Owner

probonopd commented Jan 7, 2023

Sorry for the late replay due to travel.

Currently have 8 TGs that can play different instruments each, OR can be used to play multiple instances of the same instrument, slightly detuned and stereo-panned. Each of those TGs can play 16 notes (RPi1: 8 notes) at the same time (polyphony).
Which means:
8 TGs * 16 notes polyphony = 128 notes in parallel

This PR essentially configures multiple TGs to work together to create the Unison effect more easily (instead of the user having to configure the TGs detune and stereo-pan).

What I'd like to have instead is for each of the TGs to be able to have their own unison effect, possibly at the cost of reducing the number of notes that can be played at the same time, and/or at the cost of having fewer TGs.

For example:
Would it be possible for TG1-4 to have "4-way unison" with with 8 notes polyphony?
4 TGs * 4-way unison * 8 notes polyphony = 128 notes in parallel. And since not all TGs would probably be maxed out all the time, we might possibly not even have to limit the polyphony in practice.

Reading https://www.native-instruments.com/forum/threads/simulating-dx-7ii-unison-poly-mode-closely.70366/ it seems like the DX7II "unison poly" feature was essentially doing something like this, adding the union effect at the expense of limiting the polyphony (instead of using up more than one TG).

Also, modern Yamaha synths are doing it like this:

FM Unison is a cool setting for lead sounds found in many classic FM Synthesizers. Unison adds a thickness and spaciousness to the sound by duplicating notes when a single note is played. This setting is available only FM Voices.
Mode: Selects the number of notes played when a single note is struck. When set to “Off” only one note is played. When set to “2 Unison” the note is duplicated twice; when set to “4 Unison” the note is duplicated 4 times. Default: Off
Detune Determines the difference in pitch between the two or four notes, which affects the degree of thickness of the sound. Detune adds a cool chorusing effect. Default: 0
Spread: Determines the difference in panning between the two or four notes, which adds a nice spaciousness to the sound. Default: 0

Do you think we could keep our 8 (on lower power RPis maybe 4) TGs, and have 2-way and 4-way unison available for each of them? In other words, could we have a "Unison" submenu in TG1-8 with Mode (Off, 2-way, 4-way), Detune, and Spread settings?

@abscisys
Copy link
Author

abscisys commented Jan 7, 2023

Hello @probonopd
Thanks for your reply! No problem, and ahappy to have your feedback.
I understand the intention with the unison at TG level using polyphony of the TG rather than spreading it across TGs. Only difference with this approach is that the unison will therefore be monophonic while in the proposition it is 16 voices of polyphony. But point taken. Will rework on that.

@probonopd
Copy link
Owner

Hi @abscisys what do you mean by "unison will therefore be monophonic"? It should still be possible to play more than one note at a time?

@abscisys
Copy link
Author

abscisys commented Jan 7, 2023

Ah ok your question makes me understanding your example

Would it be possible for TG1-4 to have "4-way unison" with with 8 notes polyphony?
4 TGs * 4-way unison * 8 notes polyphony = 128 notes in parallel. And since not all TGs would probably be maxed out all the time, we might possibly not even have to limit the polyphony in practice.

@probonopd probonopd changed the title Implementation proposition for: #315 and #396 Unison mode #315, add a "All TG" menu #396 Jan 20, 2023
@probonopd
Copy link
Owner

HI @abscisys do you think you could make it happen like in the example? Thanks for your help.

@abscisys
Copy link
Author

abscisys commented Apr 3, 2023 via email

@probonopd
Copy link
Owner

Hi @abscisys. No hurries! Glad that you are still interested in the project.

I think that using performance data for unison and similar effects is ok, like we are doing for reverb.

@diyelectromusic
Copy link
Collaborator

diyelectromusic commented May 1, 2023

Hi there. I've just been having a look at this change. As I understand things this is I think what it is currently doing:

  • Adds a Unison Menu with two items: Enable/Disable Unison mode; All TG Parameter Edit; unison pan/detune settings.
  • When Unison mode is enabled it copies all parameters from TG0 over to TG1-7.
  • When a parameter is changed under the all TG edit option, it uses a special TG number (100) that is caught in all the appropriate places to "send" the parameter update to all TGs at the same time.
  • Unison pan/detune are only partially implemented right now I think? Update: Ok, maybe it is all there, but there are unactive higher level menus for them, which seem to have been replaced with "all TG edit" menus now - is that right?
  • Unison settings (on/off, pan, detune) are stored in the performance system.
  • Unison and "all TGs" are not recognised as such via MIDI, although enabling Unison mode will result in all TGs having the same channel number, so in principle anything coming in over MIDI should now go to all TGs anyway?

Is that a correct reading of the updates?

A few things I notice:

  • I think there is a minor bug when enabling unison mode, the loop includes TG0 in the copy :)
  • Am I right in thinking that any original, non "all TG edit", editing will change individual TGs regardless of the Unison setting? So enabling Unison is more of a "at this point in time" rather than "instrument now in Unison mode"?
  • In Unison mode, editing TG0 doesn't replicate to other TGs, you have to use the "all TG edit" menu?

In terms of some of the discussion in this thread - I don't think we should be changing the SysEx format as that is very much "within a single TG voice" remaining compatible with the DX7. If Unison mode is used, then I think that is ok to be considered a special type of performance as it affects the whole system.

With regards to the idea of increasing TGs at the expense of polyphony, I think that will be quite a complicated thing to manage and implement. This proposal is a really good first step as it allows the effect at a system level for the MiniDexed to be a whole playable instrument.

In the future, it might be possible to consider "sub TGs" for each "main TG" at the expense of polyphony, but that would be a TG specific setting not a whole instrument setting. It might be something interesting to experiment with. But I'm not sure why that would be called a "unison mode". And a good part of me wonders if that could be achieved with some kind of chorus effect, as I think that is kind of what we're talking about I think?

Either way, I think the Unison/all TG changes ought to be completed first, as they are useful and good changes in their own right. Then we can consider any sub-TG type tradeoffs against polyphony as a new set of changes?

Kevin

@diyelectromusic
Copy link
Collaborator

diyelectromusic commented May 1, 2023

Aside: trading polyphony for additional (sub)TGs is probably quite possible, but at the moment this is all fixed at boot time here:

m_pTG[i] = new CDexedAdapter (CConfig::MaxNotes, pConfig->GetSampleRate ());

So whilst I think it could be done, at present this would have to be a "reboot to take effect" type of setting I think... Then there will be lots of places where anything acting on a single TG would have to perform the same action on sub-TGs too. It might all mostly be constrained to MiniDexed.cpp, but it does do it rather a lot :)

Update: another place to do it might be in the DexedAdaptor itself, but that would require duplicating lots of the Dexed functions, but it would be more transparent to MiniDexed done that way.

I don't know what it would do for performance though, there will be an overhead from having more instances of Dexed running as things like getting and combining samples has to be done for each one. At present, Dexed returns the current required sample to play and has already sorted out the polyphony and so on. MiniDexed is just mixing and applying effects. Having more instances of Dexed will make that a lot more complicated, depending on where the mixing is done and where exactly the effects have to be applied.

I guess what I'm saying is that, it might not be a straight forward tradeoff of polyphony to TGs - there will probably be a performance issue with more TG instances being processed even with less polyphony each.

Kevin

@probonopd
Copy link
Owner

probonopd commented May 1, 2023

Thanks for your review @diyelectromusic.
What I was trying to say is that when I was thinking of "unison", I intended it to work a bit more like on the DX7II - that is, when you enable Unison on TG1 it would not affect TG2-8 (except maybe reducing their polyphony). Maybe we should have a closer look at the DX7II and how it handled Unison, also MIDI-wise? Or would this be overengineering it, and should we rather go for TX816 style TG behavior?

@diyelectromusic
Copy link
Collaborator

Thanks for your review @diyelectromusic. What I was trying to say is that when I was thinking of "unison", I intended it to work a bit more like on the DX7II

Yes I think I know what you mean, hence my comments:

  • This should probably be closed off "as is" here, as useful in its own right, but not quite what you were after.
  • What you are after I think will be a bit more complicated (as per my second comment).
  • There might be a performance hit from what you'd like.
  • I'm still not quite clear how it is different to a chorus effect :)

I agree it would be a cool thing to look at, but there might be limitations given the current architecture of MiniDexed if it is possible :)

Kevin

@probonopd
Copy link
Owner

probonopd commented May 1, 2023

Thanks for the clarifications @diyelectromusic.

I'm still not quite clear how it is different to a chorus effect :)

Making Mono Synths Stereo - Chorus vs Double Tracking with Oberheim OB-X8

Edit: Actually I am not 100% sure whether the same difference is there for digital synths

@diyelectromusic
Copy link
Collaborator

Of course, when availability issues for the Pi eventually subside, there is always the option of several MiniDexeds working together :) I think one could get quite far with a couple of 3A+s...

(I'm now wondering about the MiniDexed UI generating MIDI CC/SysEx messages that could pass through to another MiniDexed....)

Kevin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants