MIDI recording accuracy in Bitwig

Ah, ok. MPE+ is essentially a propriety protocol of Hakenaudio, so it is little much to ask from daws to handle it correctly (as said above, it would be good to have a “don’t touch, record and replay as seen” mode - but I understand SteveElbows’ arguments why it can make sense to process the midi events).

Googled and found a link where they refer to some BOME box preset that is supposably mitigating this. Am not part of that Discord group though, don’t see anything when clicking this link: https://www.reddit.com/r/Osmose/comments/1ilaxdn/osmose_mpe_broken_in_bitwig_due_to_mpe/

Osmose has two virtual outputs when connecting it via USB. The first is sending plain MPE (and the DIN MIDI outputs can be switched between MPE and MPE+). So using MPE would be an option…

Or just ask Hakenaudio what they recommend for recording and playback with MPE+. And when reporting back to the Bitwig guys it would be important to specifically tell them that you want to record and playback MPE+, because just asking for “higher temporal resolution” won’t help for your scenario. (Temporal resolution of Bitwig is rather high already for MIDI events). As I understand it the problem is that Bitwig smoothes the pressure values in midi events (so the value is changed, not the timing when the event arrives). And MPE+ sets velocity to constant 127 and sends a burst of many 7 bit pressure events to shape attack curves of notes.

Now that I understand what you mean I can test this in Bitwig 6 in the next days (only with Windows unfortunately as my Mac is too old).

2 Likes

In the future with good MIDI 2.0 support in the DAWs with the high resolution of UMP, an interesting route will be a bit of software to convert between the hi-res MIDI 1 Haken MPE+ to standard MIDI 2.0 (and back). I know this will be possible when the MIDI 2 support in Windows arrives, and I assume there are similar means for apps to present MIDI connections on the other OSs. (If you know what these are, please let me know, because I might try writing said software).

2 Likes

If you mean the ability to create virtual MIDI ports which can then be used to send/receive MIDI between various apps as if they were real physical MIDI connections, then yes, Apple have included such features in their OSs/APIs for a long time. I’m afraid I cannot comment on Linux or Android.

I did actually cobble together a MPE to MIDI 2.0 realtime converter as a proof of concept, mostly so that I could test the MIDI 2.0 stuff included in the beta of Waldorf Quantum/'Iridium firmware. I got it working quite easily, although I never bothered to complete the work because in MIDI 2.0 mode I dont think the Quantum/Iridium beta firmware supports the equivalent of MPE Y yet (and the many many more dimensions that 2.0 offers), but I still enjoyed seeing the pressure and pitch dimensions working via UMP messages to this synth. I didnt get the app anywhere close to release shape, and I only bothered to get it working on MacOS for my own testing purposes. And I didnt bother to add MPE+ support on top of the MPE support, although it probably wouldnt have taken too long to add that. I used the following Swift CoreMIDI wrapper, which made it very easy to deal with both MIDI 1.0 and 2.0 messages.

If I was instead looking to ‘write once for multiple OSs using cross-platform stuff’, at the time my options were more limited due to a relative lack of 3rd party MIDI libraries for various languages and OS’s that could handle MIDI 2.0/UMP, but this was quite a long time ago and I havent checked whether that scene has improved a lot since then.

I dont think I actually bothered to have my app create new virtual MIDI ports with appropriate names, because Apple also allow users to add their own ‘permanent’ virtual MIDI ports via the Audio MIDI Setup program in the OS. As far as end users are concerned, this stuff is called the ‘IAC Driver’ and you will find many instructions for end users on how to use it if you search for that term online. If I was actually polishing an app for public release I would have wanted to create temporary virtual ports with appropriate names in my apps own code. I cannot currently remember if Apple use different terminology to describe the virtual ports when it comes to their SDKs for devs, or whgether they still use the term IAC there too.

4 Likes

Excellent info as always – thanks!

1 Like

Did some experiments with Bitwig 6 and Osmose in MPE+ mode.
For that I connected the Osmose to the (Windows 11) PC and used Geert Bevin’s receivemidi tool to log the incoming midi data before sending it to Bitwig. The output of Bitwig was recorded with another instance of receivemidi. In between were loopmidi “virtual midi cables”.

Then I simply pressed and released a single key on Osmose.

When using the passthrough in Bitwig (setting Osmose as input and a virtual midi cable as output and then just monitoring at the output) then input and output midi events are identical regarding both values and timing between notes(with a delay of 20 ms in my case). So routing MPE+ through e.g. a The Grid MIDI processor should be no problem.

When recording and then replaying the MPE+ midi stream then it looks different though. Apparently Bitwig is decimating the controller data to 10 ms, which is against the idea of MPE+ of using e.g. channel pressure to shape an attack curve.

CC87 seems to be the least significant bits of channel pressure. If that is the case then it would make sense that this fluctuates in the MPE+ signal. In the attack phase CC87 seems still to be 0 - which would be according to spec where only 7 bit events are used to represent the initial attack curve.
Bitwig shows CC 87 as separate controller curve besides Channel pressure. So either it doesn’t support highres MIDI in the controller editor or I missed to switch some toggle or something?

