Send Midi Command > Control Change: Channel Bug

BTT v4.643 macos ventura 13.6.7

"Send Midi Command" > "Control Change" is sending the midi cc always through channel 1 (channel 0).

It doesn't matter what channel do I type in the field, it always use channel 1 (channel 0):

Please take a look to this post also. There is a bug in the list of ports, all ports are duplicated:

I‘ll have a look! Unfortunately I don’t know anything about midi, BTT just shows the ports it received from the system. Does it matter which one you select?

How can we help you with clean implementation? Do you have any questions we can help you with so you don't waste time learning?

Hi @Andreas_Hegenberg

If you don't know anything about midi, and you have implemented the midi triggers section and the send midi action, you are more than brilliant.

I don't know nothing about midi programming, but I am an experienced user in midi configurations.

I will try to tell you the midi basics, and how to test the current or future midi functions you develop for BTT.

1 - MIDI basics

There are different kinds of midi messages, like sysex messages (Sysex means System Exclusive) or NRPN (Non-Registered Parameter Number). These kind of midi messages could be implemented in the future, but not now (I assume that must be complex to implement them).
IMHO with the current messages we have in BTT (note on, note off, control change(cc), program change(pc), pitchbend(pb), channel pressure(cp)) we can do a lot of things.

CHANNELS AND PORTS

Any midi message (note on, note off, cc, pc, pb, cp) need a midi channel and a midi port to be transmitted.
There are 16 midi channels. There is no difference between them. They can be numbered from 0 to 15, or from 1 to 16. The midi channel is part of the midi message, it has no relation with the midi port.
Midi ports are the highways between devices. You can think of them like cables that connect one midi device to the computer, or one midi device to another midi device.
Midi devices usually have two midi ports: midi IN and midi OUT.
MIDI IN is the highway where all midi messages sent TO an specific device will be transmitted to.
MIDI OUT is the highway where all midi messages sent FROM an specific device will be transmitted to.

Example:

Let's say you have a Yamaha midi mixer device connected to a macbook pro with Logic. Both devices are connected with a thunderbolt cable. The thunderbolt cable is a double cable that connects:

  • the Logic midi out port to the Yamaha midi in port
  • the Yamaha midi out port to the Logic midi in port

If you want to move the fader of the Yamaha mixer and then see that the fader in Logic moves accordingly, you should configure this midi configuration in Logic:

control change number 7 (it's the cc of the fader, it could be another one)
velocity x (x=0 to 127 : 0 is fader at the bottom / 127 is fader at the top)
channel 1 (it could be anyone)
Logic Pro midi in port: Yamaha midi out port
Logic Pro midi out port: None

If you want also to move the fader in Logic Pro and then see that the fader in Yamaha mixer moves accordingly, you have to configure Logic Pro like this:

control change number 7
velocity x
channel 1
Logic Pro midi in port: Yamaha midi out port
Logic Pro midi out port: Yamaha midi in port

Midi ports can also be virtual ports. This means that the midi in and the midi out ports cables are virtual and instead of connecting devices you can connect software apps.

Very Important: It's a golden rule to not share midi ports to send and receive midi messages and not share midi ports betweeen different devices. One port only for send from one device to another device. One port only for receive from one device to another device.

NOTE ON: It represents a key pressed on a keyboarf pressed. The intensity you press the key is determined by the midi velocity value.

NOTE OFF: It represents a key released on a keyboarf pressed. The velocity you release the key is determined by the midi velocity value.

2 - AUDIO MIDI SETUP app

Open the Audio Midi Setup > Midi Studio > IAC Configuration: Create here two virtual midi ports. Call the two ports with clear names that define the direction of the communication:

BetterTouchTool_To_PocketMidi
PocketMidi_To_BetterTouchTool

3 - POCKET MIDI app

Download this app from appstore or from the website

This app is a perfect tool to send and receive midi messages and monitor also all the midi transmissions.

In the menubar select the port "BetterTouchTool_To_PocketMidi" as the InputPort.

In the menubar select the port "PocketMidi_To_BetterTouchTool" as the OutputPort.

In the menubar there is the views menu. Open the views and configure and save a layout like this:

Now you can press any key of the keyboard and a note on/off will be transmitted with the selected channel and velocity to the output port (to BTT)

Pressing the transmit button you can send cc, pc, pb, etc to the output port.

All midi messages sent from BTT to the midi port "BetterTouchTool_To_PocketMidi" will be listed in the MIDI IN MONITOR of the Pocket Midi app


Finally, I would like to suggest you to open a "Midi Development Thread" where all users can share ideas/bugs/questions (something similar to the "Floating Menu Alpha Development Thread" you started last year)

I have tested it and it doesn't matter wich one I select. If I select the original name port, it works. If I select the duplicated reduced name port, it works too.

Anyway, it seems to me that it should be fixed to only show the ports with the original names. I don't know how you get the list of ports, but I get the same name and quantity of ports in any of my music apps.

Here is a screenshot of the listed ports in PocketMidi:

I get the same list in Cubase, Live, Bome, etc.

But in BTT I get this list:

The duplicated ports are only the IAC ports. The hardware ports of my audio sound card are not duplicated, but the name is reduced.

In the other hand, the 13 correct IAC names are repeated twice.

Hi @Andreas_Hegenberg

I'm on version 4,660

The channel bug is still not fixed.

Send Midi > Control Change always send midi messages through channel 1.

As example, this configuration sends Control Change number 12 value 12 thorugh channel 1 instead of channel 12: