Bitwig 2.4 MPE fixed?

Official support for: rogerlinndesign.com
RELATED
PRODUCTS

Post

Roger_Linn wrote:I should have mentioned that my test was conducted while turning off BW's remote control of LinnStrument's settings, which as I understand it is merely remotely setting LinnStrument's Bend Range to 24 and therefore shouldn't make any difference. I don't see the merit in BW setting it remotely because LinnStrument users may prefer a different bend range, especially given that the MPE spec now uses 48 as default. My understanding is that in order to achieve BW's real-pitch editing, all that should be needed is simply to 1) set BW's Input Bend Range in the Track Inspector to the same as your controller, and if using a plug-in synth, also 2) set BW's Output Bend Range in the Synth Inspector to the same as your synth. I don't see the need for anything more than that, or at least it seems that should be BW's main function. Am I missing something?
AFAIK the current Linnstrument script in Bitwig is setting the internal value of how it interprets the incomming Pitch Bend to 24 with the line:

Code: Select all

noteInput.setUseExpressiveMidi(true, 0, [b]24[/b]);
As long as you use that script, setting your Linnstrument to anything else will get you into trouble. That is AFAIK the reason why the script tries to make sure, this is the range the LS is set to.
The Roli Seaboard Script has a settable range, so the user can change it in preferences. This would be rather simple to transplant to the LS Script - or at least it was before 2.4 where Bitwig moved the LS script into the internal code space so it's no longer a user editable Java Script (if you don't copy the one from 2.3.x and give it a new GUID).
As soon as PB data has "entered" BWS this way, as I understand it, the range set in the script is what it uses to calculate the translation like BobDog said. You don't have to set an input range then nor set it to PB->Expression, since the line in the script does that for you. So what you see there isn't a bug but the way they intend it (automagic).
The only thing you need to do is set the VST synth to the range it supports in Inspector (if it doesn't speak automatic MPE).
I had a longer discussion with Support (I don't have a LS, only a Seaboard Block) and their aim is to make it fully automatic with no user intervention.
I personally do not believe in this kind of thing, since
a. Users like you say may prefer other ranges than 24 (which could be solved with a script with settable range like the Roli one)
b. The number of VSTs supporting full MPE with the automagic thing is close to zero and
c. Many users will be more interested in getting stuff not originally intended for MPE to work, so implementing a theoretically perfectly automatic MPE system that isn't flexible enough to deal with the current realities wouldn't be my personal choice.

But I think since Beta 4 almost everything actually works, but there is a LOT of confusion in the community since before it was partly broken, partly not there at all so many people using MPE try the wrong stuff and report things as broken that aren't.
Bitwig really needs to create a clear documentation on how the data flows and how things are intended to work with MPE now, so this confusion comes to an end.

Cheers,

Tom
"Out beyond the ideas of wrongdoing and rightdoing, there is a field. I’ll meet you there." - Rumi
Sculptures ScreenDream Mastodon

Post

ThomasHelzle wrote:a. Users like you say may prefer other ranges than 24 (which could be solved with a script with settable range like the Roli one)
Tom
Why would a user want to do that?

Post

They may prefer to use the MPE standard 48, or they use 12 in their other programs and don't want to always have to change it in BW, or they use Audio Modeling's non-MPE instruments (restricted to 12 bend range) and BW's implementation may not apply to one-channel use (I'm not sure), or they simply want to use a different bend range than 24.

My point is that all this is necessary only because BW needs to be aware of the bend range in order to permit pitch-accurate editing of the sequenced bend data. So it shouldn't require anything more than informing 1) informing BW of the controller's bend range (either automatically or manually if you prefer) and if using an external plug-in synth, 2) informing BW of the synth's bend range. This seems the simplest, least intrusive and easiest-to-understand implementation and doesn't require all the complex workarounds that the current implementation seems to inspire in users.

Post

ThomasHelzle wrote:Bitwig really needs to create a clear documentation on how the data flows and how things are intended to work with MPE now, so this confusion comes to an end.
From your lips to God's ears!

For instance, right now I cannot figure out how to use my TEControl breath controller, in conjunction with the LinnStrument, with any MPE synth (or non-MPE synth like the SWAM instruments which I seem to need to put in MPE mode to get the pitch bend to work)...but I'm wondering if there is some way to do it that I just haven't figured out given the various midi channel routing options.

Post

Roger_Linn wrote:They may prefer to use the MPE standard 48, or they use 12 in their other programs and don't want to always have to change it in BW, or they use Audio Modeling's non-MPE instruments (restricted to 12 bend range) and BW's implementation may not apply to one-channel use (I'm not sure), or they simply want to use a different bend range than 24.
There is no reason to use 48... the Linnstrument cannot physically bend more than 24 no matter what it is set at. My 128 can do at most 15 semitones...

