Closed brunetton closed 6 years ago
This is the same with rotary.speed-preset
. Do you want me to open another bug ?
That's a conceptual issue (and identical to #51). For historical reasons there are different messages which can trigger the same action, and feedback is indeed not consistent.
Using a Program Change to en/disable vibrato uses vibrato.routing
to set the tow vibrato switches atomically.
A config file
midi.controller.upper.84=vibrato.routing
will provide feedback bit 6 (64) for "upper" and bit 5 (32) for "lower" vibrato.
I'll see if it can also trigger other, newer, dedicated "vibrato.upper" mappings.
No need to open another bug for the Leslie.
The following are currently ambiguous and/or inconsistent:
"vibrato.routing", /* off/lower/upper/both */
"vibrato.upper", /* off/on */
"vibrato.lower", /* off/on */
"swellpedal1", /* Volume, for primary ctrlr (mod wheel) */
"swellpedal2", /* Volume, for secondary ctrlr (expression) */
"rotary.speed-preset", /* stop, slow, fast, stop */
"rotary.speed-toggle", /* sustain pedal */
"rotary.speed-select", /* 0..8 (3^2 combinations) [stop/slow/fast]^[horn|drum] */
Why not making a 1 - 1 matching between UI widgets and CC signals ? One signal per widget. This doesn't prevent from adding additional features on top of it (like the one-knob vibrato control), but it ensure that UI users that add signals receive the signals they defined from UI. A more advanced user should use program file to use other advanced messages.
What do you think about that ?
There is backwards compatibility to consider e.g. the two swellpedal
option go all the way back to beatrix (2004). Also the original vibrato.routing
cannot be removed without breaking old config files and/or existing DAW sessions.
While you might be comfortable to write core and build on top, most musicians are not.
This is why some wrapper were added (dedicated vibrato.upper
and vibrato.lower
as well as rotary.speed-toggle
).
Anyway, it isn't too hard to properly send feedback.
Thanks !
In all this comment, I'm using 23ae3055634c6a7c6abe91b226809de3d913d90f
This is perfect for vibrato.upper
and vibrato.lower
; as they emit the same values they receive, independently. This works with O-S-C: I can control each vibrato independently, and when they change due to program chance, O-S-C UI receive the "good" signal (0 or 127) and buttons are updated correctly.
=> thanks a lot ! :champagne:
Unfortunately, I did not manage to have the same comportment with whirl :s I probably missed something, and I'm sorry for that.
I used the whirl messages this configuration for testing whirl messages:
midi.controller.upper.80=percussion.enable
midi.controller.upper.91=rotary.speed-select
midi.controller.upper.92=rotary.speed-preset
midi.controller.upper.93=rotary.speed-toggle
(I don't really get the difference between those 3 signals so I put all of them to be sure not to miss something)
1 {
name="off",
rotary=off
perc=off
}
2 {
name="Chorale",
rotary=chorale
perc=on
}
3 {
name="Tremolo",
rotary=tremolo
perc=on
}
Two problems appears:
When I switch from Programs 1, 2 and 3, only CC 80
(percussion) is sent by setBfree, there's no CC 90, 91 nor 92 :(
Here's the explanation in details. The table shows received signals values after changing the position of rotary switches in UI:
The "Received values" column represent : (rotary.speed-preset CC value, rotary.speed-select CC value)
(rotary.speed-toggle is never sent).
Lower | Upper | Received values |
---|---|---|
Chorale | Chorale | (0, 64) |
Chorale | Off | (64, 64) |
Chorale | Tremolo | (127, 112) |
Off | Chorale | (0, 48) |
Off | Off | (64, 0) |
Off | Tremolo | (127, 96) |
Tremolo | Chorale | (0, 80) |
Tremolo | Off | (64, 32) |
Tremolo | Tremolo | (127, 127) |
Here's the O-S-C controls that I defined:
What I actually need is:
With the actual received signals values, I can't say to O-S-C:
CC 0
on this channel, set the upper whirl control to 'off'"CC 64
on this channel, set the upper whirl control to 'Chorale"CC 127
on this channel, set the upper whirl control to 'Tremolo"because those values depends from lower whirl control position !
For example, the same table, with the signals values I would need: (with mapping 127 for Tremolo, 0 for Off and 64 for Chorale in this example)
Lower | Upper | Received signals |
---|---|---|
Chorale | Chorale | (64, 64) |
Chorale | Off | (64, 0) |
Chorale | Tremolo | (64, 117) |
Off | Chorale | (0, 64) |
Off | Off | (0, 0) |
Off | Tremolo | (0, 127) |
Tremolo | Chorale | (127, 64) |
Tremolo | Off | (127, 0) |
Tremolo | Tremolo | (127, 127) |
Those two signals could be named rotary-speed.upper
and rotary-speed.lower
, by analogy to vibrato.upper
and vibrato.lower
.
I hope I'm more clear this time and you'll be able to put the finger on what I missed to understand !
Thanks again, really !
Problem 1: see https://github.com/pantherb/setBfree/blob/master/pgm/default.pgm#L69-L71 it's rotaryspeed
(not rotary
)
Problem 2: that is exactly whey I expect. not a bug.
The difference is that rotary.speed-preset
reports the horn, but when you invoke it, it sets both horn and drum speed. It's also mapped so that 0, 127 switches slow/fast (with off in the middle) so that it can be conveniently bound to a mod-wheel or a MIDI foot-pedal which only has two states.
In the past it was possible to customize these presets, luckily no user did that, so that feature was removed (but the property name remained for compatibility).
rotary.speed-select
allows for fine-grained separate control of all possible off/slow/fast combinations, just in case.
I don't see a case to actually add even more duplicate properties. In reality switching drum and horn rotor separately is rare (only modded Leslies)
perhaps the following table makes this more obvious (with default preset):
Drum | Horn | rotary.speed-select |
.preset write |
.preset feedback |
---|---|---|---|---|
stop | stop | 0 | (64) | 64 |
chorale | stop | 16 | - | 64 |
tremolo | stop | 32 | - | 64 |
stop | chorale | 48 | - | 0 |
chorale | chorale | 64 | 0 | 0 |
tremolo | chorale | 80 | - | 0 |
stop | tremolo | 96 | - | 127 |
chorale | tremolo | 112 | - | 127 |
tremolo | tremolo | 127 | 127 | 127 |
Problem 1: see https://github.com/pantherb/setBfree/blob/master/pgm/default.pgm#L69-L71 it's rotaryspeed (not rotary)
Indeed ! Shame on me !
In reality switching drum and horn rotor separately is rare (only modded Leslies)
That was the thing ! I didn't knew that. So I can use rotary.speed-preset
to control horn and drum speeds and monitor horn speed, using horn and drum together.
So; I think this was the last problem I had using setBfree in combination with O-S-C and it's solved :) I'm very enthusiast ! Thanks again for all :)
In reality switching drum and horn rotor separately is rare
To further elaborate: Most musicians on stage only toggle between chorale / tremolo (both drum and horn). Stopping the Leslie can result in the horn pointing in some odd direction.
setBfree offers ways to configure this and does allow for fancy settings. but remote-control via MIDI is probably not the best way to interact. Also it is rather something you'll do in a studio, or when working offline (mod your leslie) -- not live on stage.
Have a look at the "setBfree whirl speaker" UI :)
Hi again. Still trying to get a full MIDI feedback with command line version, I came across some little things that you maybe would to be aware of. Here is one of those things:
Command line version nor UI sent me back any CC MIDI message for a Program Change implying vibrato switch. For example, given this programs file:
And this config file:
Switching between Program 1 and Program 2 repetelively only send back
CC 80 0
andCC 80 127
, notCC 84 0
andCC 84 127