Surge: ChannelAT in some MPE modes

Created on 24 Sep 2019  Â·  7Comments  Â·  Source: surge-synthesizer/surge

MPE modes of various controllers can send various messages. Here's how the roli works

If you are in "Piano" mode in the roli dashboard, you choose 'press mode'.

If you set that press mode to 'channel pressure' then the roli delivers channel at on channel 0 and surge can correctly modulate based on channel AT, but doesn't modulate per voice.

If you set that press mode to 'poly at' then roli delivers poly at on each channel per key and surge can correctly modulate based on poly at even though the poly message arrives on channel 0, since the poly message has a key.

But if you are in "MPE" mode in the roli dashboard, what the roli does (and what I think the linnstrument does also, which is where this bug report first came from) is send channel AT on each channel.

SurgeSynthesizer::channelAT does the wrong thing in this case. The !mpe and channel == 0 falls through.

It's not entirely clear what the right thing is. ms_aftertouch is per voice sort of, but is a bit special. But clearly what should happen in this case is ms_aftertouch should be set per voice to the per-channel version of the AT based on the voice.

The bottom line is: this means channel AT acts unreliably or not at all, depending on your device, in MPE mode with MPE hardware.

Most helpful comment

OK so I actually made a second small change hence the slight delay

If you go to https://surge-synthesizer.github.io/#downloads you can see the nightly downloads in that section. You can grab the nightly from there which is our latest version and install it like normal.

For my test cases it fixes the problem and the patches you sent over seem to respond properly. Please do let us know!

All 7 comments

Problem exists in 1.6.0 beta 9 also; this is not new.

The channel state aftertouch is specially nhandled in surge voice - I think the error is there.

OK I now know the bug. Notes to self:

Basically channel aftertouch is not, in standard midi, a per-voice characteristic. It is per channel after all. As such, along with other per-channel things, the modulation routing appears in the scene routing table, not the voice routing table.

So what's happening in mpe mode is

  1. We get the channel aftertouch message
  2. Once we get it, knowing we have to do something special, we put it on channelstate. All of this is around line 737 of SurgeSynthesizer
  3. Then we get into the voice where we have a special case modulation source for ms_aftertouch
  4. We set this up properly in calc_trldata around line 358 of SurgeVoice
  5. But when we apply the modulation running over the modulation matrix, we only use the voice modulations. Of course. But those voice modulations don't contain the modulation map. So it isn't applied
  6. And where it is applied - around line 2261 of SurgeSynth - it is applied from the modulation source which is only set from channel 0 and not set in MPE mode

So the fix is something like "in surge voice in MPE mode scan the scene modulations looking for the modsource being channel AT pressure and then sub it with my modsource value"

Woof. That's a bit hacky but let me at least see if the hack version works then I can think about a less hack version.

OK once I saw the problem, it was straight forward to thread the MPE status through to the voice and grab the modulation out of the scene table for channel at in MPE mode. It is a very special case so I also added a comment :)

The nightly build is running now. We should have a new version of the synth available to test in 45 minutes or so. I'll ping when we do.

Wow— thanks! That’s excellent. I look forward to the ping.

On Sep 23, 2019, at 5:08 PM, Paul notifications@github.com wrote:

OK once I saw the problem, it was straight forward to thread the MPE status through to the voice and grab the modulation out of the scene table for channel at in MPE mode. It is a very special case so I also added a comment :)

The nightly build is running now. We should have a new version of the synth available to test in 45 minutes or so. I'll ping when we do.

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.

OK so I actually made a second small change hence the slight delay

If you go to https://surge-synthesizer.github.io/#downloads you can see the nightly downloads in that section. You can grab the nightly from there which is our latest version and install it like normal.

For my test cases it fixes the problem and the patches you sent over seem to respond properly. Please do let us know!

That fixed it— thanks!

I’ll try to make some new sounds, and maybe even a LinnStrument + Surge video sometime soon.

Best,
Roger

On Sep 23, 2019, at 6:10 PM, Paul notifications@github.com wrote:

OK so I actually made a second small change hence the slight delay

If you go to https://surge-synthesizer.github.io/#downloads https://surge-synthesizer.github.io/#downloads you can see the nightly downloads in that section. You can grab the nightly from there which is our latest version and install it like normal.

For my test cases it fixes the problem and the patches you sent over seem to respond properly. Please do let us know!

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub https://github.com/surge-synthesizer/surge/issues/1214?email_source=notifications&email_token=ABU7KZ7NVRHJCLO57QUCQLLQLFSJ5A5CNFSM4IZUIWZKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOD7MXBQA#issuecomment-534343872, or mute the thread https://github.com/notifications/unsubscribe-auth/ABU7KZZ5236KTGZGHLVDST3QLFSJ5ANCNFSM4IZUIWZA.

Wonderful.

I’ll do a point release later this week (1.6.2.1) and it will include this fix among a few others. If you end up with some sounds and videos, please do just drop me a note and we can figure out how to include it.

Best

Was this page helpful?
0 / 5 - 0 ratings

Related issues

baconpaul picture baconpaul  Â·  5Comments

tank-trax picture tank-trax  Â·  9Comments

itsmedavep picture itsmedavep  Â·  9Comments

ContemporaryInsanity picture ContemporaryInsanity  Â·  4Comments

baconpaul picture baconpaul  Â·  9Comments