When comparing the input from Osmose and the Bitwig output it becomes obvious that particularly the attack phase looks more decimated in the latter. For the Osmose MPE+ stream the value initially jumps from 0 to 42 and for the Bitwig output it jumps right to 97, the transition from 0 upwards isn’t captured. (Or more likely: The sensor isn’t providing the super light touch data in the first place…)

When sending back the Bitwig midi recording to the Osmose the resulting note sounds pretty much what I can remember I heard when pressing the key originally. (I only heard the original once and didn’t create an audio recording, so this is quite subjective).
But when looking at the representation of the attack curve in Bitwig I could imagine that this can already lead to an audible difference for certain presets.

So: Bitwig 6 Beta 1 still decimates controller data and doesn’t look like the best fit for an MPE+ recorder.
Unless there are some settings that can be tweaked that I am not aware of?

Here the data:
Edit: Please ignore the channel 1 remapping. I forgot to switch Channel All->1 to All->same. When switching this then the channels stay the same as they were in the input stream. Bitwig doesn’t seem to remap the channels then. The decimation approach stays exactly the same though.

Osmose MPE+ input stream:
D:\Apps>receivemidi dev “MIDIIN2 (Osmose)” pass “loopMIDI Port 1” ts
22:30:11.350 channel 12 channel-pressure 43
22:30:11.351 channel 12 note-on E3 127
22:30:11.351 channel 12 channel-pressure 56
22:30:11.354 channel 12 channel-pressure 71
22:30:11.357 channel 12 channel-pressure 88
22:30:11.361 channel 12 channel-pressure 105
22:30:11.367 channel 12 channel-pressure 111
22:30:11.374 channel 1 control-change 82 103
22:30:11.377 channel 16 control-change 82 106
22:30:11.378 channel 12 channel-pressure 116
22:30:11.384 channel 12 channel-pressure 119
22:30:11.394 channel 12 control-change 87 45
22:30:11.394 channel 12 channel-pressure 119
22:30:11.407 channel 12 control-change 87 74
22:30:11.411 channel 12 channel-pressure 118
22:30:11.411 channel 12 control-change 87 1
22:30:11.412 channel 12 channel-pressure 118
22:30:11.412 channel 12 control-change 87 74
22:30:11.414 channel 12 channel-pressure 117
22:30:11.414 channel 12 control-change 87 32
22:30:11.415 channel 12 channel-pressure 117
22:30:11.418 channel 12 control-change 87 120
22:30:11.418 channel 12 channel-pressure 103
22:30:11.419 channel 12 control-change 87 122
22:30:11.419 channel 12 channel-pressure 93
22:30:11.421 channel 12 control-change 87 59
22:30:11.421 channel 12 channel-pressure 86
22:30:11.422 channel 12 control-change 87 108
22:30:11.422 channel 12 channel-pressure 80
22:30:11.424 channel 12 control-change 87 81
22:30:11.425 channel 12 channel-pressure 76
22:30:11.425 channel 12 control-change 87 61
22:30:11.425 channel 12 channel-pressure 73
22:30:11.427 channel 12 control-change 87 13
22:30:11.428 channel 12 channel-pressure 71
22:30:11.428 channel 12 control-change 87 78
22:30:11.429 channel 12 channel-pressure 64
22:30:11.431 channel 12 control-change 87 94
22:30:11.431 channel 12 channel-pressure 59
22:30:11.432 channel 12 control-change 87 11
22:30:11.432 channel 12 channel-pressure 56
22:30:11.434 channel 12 control-change 87 44
22:30:11.435 channel 12 channel-pressure 53
22:30:11.435 channel 12 control-change 87 37
22:30:11.436 channel 12 channel-pressure 51
22:30:11.438 channel 12 control-change 87 95
22:30:11.438 channel 12 channel-pressure 49
22:30:11.439 channel 12 control-change 87 39
22:30:11.439 channel 12 channel-pressure 39
22:30:11.440 channel 12 control-change 87 61
22:30:11.441 channel 12 channel-pressure 31
22:30:11.441 channel 12 control-change 87 78
22:30:11.442 channel 12 channel-pressure 25
22:30:11.442 channel 12 control-change 87 26
22:30:11.444 channel 12 channel-pressure 21
22:30:11.445 channel 12 control-change 87 116
22:30:11.445 channel 12 channel-pressure 17
22:30:11.445 channel 12 control-change 87 53
22:30:11.448 channel 12 channel-pressure 15
22:30:11.448 channel 12 control-change 87 69
22:30:11.449 channel 12 channel-pressure 13
22:30:11.449 channel 12 control-change 87 18
22:30:11.451 channel 12 channel-pressure 12
22:30:11.451 channel 12 control-change 87 11
22:30:11.452 channel 12 channel-pressure 11
22:30:11.452 channel 12 control-change 87 122
22:30:11.454 channel 12 channel-pressure 9
22:30:11.455 channel 12 control-change 87 12
22:30:11.455 channel 12 channel-pressure 9
22:30:11.455 channel 12 control-change 87 59
22:30:11.456 channel 12 channel-pressure 8
22:30:11.458 channel 12 control-change 87 125
22:30:11.458 channel 12 channel-pressure 7
22:30:11.459 channel 12 control-change 87 79
22:30:11.459 channel 12 channel-pressure 7
22:30:11.461 channel 12 control-change 87 120
22:30:11.461 channel 12 channel-pressure 6
22:30:11.462 channel 12 control-change 87 55
22:30:11.462 channel 12 channel-pressure 6
22:30:11.464 channel 12 control-change 87 6
22:30:11.465 channel 12 channel-pressure 6
22:30:11.465 channel 12 note-off E3 0
22:30:11.466 channel 12 channel-pressure 0
22:30:12.376 channel 1 control-change 82 111
22:30:12.376 channel 16 control-change 82 16

