Include MIDI channel data in the NoteInput.sendRawMidiEvent() API function

Update the Bitwig API so that the NoteInput.sendRawMidiEvent function doesn’t ignore midi channel data. This way Bitwig extensions creators can explore more possibilities without this limitation, for instance with Open Sound Control (OSC) instruments.

What problem(s) would this feature resolve?

Right now the NoteInput.sendRawMidiEvent API function is designed to ignore MIDI channels. As the documentation says:

Sends MIDI data directly to the note input. This will bypass both the event filter and translation tables. The MIDI channel of the message will be ignored.

The sendRawMidiEvent function is the only way for an extension to generate note events in Bitwig. The inability to generate notes on separate MIDI channels restricts creative freedom by forcing all generated MIDI notes to be on a single channel.

An example of where this causes problems is sending MIDI via OSC. Because the data gets squashed down to a single MIDI channel, creators have to rely on hacks like using note velocity to filter the notes back out into separate channels.

How does this feature fit in Bitwig as a product?

One of the defining features of Bitwig is it’s extensibility and modularity. Allow Bitwig extensions to programmatically generate MIDI notes on multiple channels fits very well in this vision.

Is there already an alternative way to achieve this on Bitwig?

Not really. It is not possible to have more than one voice without severe compromises like forgoing dynamics in-order to separate notes out into different tracks.

Could it be implemented using Bitwig components or APIs, without Bitwig team’s support?

No. It’s an API issue.

Could it be provided by a VST or something else reasonably integrated with Bitwig?

No.

Are there other products that offer this feature?

Reaper has native OSC support featuring multi-track routing and Ableton has multichannel support via the Max4Live API extensions.

Relevant links (optional)

1 Like

5 posts were split to a new topic: [Draft discussion] 2 Include MIDI channel data in the NoteInput.sendRawMidiEvent() API function

A prime example of where this causes problems is sending MIDI via OSC. I have several experimental art pieces that connect to Bitwig via OSC and because the data gets squashed down to a single MIDI channel I have to resort to some ridiculous hacks; for example using note velocity to filter the notes back out into separate channels.

Some of the experimental art pieces are using EEG data to generate melodies, using DNA sequences to generate melodies, using satellite instrument measurements to modulate parameters, and using physics simulations to modulate parameters.

Basically OSC support is completely broken because of the way midi data is handled in the extension API. It’s currently impossible to create programmatic music, or use OSC based instruments, having more than one voice without severe compromises; like forgoing dynamics in-order to separate notes out into different tracks.

1 Like

I’d like to close this issue as [solved] / [non-issue]…

Looks like the actual issue here was with my reading comprehension along with a semi-hidden setting that got added to bitwig somewhere in the v2.x releases…

After changing this setting the OSC receiver worked as expected…

By default Bitwig will force all midi channel data to channel 1 – to change this behavior you have to open the inspector for each track strip and manually change the midi channel mapping from ‘All → 1’ to ‘All → Same’.

It would be nice if there was a global preference for this, but in the grand scheme of things this isn’t a high priority.

Thank y’all for your attention, and my apologies for possibly distracting from more important issues.

1 Like

Thank you for keeping tryong and for sharing the solution!

This topic is being archived now.