I’m using a MIDI joystick for some functions of Traktor. It’s a 4-pole joystick capable of sending values 0-127. Basically what I want to do it translate the signal so that I can send only value 127 at the at the end of each pole, and 0 at the center, like a button. I would also like to be able to translate the signal so that, lets say I want to control the crossfader. Let’s say the poles for the joystick are CC1, 2, 3, and 4. I would want to translate CC1 to send 0 where it would normally send 127, and 64 where it would normally send 0 (so 0-64), and translate CC2 to send on CC1 values of 64 where it would normally send 0 and 127 where it would normally send 127 (so 64-127).
What functions of MIDIpipe can I use? Is this the right software for this?
Wait a sec… the pole transmits in four different directions. Is each direction transmitting on a difference MIDI Channel or is it transmitting a different Control Change Number?
Meaning: Up transmits 1-127 on channel 1, or CC1? etc.?
I’m not familiar with MIDI joysticks, but from what I can tell, a message factory in MIDIpipe should do the trick (with passthrough disabled). You can definitely do it with an applescript trigger as well (with passthrough disabled).
Can you give me more information as to what information is sent when using the joystick on the X axis and Y axis (I would imagine its 2 CC values, not 4, 63 or 64 being in the center)? Use an alist pipe to see the MIDI messages.
alright, for your first hypothetical use, message factory is perfect. I don’t have a MIDI controller with me at the moment, so I can’t test it. You have to do this for each control channel. Here is what you need to do:
Setup a pipe that receives the CC data and outputs 0 if CC data is between 0 and 124.
Setup a second pipe that receives the CC data and outputs a 127 if CC data is between 125 and 127
I can’t help you build the midi pipe because I don’t have a MIDI controller in front of me to help.
Alternatively, use a applescript trigger. For this, you need to find out the HEX values for the MIDI data you want to intercept. Note the third item in the message list is always the value of the MIDI message.
Here is one example:
======================
on runme(message)
if (item 1 of message = XX) and (item 2 of message = YY) and (item 3 of message > 124) then
set item 3 of message to 127
end if
if (item 1 of message = XX) and (item 2 of message = YY) and (item 3 of message < 125) then
set item 1 of message to 0
end if
return message
end runme
or (this is the preferred method because you don’t have to use a bunch of if/then statements for each CC value.
======================
on runme(message)
if (item 1 of message = XX) then
if (item 2 of message ≥ YY) and (item 2 of message ≤ ZZ) then
if (item 3 of message < 125) then
set item 3 of message to 0
else
set item 3 of message to 127
endif
endif
endif
return message
end runme