Passthrough output from Bitwig. (timing jitter is +/- 1 ms and delay in my case about 22 ms).
D:\Apps>receivemidi dev “loopMIDI Port 2” ts
22:30:11.372 channel 1 channel-pressure 43
22:30:11.372 channel 1 note-on E3 127
22:30:11.372 channel 1 channel-pressure 56
22:30:11.375 channel 1 channel-pressure 71
22:30:11.378 channel 1 channel-pressure 88
22:30:11.381 channel 1 channel-pressure 105
22:30:11.389 channel 1 channel-pressure 111
22:30:11.395 channel 1 control-change 82 103
22:30:11.398 channel 1 control-change 82 106
22:30:11.398 channel 1 channel-pressure 116
22:30:11.405 channel 1 channel-pressure 119
22:30:11.414 channel 1 control-change 87 45
22:30:11.415 channel 1 channel-pressure 119
22:30:11.427 channel 1 control-change 87 74
22:30:11.432 channel 1 channel-pressure 118
22:30:11.432 channel 1 control-change 87 1
22:30:11.433 channel 1 channel-pressure 118
22:30:11.433 channel 1 control-change 87 74
22:30:11.434 channel 1 channel-pressure 117
22:30:11.435 channel 1 control-change 87 32
22:30:11.435 channel 1 channel-pressure 117
22:30:11.438 channel 1 control-change 87 120
22:30:11.439 channel 1 channel-pressure 103
22:30:11.440 channel 1 control-change 87 122
22:30:11.440 channel 1 channel-pressure 93
22:30:11.441 channel 1 control-change 87 59
22:30:11.442 channel 1 channel-pressure 86
22:30:11.442 channel 1 control-change 87 108
22:30:11.443 channel 1 channel-pressure 80
22:30:11.444 channel 1 control-change 87 81
22:30:11.445 channel 1 channel-pressure 76
22:30:11.446 channel 1 control-change 87 61
22:30:11.446 channel 1 channel-pressure 73
22:30:11.447 channel 1 control-change 87 13
22:30:11.448 channel 1 channel-pressure 71
22:30:11.449 channel 1 control-change 87 78
22:30:11.449 channel 1 channel-pressure 64
22:30:11.451 channel 1 control-change 87 94
22:30:11.452 channel 1 channel-pressure 59
22:30:11.452 channel 1 control-change 87 11
22:30:11.453 channel 1 channel-pressure 56
22:30:11.455 channel 1 control-change 87 44
22:30:11.455 channel 1 channel-pressure 53
22:30:11.456 channel 1 control-change 87 37
22:30:11.456 channel 1 channel-pressure 51
22:30:11.458 channel 1 control-change 87 95
22:30:11.459 channel 1 channel-pressure 49
22:30:11.459 channel 1 control-change 87 39
22:30:11.460 channel 1 channel-pressure 39
22:30:11.460 channel 1 control-change 87 61
22:30:11.461 channel 1 channel-pressure 31
22:30:11.462 channel 1 control-change 87 78
22:30:11.462 channel 1 channel-pressure 25
22:30:11.463 channel 1 control-change 87 26
22:30:11.464 channel 1 channel-pressure 21
22:30:11.465 channel 1 control-change 87 116
22:30:11.466 channel 1 channel-pressure 17
22:30:11.466 channel 1 control-change 87 53
22:30:11.468 channel 1 channel-pressure 15
22:30:11.469 channel 1 control-change 87 69
22:30:11.469 channel 1 channel-pressure 13
22:30:11.470 channel 1 control-change 87 18
22:30:11.471 channel 1 channel-pressure 12
22:30:11.472 channel 1 control-change 87 11
22:30:11.472 channel 1 channel-pressure 11
22:30:11.473 channel 1 control-change 87 122
22:30:11.474 channel 1 channel-pressure 9
22:30:11.475 channel 1 control-change 87 12
22:30:11.476 channel 1 channel-pressure 9
22:30:11.476 channel 1 control-change 87 59
22:30:11.476 channel 1 channel-pressure 8
22:30:11.478 channel 1 control-change 87 125
22:30:11.479 channel 1 channel-pressure 7
22:30:11.480 channel 1 control-change 87 79
22:30:11.480 channel 1 channel-pressure 7
22:30:11.482 channel 1 control-change 87 120
22:30:11.482 channel 1 channel-pressure 6
22:30:11.483 channel 1 control-change 87 55
22:30:11.483 channel 1 channel-pressure 6
22:30:11.485 channel 1 control-change 87 6
22:30:11.486 channel 1 channel-pressure 6
22:30:11.486 channel 1 note-off E3 0
22:30:11.486 channel 1 channel-pressure 0
22:30:12.397 channel 1 control-change 82 111
22:30:12.397 channel 1 control-change 82 16