They are going to have to set it in Bitwig and the synth anyway, no matter what the Linnstrument is set at.

With the Linnstrument at 24, I can set Bazille to 12 and the Bitwig device container for Bazille to 12 and it is limited to 12. I can set it to 5 in Bazille and 5 in Bitwig and it is limited to 5.

Leaving the Linnstrument at 24, I can have each track set differently with a different synth and switch between them without any additional configuration.

I haven't checked a non MPE synth, but really it should work the same way and if for some reason it doesn't it should be encouraged rather than adding an unnecessary step and place where users can mess it up or get confused.

Post

Whoops, missed the last page of posts!

This is in answer to
Roger_Linn wrote:
BobDog wrote:And from BW/recording point of view:

The PB range recorded is set in the script for the Linnstrument, so with the standard script this is always 24.

If you use an alternative MPE script you can set the range in the controller and BW will then use that as the range it uses for recording the expression data.

Beta 4 also displayed the "MPE" button in the device inspector irrespective of if the plugin reports it supports MPE via the ::canDo("MPE") call.


So as it stands if you don't use channel per row mode the "MPE" button seems to work pretty well now.

If you use channel per row then you need to have "MPE" off and "PB->Expression" off and use 24 range with the standard script, or if your plugin doesn't support 24 you need to use another script. Timbre, pitch and pressure are all recorded fine so I am not really sure whet the "PB->Expression" button is meant to do if using an MPE controller.
I should have mentioned that my test was conducted while turning off BW's remote control of LinnStrument's settings, which as I understand it is merely remotely setting LinnStrument's Bend Range to 24 and therefore shouldn't make any difference. I don't see the merit in BW setting it remotely because LinnStrument users may prefer a different bend range, especially given that the MPE spec now uses 48 as default. My understanding is that in order to achieve BW's real-pitch editing, all that should be needed is simply to 1) set BW's Input Bend Range in the Track Inspector to the same as your controller, and if using a plug-in synth, also 2) set BW's Output Bend Range in the Synth Inspector to the same as your synth. I don't see the need for anything more than that, or at least it seems that should be BW's main function. Am I missing something?

I Agree with what you say but I'm not sure Bitwig does.

From what I have managed to glean (thanks Tom), BW will always record "Expression" data if this line is in the controller script:

Code: Select all

noteInput.setUseExpressiveMidi(true, 0, 24);
So as well as the Linnstrument attempting to set the PB range on the linnstrument it also uses this line to tell BW that it should use Expressive Midi, with the last parameter being the PB range it should use internally for recording. This has a minimum value of 12 so anything under that is not supported.


If you use a controller script without the line then BW will just record midi data unless you have "PB->Expression" turned on. I agree with you that you would think that this setting would be all you need now that BW is multi channel but it just doesn't work from my experiments. It seems to only work for single channel controllers.


The script I made (copied and altered Toms Roli one) for generic MPE controllers allows you to set the PB range that BW uses internally for recording and then uses that range on the call to noteInput.setUseExpressiveMidi(), this allows you to set the PB range that BW records to the same that you want to use on the Linnstrument, this works fine:

Code: Select all


loadAPI(1);

host.defineController("Generic", "Generic MPE", "1.0", "18367e28-98fc-4671-8d4d-31d85b624488");
host.defineMidiPorts(1, 1);

function init()
{
   host.getMidiInPort(0).setMidiCallback(onMidi);
   noteInput = host.getMidiInPort(0).createNoteInput("", "??????");
   noteInput.setUseExpressiveMidi(true, 0, 48);

   var bendRanges = ["12", "24", "36", "48", "96"];
   bendRange = host.getPreferences().getEnumSetting("Bend Range", "MIDI", bendRanges, "24");
   bendRange.addValueObserver(function (range)
   {
      var pb = parseInt(range);
      noteInput.setUseExpressiveMidi(true, 0, pb);
   });
}

function onMidi(status, data1, data2)
{
   //printMidi(status, data1, data2);
}

function exit()
{
}

So as it stands at the moment the only way to get multi channel expression data is to have that line in the controller script. If you could get BW to fix the "PB->Expression" then I would guess you wouldn't need to have a special controller script and everything should work.
Bitwig, against the constitution.

Post

This morning a had a call with the main software guy at Bitwig. I gave him my suggestion for MPE implementation:

In order for BW to permit pitch-accurate bend editing, it needs to know the bend range of the connected controller. To do this:

