Home › Forums › General › Programming › boolean logic or lua?
Tagged: boolean logic; lua;
- This topic has 0 replies, 1 voice, and was last updated 7 years, 2 months ago by human fly.
-
AuthorPosts
-
February 10, 2017 at 9:53 am #71205
lua of course – i’m trying to resolve a problem with 4 buttons
selecting the value of a single MIDI sysex parameter. i’m
looking at the D-50 panel now, which must be more or less the
same thing – but it really is a terrible roland manual this time
(other ones are not actually as bad as people say)the D-110 has a similar partial button array, selecting
0-15 (0000-1111) on ONE parameter which controls the on/off state
of the 4 partials. not easy to represent graphically unless it has
some extra programming. it looks like this:
—————————————————
(sorry, this doesn’t show up right/spacing)
0000 ALL OFF 0
0001 1 1 partial1 solo
0010 2 2 partial2 solo
0011 1+2 3
0100 3 4 partial3 solo
0101 3+1 5
0110 3+2 6
0111 2+3+4 7
1000 4 8 partial4 solo
1001 4+1 9
1010 4+2 10
1011 4+21 11
1100 4+3 12
1101 4+3+1 13
1110 4+3+2 14
1111 4+3+2+1 15
————————————————–
as you see, you cannot switch each one on/off
as 0/1, 0/2, 0/4, 0/8 because 0 is always ALL OFF.so that looks like a boolean logic problem. don’t
know if it would be OR gates or XOR, or any other
combination of logic gates, and i’d have difficulty
figuring it out. i have to, because any other option
is going to look terrible represented graphically,
can’t be done unless loads of buttons are used.so then i thought, have a look at the D-50 panel, and
see what he did, because it has to be a Lua anyway.
and this is what is there:
‘called when the modulator changes’:
————————————————————-
—
— Called when a modulator value changes
— @mod http://ctrlr.org/api/class_ctrlr_modulator.html
— @value new numeric value of the modulator
—
PartialsOnOff = function(value)LowerP1 = panel:getModulatorByName(“LowerPartial1_OnOff”):getModulatorValue()
LowerP2 = panel:getModulatorByName(“LowerPartial2_OnOff”):getModulatorValue()
UpperP1 = panel:getModulatorByName(“UpperPartial1_OnOff”):getModulatorValue()
UpperP2 = panel:getModulatorByName(“UpperPartial2_OnOff”):getModulatorValue()LowerPartial = (LowerP1 + LowerP2)
UpperPartial = (UpperP1 + UpperP2)if LowerP1 == 1 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x02, 0x6e, 0x01, 0x0f, 0xf7})) end
if LowerP2 == 1 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x02, 0x6e, 0x02, 0x0e, 0xf7})) end
if LowerPartial == 2 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x02, 0x6e, 0x03, 0x0d, 0xf7}))
elseif LowerPartial == 0 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x02, 0x6e, 0x00, 0x10, 0xf7}))
endif UpperP1 == 1 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x01, 0x2e, 0x01, 0x50, 0xf7})) end
if UpperP2 == 1 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x01, 0x2e, 0x02, 0x4f, 0xf7})) end
if UpperPartial == 2 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x01, 0x2e, 0x03, 0x4e, 0xf7}))
elseif UpperPartial == 0 then
panel:sendMidiMessageNow(CtrlrMidiMessage({0xf0, 0x41, 0x00, 0x14, 0x12, 0x00, 0x01, 0x2e, 0x00, 0x51, 0xf7}))
endend
——————————————————————————-
i can’t tell yet from the D-50 manual what the parameter number is.
the D-110 manual is much better on this section. the parameter address
part of the message is <00 0C>the thing is, the D-50 panel sends out FOUR sysex message, and i’m
sure this isn’t right for the D-110. it only needs a single message,
and single value, 0-15. the value range contains all possible combinations
of partials. here is what the D-50 panel sends out:
——————————————————————-
this is partial1 off, and 2,3,4 on:F0 41 00 14 12 00 02 6E 02 0E F7
F0 41 00 14 12 00 01 2E 01 50 F7
F0 41 00 14 12 00 01 2E 02 4F F7
F0 41 00 14 12 00 01 2E 03 4E F7-which makes no sense to me at all. and i don’t think i can just
copy this method. i can see 2 different adresses there, the main
one looks like <01 2E>, i don’t know why it needs the <02 6E> address.
(and the manual is real ****** to look at)this was Anders Eriksson 2015
please help me solve this !
>edit>looking at the expression, it looks like it would work,
and makes sense, but it sends out 4 messages? i only want one.
looking at it more closely; -
AuthorPosts
- The forum ‘Programming’ is closed to new topics and replies.