Output from Bitwig when replaying the recorded MIDI notes:
D:\Apps>receivemidi dev “loopMIDI Port 2” ts
22:30:59.849 channel 1 channel-pressure 97
22:30:59.852 channel 1 note-on E3 127
22:30:59.859 channel 1 channel-pressure 110
22:30:59.869 channel 1 channel-pressure 116
22:30:59.869 channel 1 control-change 82 106
22:30:59.879 channel 1 channel-pressure 119
22:30:59.889 channel 1 control-change 87 45
22:30:59.899 channel 1 control-change 87 65
22:30:59.909 channel 1 channel-pressure 103
22:30:59.909 channel 1 control-change 87 109
22:30:59.919 channel 1 channel-pressure 71
22:30:59.919 channel 1 control-change 87 75
22:30:59.929 channel 1 channel-pressure 49
22:30:59.929 channel 1 control-change 87 110
22:30:59.939 channel 1 channel-pressure 15
22:30:59.939 channel 1 control-change 87 29
22:30:59.949 channel 1 channel-pressure 7
22:30:59.949 channel 1 control-change 87 127
22:30:59.959 channel 1 channel-pressure 0
22:30:59.959 channel 1 control-change 87 6
22:30:59.966 channel 1 note-off E3 0
22:31:00.870 channel 1 control-change 82 16

2 Likes

Would not expect to see any DAW intelligently merging CC87 back into the recorded MPE data as higher resolution single coherent MPE curves because MPE+ is just something Haken came up with unilaterally and I dont know of any DAW that decided to implement it, its not like its a part of the official MIDI spec. DAWs that are ‘MPE agnostic’ rather than ‘MPE opinionated’ will happen to work with it by virtue of passing the MIDI data through unchanged, as opposed to opinionated ones that could really mess everything up on this front in a number of different ways. And neither sort is likely to present the data for editing etc in a coherent way.

Is the Bitwig curve for CC87 even handled properly in terms of being attached to specific notes and different MIDI channels as opposed to one single stream of data?

Also note that for MPE+ CC87 isnt just used to enhance the resolution of one single MPE dimension, it can be used to enhance all the MPE dimensions of expression and this represents another big complication when DAWs dont handle it in a MPE+ aware manner.

1 Like

Ah, ok this is an MPE+ specific thing. Thought it’s “high res 14 bit MIDI” that some other controllers/instruments also support.

1 Like

Haken have a whole page describing the use of it that they came up with unilaterally.

Looking forwards to a proper standard for high res MPE in future (since one doesnt actually exist for MIDI 1.0 MPE), MIDI 2.0 has more than one method for handling per note expression. One of these is the direct successor to MPE, via a MIDI 2.0 ‘MPE Profile’ and this optionally allows for higher resolution. Too early to predict who might support this. And I forgot the technical implementation details right now. MIDI 2.0 also alternatively offers a completely different method for per-note expression that isnt like MPE at all, and doesnt require the use of multiple MIDI channels.

1 Like

Anyway thanks very much for the decimation research which is still very useful to know, research that is not spoilt by the CC87 complications as far as I know.

1 Like

Just checked, apparently usual MIDI 1.0 14 bit midi is just introducing LSB counterparts for the CCs (original CC number+64) and specifically CC 88 for velocity LSB. So this CC 87 thing seems to be MPE+ specific indeed.

1 Like

Yeah and that official 14 bit stuff never been linked to the MPE spec. Especially since its just for CC’s, not channel aftertouch as far as I recall.

Even in the non-MPE context the 14 bit scene is a bit messy because not all manufacturers supported the same specific pairs as are mentioned in the official spec. Some have their own arbitrary pairings which, if we are lucky, they list in their documentation. Some controllers support the selection of whatever 2 CC’s you want to send for this purpose, so will support the non-standard synth etc implementations, others stick to the official spec and only let you choose the main CC plus a toggle to turn on 14 bit, and so wont work in that mode if the synth manufacturer went for their own arbitrary combinations. I once had a brief argument with Loopop about this when he reviewed the Melbourne Instruments Roto-control, because he said it didnt support 14 bit CC’s, when actually it does, but (so far) only the official pairs not the arbitrary pairs that some synths require.

1 Like

Since I brought it up, I may as well mention that I checked the detail of the optional higher resolution stuff for the MIDI 2.0 ‘MPE Profile’. You can use RPNs instead of channel aftertouch and CC74 to get higher resolution for these dimensions of expression. I wont start waffling on about the full details of that RPN stuff, or the other differences between this MPE profile and the stuff we are used to in MIDI 1.0’s MPE. Not least because we dont know whether manufacturers and developers will embrace that MPE Profile in MIDI 2.0 or whether they will just leap to the much larger, more flexible but also more complex world of MIDI 2.0 UMP per note expression instead.

1 Like

