surge-synthesizer / surge

Synthesizer plug-in (previously released as Vember Audio Surge)
https://surge-synthesizer.github.io/
GNU General Public License v3.0
3.15k stars 400 forks source link

Implement MIDI Program Change support #576

Closed mkruselj closed 1 year ago

mkruselj commented 5 years ago

Right now Surge doesn't respond at all to Program Change messages. Eventually this would be a great thing to have, especially for live performance.

I hold u-he plugins as the gold standard here. Here's an excerpt directly from the manual for one of their super-popular synths, Zebra 2:

"MIDI Programs As well as factory presets, ‘Local’ also contains a special folder called ‘MIDI Programs’. When the first instance of Zebra2 starts, all presets in that folder (up to 128) are loaded into memory so they can be selected via MIDI Program Change messages. It is best to rename them to be sorted by number e.g. ‘000 rest-of-name’ to ‘127 rest-of-name’. ‘MIDI Programs’ can contain up to 127 sub-folders, switchable via MIDI Bank Select messages (CC#0). Send Bank Select first, then Program Change. ‘MIDI Programs’ itself is bank 0, then sub-folders are addressed in alphabetical order starting with bank 1. Important - ‘MIDI Programs’ cannot be added, removed or renamed on the fly – any changes to that directory will only be updated after the host application is restarted."

mkruselj commented 4 years ago

image

This seems to literally morph between scene A into scene B parameters, depending on some morph amount slider?

I think a more realistic method of doing morphs in Surge is how Alchemy does it: you have 8 macros, you assign them to stuff, and then you have 8 snapshots of those macros in different positions, which are then morphable via XY pad.

But... morphing is a separate issue.

Richie-X commented 4 years ago

Here is a short workaround for those who want to switch a limited number of patches (VST2 only):

The patches can then be invoked via MIDI (controller 0 = 0, patch change)

BTW thanks to all programmers for this great piece of software !

And yes, it is a shame how Steinberg ruins standards which have been working fine since decades ...

K0rrid0r commented 4 years ago

wooot! that actually works? how did you figure that out?

baconpaul commented 4 years ago

right the vst2 and au both traverse in index order sorted by category. as long as don't create 000-MIDI or ^00 or some such you will be fine.

Richie-X commented 3 years ago

Hi Paul, I was wondering if this simple compromise could be simplified even more by adding it to the patch browser functionality ? What I try to express is the whish to enable the "00-MIDI" folder idea in the patch browser as well. Currently the patch browser neither includes nor supports the creation of a "00-MIDI"-folder (in the "factory patches" area). It would be nice if the detour via the host's vst2 patch save function could be avoided by either including a "00-MIDI"-folder with 128 blank / init patches or allow the user to create one ?

Just my 2 c ...

Again thanks for all the brilliant work on this lovely synth!

baconpaul commented 3 years ago

So you can do that today in your filesystem editor of choice - just make the directory in factory patches and it will work with the vst2. I’m reluctant to do partial edits to The patch browser especially this close to 1.8 though and would rather just tackle this properly along with all the other patch browser problems (which amount to “it is a big messy list”) in the next release

dunkfordyce commented 2 years ago

Any updates on program change on vst3?

mkruselj commented 2 years ago

No updates, check the assigned milestone - it's roughly planned for after Surge XT 2.0 release, so at least over a year away.

hems commented 2 years ago

No updates, check the assigned milestone - it's roughly planned for after Surge XT 2.0 release, so at least over a year away.

I'm impressed by the fact you got a roadmap planned for about 1 year!

hems commented 2 years ago

Any updates on program change on vst3?

unfortunately it seems only people who do live shows care about program change messages and that kind of people are basically extinct.

baconpaul commented 2 years ago

Any updates on program change on vst3?

unfortunately it seems only people who do live shows care about program change messages and that kind of people are basically extinct.

Or use some other mechanism, like having their DAW / MainStage / Performance Host do the preset change on their controller (which works fine). But yeah, the situation isn't that great in surge agreed.

And yeah we have a great roadmap! It paints a long drive though....

hems commented 2 years ago

Or use some other mechanism, like having their DAW / MainStage / Performance Host do the preset change on their controller (which works fine).

Not sure i understand this.. Is there a way to do a "preset change" on ableton for instance completely bypassing the fact Surge don't understand the preset change message?

Is that possible on other DAWs?

I'm not aware of that

But yeah, the situation isn't that great in surge agreed.

