USB Controller Feedback

(Loveridgem) #1

Hi All,

First post here. Been using Ardour a while and have been enjoying it. I have a MidiPlus SmartPAD that sends midi control and notes to Ardour. I have made a custom configuration file and it works well. The one area I’m struggling with is control feedback to keep the lights on.

I have set up one of the buttons (this thing looks similar to a LaunchPad) to mute a channel in the mixer. I have “Momentary” set to “no” since I want it to be a mute toggle. This way when I press the button, a note on and note off are sent from the controller and it stays muted until I press again.

Here’s the problem: Ardour does not keep the “note on” feedback message going back to the controller even though the channel is still muted. I don’t know if this is a limitation that can be overcome without changes to Ardour or if I’m just setting this up wrong. So I need some experienced people to help me figure this out.

As a possible workaround, I was going to use a Raspberry Pi in between the controller and Ardour that would provide the midi feedback I wanted and then pass the controller message on to Ardour, but I can’t configure the RPi to be a USB host and device simultaneously (really long sentence getting even longer). Any other hardware workarounds anyone can think of?

Thanks for your time!
Mike

(Len) #2

Are you sure you are using feedback? Or is the controller setting it’s own light on off? Ardour does not “keep” the light on, it either turns it on or off. The first thing to check is that Ardour is even sending feedback using the built in MIDI monitor. If Ardour is sending feedback, It may send it at the time of the press event and your controller may be sending then turning the lamp off on release. So the thing to find out is where the note off message is coming from. (or note on message with velocity 0)
Another thing to note is that in current versions of Ardour, CC messages do not use the Momentary parameter, only note events.
The midi monitor (sorry, MIDI Tracer) can be opened from the window menu. Then use the drop down menu at the top to select the MIDI Control Out to see what Ardour is sending to your controller.

(Loveridgem) #3

Thanks for your response!
I believe feedback is working. If I set momentary to yes, the light on the pad stays lit even though the muting in Ardour is only while I hold the pad down on the controller. When I let go, the muting stops, but the light stays lit. Setting momentary to no makes the muting work as a toggle, but the light does not stay lit.

Essentially, I’m getting the opposite of what I expect or need from the feedback. My gut is telling me that if Ardour is providing the feedback, it needs to keep the note on as long as the channel is muted and then when unmuted, it should turn the feedback note off.
I will use a tracer to see what’s coming back from Ardour and I will verify that I don’t have the controller output connected back to it’s input which would screw up everything sent back from Ardour. At work now and will try later today. I was unaware that Ardour had a midi tracer built in. I will look that up today as well. :slight_smile:

Not having momentary available for CC makes sense since I’m not sure how you can make a continuous control only be momentary. I may be missing something here or an applicable application of momentary on CC. But I’m using a pad which is sending a note, velocity, and on/off.

Mike

(Loveridgem) #4

OK, I used the MIDI Tracer in Ardour to see what it is sending back to the controller. I’ve made sure that the controller is not sending back to itself. It turns out it is only sending Note On to the controller. When I press the button, a Note On and Note Off are sent to Ardour. I have this configured as momentary=no. The channel mutes as I would expect and pressing it again unmutes it. However, Ardour only sends Note On to the controller and changes the velocity to 127 (on) and 0 (off). So Ardour is only manipulating the velocity and not whether the note is on or off.

12:26:50.767606 NoteOn chn 1 0 127
12:26:53.263903 NoteOn chn 1 0 0

I’m fairly certain if a NoteOff chn 1 0 0 was sent, the LED would turn off. All my pads are unlit and when I press it to mute a channel, the LED comes on and then never goes off.

I don’t know if this is a design decision in how midi feedback is handled or a defect. It seems like it should send Note Off if the velocity is zero.

Now since I’m fairly certain this is an issue for me that lies within the Ardour implementation, I need to find a workaround. I’m sure it will be a very long time before something like this gets fixed.

I’m now thinking of writing a Python script that sits in between the controller and Ardour that takes the Note On, Velocity 0 midi from Ardour and makes it a Note Off and send it to the controller. That would solve my problem in the interim.

Is this something I should report as a defect or enhancement to the Ardour team?

Thanks,
Mike

(Len) #5

Sounds like fun… It sounds like there needs to be a parameter that chooses note on vel=0 or note off vel=127 as there are some controllers that when using note events for switching, only look at note on messages. The advantage to using note on vel=0 is that running status can be used uninterrupted. That is, instead of sending two full three byte events for each button press, only the first event is three bytes and the rest can be two byte events helping to make the best use of MIDI’s limited band width. Most MIDI equipment therefore accepts note on vel=0 as a note off event. So using an actual note off would break some controllers. This is certainly worth a bug report in the tracker. DeviceInfo note-off=true in the file might be a good addition to make.

(Loveridgem) #6

Another possible solution is to add feedback to the midi config mapping. In the map file I specify what Ardour is supposed to with each midi message. If capability existed in Ardour, adding to that line you state what response Ardour should have would solve the problem. That way users can decide if they want to keep the note on and just adjust velocity or choose note off.

Essentially what’s needed is the ability to configure midi feedback. I have submitted a bug report on this and I might add to it that if the current feedback design is intentional, it would be better to allow configuring that feedback rather than a solution that works for some or many other devices.

Mike

(Paul Davis) #7

The current design was based on an earlier generation of simple generic MIDI controllers, where indicator lights were turned on/off by precisely the same message that the associated button sent out when the button was pressed (or released).

I have no particular interest in extending the capabilities of generic MIDI surface support, because it’s really a very weak model for interacting with surfaces.

OTOH, what we actually need to do (allow the development of new surface support by people who don’t consider themselves proficient in C++ and/or who don’t want to write a lot of boilerplate code) is a large amount of work and is not high on anyone’s priority list right now.