Maybe I should clarify my ‘more complex world of MIDI 2.0 UMP’ remark - theres more complexity with implementing UMP in the first place. But once that work is done, it may well be the case that then making use of the per-note stuff that UMP messages offer is easier in various ways than dealing with MPE and its various quirks and workarounds.

1 Like

CC87 is MPE+ (Osmose port 2) specific and is used to increase resolution on all three parameters: channel pressure, aftertouch and X resolution so you have to be careful as those CC87s are output differently for each item they are associated with. Also in MPE+ mode velocity is output as 127 unless you change that to dynamic in the editor that confuses some people as well.

2 Likes

Although in practice I dont think I’ve seen the X (pitch bend) dimension of expression actually making use of CC87 even when set to do so in the editor. At least not on the couple of devices with Haken engines that I’ve owned, with the firmware versions that have been current during my time of ownership. But I know that this is part of the MPE+ spec on paper, and there could be big gaps in my knowledge on this detail, not least because I dont own a full Continuum.

1 Like

Do you have experience which DAWs work well with recording MPE+ data?

On the other side, when one is essentially treating midi tracks like audio (without editing individual events and rather rerecording) then one could as well just record as audio :slight_smile:

1 Like

Haken Audio by the way always says MPE+ was never intended for recording and editing. They really assume people should record audio. That said, Cubase and Ableton Live both record and play back MPE+ very well and a lot of folks do that. I have seen less success reported with Bitwig.

3 Likes

Just repeated the same test in Reaper (v7.45). This records the MPE+ stream exactly as it got in, down to the last event, also preseving the timing.(It just additionally adds a prequel sequence that sets all CCs on all channel to 0, pitch bend to 8192 etc.)
So Reaper looks as if it would also be an option for MPE+ recording.