the situation is great in surge, you guys are awesome! just love for you! <3

baconpaul commented 2 years ago

Oh sure. In MainStage you make a collection of performance presets which have configured synths. Kinda like having a lot of tracks in ableton and you arm a different one per performance. Great for live stuff! MainStage is really cool in this regard. You can set it up for your performance hardware with presets and routing and everything then just click through the performance settings.

mkruselj commented 2 years ago

I have noticed that program changes actually do work in Surge standalone... But it's still a bit hokey regarding how you decide which patches are which program change. And there's no bank select support.

mkruselj commented 2 years ago

Any updates on program change on vst3?

unfortunately it seems only people who do live shows care about program change messages and that kind of people are basically extinct.

They're far from extinct! Lots of famous acts rely on Mainstage in fact, but sample playback is the name of the game, so Kontakt takes the spotlight (and it does support program changes).

Richie-X commented 2 years ago

I don't know about MainStage.

Generally speaking, there is a huge difference between changing entire performance presets or program changes:

Many hosts will reload the synth at performance changes. Your audio flow is interrupted (e. g. reverb tails) and loading times are required. Reloading a synth consumes processing power. In a live situation you have to pause your playing. MIDI program changes do not reload the synth. MIDI program changes just readjust parameter settings. That is way faster and doesn't neccessarily affect reverb or echo tails. It might also be more safe regarding hanging notes.

Just my 2c ...

A big thanks to the fine folks making a great vst even better! Great job!

Richie

www.coverband.eu

On 01.09.22 01:51, Paul wrote:

Oh sure. In MainStage you make a collection of performance presets which have configured synths. Kinda like having a lot of tracks in ableton and you arm a different one per performance. Great for live stuff! MainStage is really cool in this regard. You can set it up for your performance hardware with presets and routing and everything then just click through the performance settings.

— Reply to this email directly, view it on GitHub https://github.com/surge-synthesizer/surge/issues/576#issuecomment-1233564098, or unsubscribe https://github.com/notifications/unsubscribe-auth/ARUJXK33VBDRZXSB6WSG7XTV37VZNANCNFSM4GWMYM3A. You are receiving this because you commented.Message ID: @.***>

mkruselj commented 2 years ago

Well in case of Surge, changing a patch does affect all voices and resets effect tails too, (because effects and filters and oscillator types can all be wildly different between them and that does require reloading for those modules) so same would happen with program changes as well.

In Mainstage (and other live hosts like Forte, Cantabile etc) you can most definitely load multiple instances of things and switch between them via MIDI in a myriad of ways. There is no reloading when switching performances because they're all held in memory AFAIK.

baconpaul commented 2 years ago

yes and also: MainStage is indeed not the same as midi program change. but for the 'different setting for each performance' live setting it works great.

For the 'change this synth completely mid performance and still only have one instance' it is, indeed, not the appropriate tool.

eras commented 2 years ago

I'm not a live musician, however it would just be plain more convenient traversing the long list of presets that come with Surge XT using the midi controller, instead of clicking the button on screen. So this would mean that I would not prefer to do any setup of selecting particular presets to do this.

Basically, a CC for pressing the < and > buttons and possibly the same for category buttons, as well as favoriting patches, would serve fine. A general mechanism for binding any midi CC to a button in the interface would also solve this, btw. So implementing the Program Change would be something different for me (and not very useful), though related.

But this is of course just due to my personal setup, perhaps pressing the button is more convenient for others.

baconpaul commented 2 years ago

In 1.1 we have computer keybindings for those gestures by the way, if you do workflow / show key bindings. I know its not the same but it is in the software today.

hems commented 1 year ago

Lovely stuff guys, thank you for the contributions on the thread and the development team for such amazing work.

RK11111111111 commented 7 months ago

Is the surge-xt-cli program supposed to open a window on linux? It starts and I plays when I connect it to an audio interface and midi.

mkruselj commented 7 months ago

No, it is fully command line interface, no GUI. So if you run it from a terminal, that's it.

baconpaul commented 7 months ago

the standalone non-CLI is the gui version of same.

RK11111111111 commented 7 months ago

How do you run the standalone gui version on linux. The surge-xt-client is in my path, but there don't appear to be other surge programs.

baconpaul commented 7 months ago

there's a program installed by our deb/rpm/install rules called /usr/bin/Surge XT

RK11111111111 commented 7 months ago

ah captial S is for SWEEET!

It's going to happen a standalone raspberry pi synth!