1) in the "Controllers" window, add a "Controller Bend Range" field for each controller, with help messaging instructing people to set this equal to the controller's Bend Range. The "Send Initialization Messages on/off" buttons can still be there and if on, will automatically fill the "Controller Bend Range" field with the default value for the controller (24 for LinnStrument) on startup only. This Bend Range would apply to all received channels, whether from the single channel of a one-channel controller, the MPE common channel or MPE per-note channels. (The only reason for different bend ranges for the MPE Common and Per-Note channels is for a possible MPE controller that has a Bend Wheel, and no such controllers exist.) I don't see any reason for the PB Range field in the track inspector.

2) If using a 3rd-party plug-in synth, the synth's inspector would have a Synth Bend Range field, with help messaging instructing people to set this equal to the synth's Bend Range. This would apply to all channels sent to the synth, whether notes over a single channel, MPE Common messages or MPE Per-Note messages.

We'll see how my suggestion fits into their other priorities. I'll keep you posted as I know more.

Post

Good luck with that Roger!

Just got a reply about the fact that BW is creating new channels when you play multiple notes on the same channel (note per row):
this actually works as specified, channel per row is not part of the MPE specification and MPE only allows one note per channel.
If you want to use channel per row, you have to use a generic midi script instead of an MPE script.
SO they won't be fixing that one then!
Bitwig, against the constitution.

Post

Actually BW is correct in that MPE is defined as one note per channel, so while Channel Per Row can be used if you only play one note at a time on each row, it will not work if you play more than one note per row. So they are MPE-compatible in that sense and it is not a bug in need of fixing. Note than MPE only allows one note on, one note off, one pressure message, one pitch bend message and one y-access message per channel, all intended for the single note on that channel.

My experience is that BW’s implementation now preserves the received channel instead of reassigning it as before, so this permits Channel Per Row use with a single note per row. Does anyone have a different experience with beta 4?

Post

To be honest all I really want is to be able to edit recorded data easily, in BW if you don't use an "expressive" controller this is not possible as it doesn't link controller data on the same channel with the note. If you do use an "expressive" controller it messes around with the data, MPE spec or not it doesn't matter to me, just leave the data alone.

Cubase, Logic and Reaper manage all this with no problems at all by totally ignoring the MPE spec, I can record, it plays it back correctly and I can edit the data easily.

Sometimes things can be over thought!
Bitwig, against the constitution.

Post

Hi bobdog,

In principal I agree, but I also highly value BW's solution to 2 problems that exist in all other DAWs:

1) Graphical Pitch Bend data is arbitrary, so it doesn't show the actual pitch you're editing, and

2) Graphical Pitch Bend data in the sequencer editor is not associated with any specific note, but rather applies to all notes on the channel.

BW corrects both and I think it does it in a very simple and intuitive way, by attaching a graphical pitch bend wavy line to the actual note played, a wave whose height shows the actual bent pitch in relation to the piano keyboard shown at the left of the screen. I really like this feature, but of course it requires knowledge of the MPE controller's bend range in order to be useful.

My only issue with BW is that their implementation of this feature is too confusing, buggy and has too many confusing user settings. Hence my suggestions above for how to make it simpler, easier to understand and easier to work around if you don't want it.

Post

BobDog wrote:To be honest all I really want is to be able to edit recorded data easily, in BW if you don't use an "expressive" controller this is not possible as it doesn't link controller data on the same channel with the note. If you do use an "expressive" controller it messes around with the data, MPE spec or not it doesn't matter to me, just leave the data alone.

Cubase, Logic and Reaper manage all this with no problems at all by totally ignoring the MPE spec, I can record, it plays it back correctly and I can edit the data easily.

Sometimes things can be over thought!
Really?? You find editing per note pitchbend easy in Logic??

I find Bitwig's way far far better than editing in Logic (which borders on unusable for me).

In Bitwig you can immediately see what is going on with each note including how many semitones a bend is... and of course you can edit all notes together with easy visual reference of the relationship of the different notes.

Post

I don’t need to edit pithbend, I just need it to move with the note it is attached to. Or be deleted if the note is deleted.

How often do you edit pitchbend?
Bitwig, against the constitution.

Post

So really what I am saying is that all I want is BW to be able to record multi channel midi and pass it through to plugins or hardware without changing it.

I want it to attach midi data (cc, after touch, Pb etc) on the same channel to notes on the same channel. So if I move that note the attached midi data moves with it.

As it stands BW can not do this.
Bitwig, against the constitution.

Post

BobDog wrote:I don’t need to edit pithbend, I just need it to move with the note it is attached to. Or be deleted if the note is deleted.

How often do you edit pitchbend?
In Logic... never...

In Bitwig, it is easy to create complex pitchbends with multiple simultaneous notes that I couldn't play in realtime...

Post Reply

Return to “Roger Linn Design”