Osmose MPE+ input stream:
D:\Apps>receivemidi dev “MIDIIN2 (Osmose)” pass “loopMIDI Port 1” ts
22:38:36.663 channel 4 control-change 74 0
22:38:36.663 channel 4 channel-pressure 40
22:38:36.667 channel 4 pitch-bend 8192
22:38:36.667 channel 4 note-on C4 127
22:38:36.668 channel 4 channel-pressure 54
22:38:36.668 channel 4 channel-pressure 71
22:38:36.670 channel 4 channel-pressure 90
22:38:36.673 channel 4 channel-pressure 111
22:38:36.680 channel 4 channel-pressure 116
22:38:36.687 channel 4 control-change 74 6
22:38:36.688 channel 4 control-change 74 14
22:38:36.688 channel 4 control-change 74 22
22:38:36.690 channel 4 control-change 74 30
22:38:36.690 channel 4 channel-pressure 119
22:38:36.691 channel 4 control-change 74 34
22:38:36.692 channel 4 control-change 74 39
22:38:36.693 channel 4 control-change 74 44
22:38:36.694 channel 4 control-change 74 50
22:38:36.697 channel 4 control-change 74 55
22:38:36.697 channel 4 channel-pressure 121
22:38:36.698 channel 4 control-change 74 61
22:38:36.700 channel 4 control-change 74 65
22:38:36.703 channel 4 control-change 74 69
22:38:36.707 channel 4 control-change 87 107
22:38:36.710 channel 4 control-change 74 71
22:38:36.714 channel 4 control-change 87 11
22:38:36.715 channel 4 channel-pressure 122
22:38:36.715 channel 4 control-change 87 54
22:38:36.716 channel 4 channel-pressure 122
22:38:36.717 channel 4 control-change 87 79
22:38:36.720 channel 4 control-change 74 69
22:38:36.721 channel 4 control-change 87 44
22:38:36.721 channel 4 control-change 74 67
22:38:36.722 channel 4 control-change 87 26
22:38:36.723 channel 4 control-change 74 65
22:38:36.723 channel 4 control-change 87 28
22:38:36.724 channel 4 control-change 74 62
22:38:36.725 channel 4 control-change 87 102
22:38:36.725 channel 4 channel-pressure 122
22:38:36.726 channel 4 control-change 87 104
22:38:36.727 channel 4 control-change 74 58
22:38:36.727 channel 4 control-change 87 68
22:38:36.728 channel 4 control-change 74 55
22:38:36.728 channel 4 control-change 87 17
22:38:36.729 channel 4 control-change 74 51
22:38:36.730 channel 4 control-change 87 24
22:38:36.731 channel 4 control-change 74 46
22:38:36.731 channel 4 control-change 87 60
22:38:36.732 channel 4 control-change 74 37
22:38:36.733 channel 4 control-change 87 78
22:38:36.733 channel 4 control-change 74 29
22:38:36.734 channel 4 control-change 87 22
22:38:36.734 channel 4 control-change 74 22
22:38:36.735 channel 4 control-change 87 23
22:38:36.735 channel 4 channel-pressure 123
22:38:36.737 channel 4 control-change 87 27
22:38:36.737 channel 4 control-change 74 8
22:38:36.738 channel 4 control-change 74 0
22:38:36.744 channel 4 control-change 87 41
22:38:36.747 channel 4 channel-pressure 113
22:38:36.748 channel 4 control-change 87 119
22:38:36.748 channel 4 channel-pressure 105
22:38:36.749 channel 4 control-change 87 49
22:38:36.750 channel 4 channel-pressure 100
22:38:36.751 channel 4 control-change 87 29
22:38:36.751 channel 4 channel-pressure 96
22:38:36.751 channel 4 control-change 87 13
22:38:36.752 channel 4 channel-pressure 93
22:38:36.754 channel 4 control-change 87 98
22:38:36.754 channel 4 channel-pressure 90
22:38:36.755 channel 4 control-change 87 1
22:38:36.755 channel 4 channel-pressure 89
22:38:36.757 channel 4 control-change 87 89
22:38:36.758 channel 4 channel-pressure 87
22:38:36.759 channel 4 control-change 87 84
22:38:36.759 channel 4 channel-pressure 81
22:38:36.761 channel 4 control-change 87 17
22:38:36.762 channel 4 channel-pressure 77
22:38:36.762 channel 4 control-change 87 95
22:38:36.763 channel 4 channel-pressure 73
22:38:36.764 channel 4 control-change 87 25
22:38:36.764 channel 4 channel-pressure 71
22:38:36.765 channel 4 control-change 87 37
22:38:36.765 channel 4 channel-pressure 69
22:38:36.767 channel 4 control-change 87 31
22:38:36.768 channel 4 channel-pressure 55
22:38:36.768 channel 4 control-change 87 91
22:38:36.769 channel 4 channel-pressure 44
22:38:36.769 channel 4 control-change 87 104
22:38:36.771 channel 4 channel-pressure 36
22:38:36.771 channel 4 control-change 87 114
22:38:36.772 channel 4 channel-pressure 30
22:38:36.772 channel 4 control-change 87 96
22:38:36.774 channel 4 channel-pressure 25
22:38:36.774 channel 4 control-change 87 114
22:38:36.775 channel 4 channel-pressure 21
22:38:36.775 channel 4 control-change 87 127
22:38:36.777 channel 4 channel-pressure 18
22:38:36.778 channel 4 control-change 87 105
22:38:36.778 channel 4 channel-pressure 16
22:38:36.779 channel 4 control-change 87 25
22:38:36.781 channel 4 channel-pressure 15
22:38:36.781 channel 4 control-change 87 124
22:38:36.782 channel 4 channel-pressure 13
22:38:36.782 channel 4 control-change 87 100
22:38:36.784 channel 4 channel-pressure 12
22:38:36.784 channel 4 control-change 87 113
22:38:36.784 channel 4 channel-pressure 11
22:38:36.785 channel 4 control-change 87 28
22:38:36.787 channel 4 channel-pressure 11
22:38:36.788 channel 4 control-change 87 91
22:38:36.788 channel 4 channel-pressure 10
22:38:36.788 channel 4 control-change 87 43
22:38:36.789 channel 4 channel-pressure 10
22:38:36.791 channel 4 control-change 87 61
22:38:36.791 channel 4 channel-pressure 9
22:38:36.791 channel 4 control-change 87 107
22:38:36.792 channel 4 channel-pressure 8
22:38:36.794 channel 4 control-change 87 45
22:38:36.795 channel 4 channel-pressure 8
22:38:36.795 channel 4 control-change 87 127
22:38:36.796 channel 4 channel-pressure 7
22:38:36.797 channel 4 control-change 87 48
22:38:36.798 channel 4 channel-pressure 7
22:38:36.798 channel 4 note-off C4 0
22:38:36.799 channel 4 channel-pressure 0
22:38:36.938 channel 1 control-change 82 47
22:38:36.938 channel 16 control-change 82 16

Reaper playback of recorded midi track:
D:\Apps>receivemidi dev “loopMIDI Port 2” ts
22:40:54.302 channel 1 control-change 120 0
22:40:54.302 channel 1 control-change 123 0
22:40:54.303 channel 2 control-change 120 0
22:40:54.303 channel 2 control-change 123 0
22:40:54.304 channel 3 control-change 120 0
22:40:54.304 channel 3 control-change 123 0
22:40:54.305 channel 4 control-change 120 0
22:40:54.305 channel 4 control-change 123 0
22:40:54.306 channel 5 control-change 120 0
22:40:54.306 channel 5 control-change 123 0
22:40:54.307 channel 6 control-change 120 0
22:40:54.307 channel 6 control-change 123 0
22:40:54.307 channel 7 control-change 120 0
22:40:54.308 channel 7 control-change 123 0
22:40:54.308 channel 8 control-change 120 0
22:40:54.308 channel 8 control-change 123 0
22:40:54.308 channel 9 control-change 120 0
22:40:54.309 channel 9 control-change 123 0
22:40:54.309 channel 10 control-change 120 0
22:40:54.309 channel 10 control-change 123 0
22:40:54.310 channel 11 control-change 120 0
22:40:54.310 channel 11 control-change 123 0
22:40:54.311 channel 12 control-change 120 0
22:40:54.311 channel 12 control-change 123 0
22:40:54.311 channel 13 control-change 120 0
22:40:54.312 channel 13 control-change 123 0
22:40:54.312 channel 14 control-change 120 0
22:40:54.313 channel 14 control-change 123 0
22:40:54.313 channel 15 control-change 120 0
22:40:54.314 channel 15 control-change 123 0
22:40:54.314 channel 16 control-change 120 0
22:40:54.315 channel 16 control-change 123 0
22:40:54.315 channel 1 pitch-bend 8192
22:40:54.316 channel 2 pitch-bend 8192
22:40:54.316 channel 3 pitch-bend 8192
22:40:54.316 channel 4 pitch-bend 8192
22:40:54.317 channel 5 pitch-bend 8192
22:40:54.317 channel 6 pitch-bend 8192
22:40:54.317 channel 7 pitch-bend 8192
22:40:54.318 channel 8 pitch-bend 8192
22:40:54.318 channel 9 pitch-bend 8192
22:40:54.319 channel 10 pitch-bend 8192
22:40:54.319 channel 11 pitch-bend 8192
22:40:54.319 channel 12 pitch-bend 8192
22:40:54.320 channel 13 pitch-bend 8192
22:40:54.320 channel 14 pitch-bend 8192
22:40:54.320 channel 15 pitch-bend 8192
22:40:54.321 channel 16 pitch-bend 8192
22:40:54.321 channel 1 control-change 64 0
22:40:54.322 channel 2 control-change 64 0
22:40:54.322 channel 3 control-change 64 0
22:40:54.322 channel 4 control-change 64 0
22:40:54.323 channel 5 control-change 64 0
22:40:54.323 channel 6 control-change 64 0
22:40:54.323 channel 7 control-change 64 0
22:40:54.324 channel 8 control-change 64 0
22:40:54.324 channel 9 control-change 64 0
22:40:54.324 channel 10 control-change 64 0
22:40:54.325 channel 11 control-change 64 0
22:40:54.325 channel 12 control-change 64 0
22:40:54.325 channel 13 control-change 64 0
22:40:54.326 channel 14 control-change 64 0
22:40:54.326 channel 15 control-change 64 0
22:40:54.326 channel 16 control-change 64 0
22:40:54.724 channel 4 control-change 74 0
22:40:54.724 channel 4 channel-pressure 40
22:40:54.726 channel 4 pitch-bend 8192
22:40:54.727 channel 4 note-on C4 127
22:40:54.727 channel 4 channel-pressure 54
22:40:54.727 channel 4 channel-pressure 71
22:40:54.728 channel 4 channel-pressure 90
22:40:54.734 channel 4 channel-pressure 111
22:40:54.736 channel 4 channel-pressure 116
22:40:54.747 channel 4 control-change 74 6
22:40:54.747 channel 4 control-change 74 14
22:40:54.747 channel 4 control-change 74 22
22:40:54.748 channel 4 control-change 74 30
22:40:54.748 channel 4 channel-pressure 119
22:40:54.748 channel 4 control-change 74 34
22:40:54.749 channel 4 control-change 74 39
22:40:54.755 channel 4 control-change 74 44
22:40:54.756 channel 4 control-change 74 50
22:40:54.757 channel 4 control-change 74 55
22:40:54.757 channel 4 channel-pressure 121
22:40:54.757 channel 4 control-change 74 61
22:40:54.758 channel 4 control-change 74 65
22:40:54.765 channel 4 control-change 74 69
22:40:54.767 channel 4 control-change 87 107
22:40:54.767 channel 4 control-change 74 71
22:40:54.775 channel 4 control-change 87 11
22:40:54.776 channel 4 channel-pressure 122
22:40:54.777 channel 4 control-change 87 54
22:40:54.777 channel 4 channel-pressure 122
22:40:54.777 channel 4 control-change 87 79
22:40:54.778 channel 4 control-change 74 69
22:40:54.778 channel 4 control-change 87 44
22:40:54.778 channel 4 control-change 74 67
22:40:54.784 channel 4 control-change 87 26
22:40:54.784 channel 4 control-change 74 65
22:40:54.785 channel 4 control-change 87 28
22:40:54.786 channel 4 control-change 74 62
22:40:54.786 channel 4 control-change 87 102
22:40:54.787 channel 4 channel-pressure 122
22:40:54.787 channel 4 control-change 87 104
22:40:54.788 channel 4 control-change 74 58
22:40:54.788 channel 4 control-change 87 68
22:40:54.789 channel 4 control-change 74 55
22:40:54.789 channel 4 control-change 87 17
22:40:54.789 channel 4 control-change 74 51
22:40:54.790 channel 4 control-change 87 24
22:40:54.790 channel 4 control-change 74 46
22:40:54.790 channel 4 control-change 87 60
22:40:54.794 channel 4 control-change 74 37
22:40:54.794 channel 4 control-change 87 78
22:40:54.795 channel 4 control-change 74 29
22:40:54.796 channel 4 control-change 87 22
22:40:54.797 channel 4 control-change 74 22
22:40:54.797 channel 4 control-change 87 23
22:40:54.797 channel 4 channel-pressure 123
22:40:54.798 channel 4 control-change 87 27
22:40:54.798 channel 4 control-change 74 8
22:40:54.798 channel 4 control-change 74 0
22:40:54.805 channel 4 control-change 87 41
22:40:54.807 channel 4 channel-pressure 113
22:40:54.807 channel 4 control-change 87 119
22:40:54.807 channel 4 channel-pressure 105
22:40:54.808 channel 4 control-change 87 49
22:40:54.808 channel 4 channel-pressure 100
22:40:54.808 channel 4 control-change 87 29
22:40:54.809 channel 4 channel-pressure 96
22:40:54.809 channel 4 control-change 87 13
22:40:54.809 channel 4 channel-pressure 93
22:40:54.816 channel 4 control-change 87 98
22:40:54.816 channel 4 channel-pressure 90
22:40:54.817 channel 4 control-change 87 1
22:40:54.817 channel 4 channel-pressure 89
22:40:54.817 channel 4 control-change 87 89
22:40:54.818 channel 4 channel-pressure 87
22:40:54.818 channel 4 control-change 87 84
22:40:54.818 channel 4 channel-pressure 81
22:40:54.819 channel 4 control-change 87 17
22:40:54.819 channel 4 channel-pressure 77
22:40:54.819 channel 4 control-change 87 95
22:40:54.825 channel 4 channel-pressure 73
22:40:54.825 channel 4 control-change 87 25
22:40:54.826 channel 4 channel-pressure 71
22:40:54.826 channel 4 control-change 87 37
22:40:54.827 channel 4 channel-pressure 69
22:40:54.827 channel 4 control-change 87 31
22:40:54.828 channel 4 channel-pressure 55
22:40:54.828 channel 4 control-change 87 91
22:40:54.828 channel 4 channel-pressure 44
22:40:54.828 channel 4 control-change 87 104
22:40:54.829 channel 4 channel-pressure 36
22:40:54.829 channel 4 control-change 87 114
22:40:54.829 channel 4 channel-pressure 30
22:40:54.829 channel 4 control-change 87 96
22:40:54.834 channel 4 channel-pressure 25
22:40:54.835 channel 4 control-change 87 114
22:40:54.836 channel 4 channel-pressure 21
22:40:54.837 channel 4 control-change 87 127
22:40:54.837 channel 4 channel-pressure 18
22:40:54.837 channel 4 control-change 87 105
22:40:54.838 channel 4 channel-pressure 16
22:40:54.838 channel 4 control-change 87 25
22:40:54.838 channel 4 channel-pressure 15
22:40:54.839 channel 4 control-change 87 124
22:40:54.839 channel 4 channel-pressure 13
22:40:54.839 channel 4 control-change 87 100
22:40:54.844 channel 4 channel-pressure 12
22:40:54.844 channel 4 control-change 87 113
22:40:54.845 channel 4 channel-pressure 11
22:40:54.846 channel 4 control-change 87 28
22:40:54.846 channel 4 channel-pressure 11
22:40:54.846 channel 4 control-change 87 91
22:40:54.847 channel 4 channel-pressure 10
22:40:54.847 channel 4 control-change 87 43
22:40:54.847 channel 4 channel-pressure 10
22:40:54.847 channel 4 control-change 87 61
22:40:54.848 channel 4 channel-pressure 9
22:40:54.848 channel 4 control-change 87 107
22:40:54.848 channel 4 channel-pressure 8
22:40:54.856 channel 4 control-change 87 45
22:40:54.857 channel 4 channel-pressure 8
22:40:54.857 channel 4 control-change 87 127
22:40:54.857 channel 4 channel-pressure 7
22:40:54.858 channel 4 control-change 87 48
22:40:54.858 channel 4 channel-pressure 7
22:40:54.858 channel 4 note-off C4 0
22:40:54.859 channel 4 channel-pressure 0
22:40:54.997 channel 1 control-change 82 47
22:40:54.997 channel 16 control-change 82 16
22:40:58.324 channel 1 control-change 82 0
22:40:58.324 channel 4 control-change 87 0
22:40:58.324 channel 16 control-change 82 0

1 Like

I also opened a ticket with Bitwig support. Probably not to tell them news exactly, but it cannot hurt to let them know that more people would appreciate the option to optionally turn off decimation.

1 Like

I thought bitwig had always put midi automation onto a ‘grid’, then uses linear interpolation between points?!

the difference with normal automation (like other daws) is you have less points and then (these days) have curves between points, so its essentially continuous. (probably 32 bit, like audio)

I think the problem with mpe data, is even with BWS ‘opinionated’ approach, we still deal at too low a level - it’s like editing pixels of a photo. its ok for ‘scapel’ editing, but not great for something higher level.

this is somewhat true of all recorded midi, but more noticeable in mpe as there is so much data

(in fairness, the midi tools all daws have provided are much better than they were, and at least now automation is attached to notes)

usually synth engines slew data anyway, partly due to avoid the 7 bit zipper, so its ok.
though this can miss the transient details, which as Ed/Lippold have frequently raised is a very important part … which basically brings us back to the OP point, about snappy percussive sounds.

as for 14 bit MPE / MPE+ - has BWS moved away from controllers scripts?
previously, you could implement all this yourself in your own script.

2 Likes