Hi,
I had my first good, solid 3-hour stint with pd yesterday. I've got to say -- it is, to me, a much more creative experience that programming in a traditional environment.
Here's my current goal:
I'm trying to enhance the functionality of 2 simultaneous M-Audio Oxygen8s by making the pitch-wheel of each a "meta-controller" - in other words, I want to use the pitch wheel of each to control how the unit controls things.
When I "bump the top" of the pitch-wheel range, I want the MIDI Channel for that Oxygen8 to increase by one, and when I "bump the bottom" of the pitch-wheel range, I want the MIDI Channel for that Oxygen8 to decrease by one.
Also, the units must act completely independently of one another.
Here's what I've done so far to attain the goal:
Created a subpatch that uses [ctlin], [notein], and [bendin] to take in all the MIDI events I'm interested in, from all physical controllers. Packed all this data, 7 integers worth, into "midiBall" and sent it out. So far so good.
The main patch allows selection of the MIDI channels that the initial data for each physical controller comes from. (By default each physical controller transmits on channel 1, so that makes the Ctrl1 listen channel "1" and the Ctrl2 listen channel "17"). Still coming along great...
Here's where I run into trouble:
Created a subpatch to handle the incrementing and decrementing of send MIDI channel, per controller, via the pitch wheels. The pitchwheel has a control threshold: If the value is under 2000 then send a "minus1" to the send channel amount for that controller. If the value is over 14000 then send a "plus1".
The problem is, though, that I only want to send a single "plus1" for the entire duration of time that the pitch bend value exceeds 14000. The pitch bend should not be eligible to send another "plus1" until the value goes back below the threshold of 14000 and returns above it again.
In effect, what's happening now is that the pitch bend "bumps the top", but it increments the channel value 5, 10, 100 times (since the threshold is past everytime the wheel value registers) when I only want it to increment the value once.
As far as I can tell, here's the problem boiled down:
I need to construct a logical mechanism that has a threshold. If the threshold is passed, a *single* message is sent, and another "passed threshold" message is not sent until the threshold is "unpassed" and then crossed once again.
Thanks in advance for any insight, and thanks for reading!! rs
ahaa, yes.
For that, [change] is your friend.
so you could feed the output of [bendin] to two [moses] (ie. [moses 2000] feeding into a [moses 14000]).
Then if there is any output from the left output of the [moses 2000] this will indicate a drop down in channel number, so connect this output to a [-1( message.
Then connect the output of the second outlet of the [moses 14000] to a [1( message. Feed both of the outputs of these messages into a [change]. Now change will only output when there is a difference in the messages it receives. This should be able to be connected up to your channel changing malarky (for example, times by 16 and add to controller output number) without problem.
Good luck! Matt
-=-=-=-=-=-=-=-=-=-=-=-=- http://www.loopit.org/ -=-=-=-=-=-=-=-=-=-=-=-=- ----- Original Message ----- From: Ryan Supak To: pd-list@iem.at Sent: Tuesday, October 05, 2004 4:03 PM Subject: [PD] MIDI Control - Level 0.01 - Another Novice Q.
Hi,
I had my first good, solid 3-hour stint with pd yesterday. I've got to say -- it is, to me, a much more creative experience that programming in a traditional environment.
Here's my current goal:
I'm trying to enhance the functionality of 2 simultaneous M-Audio Oxygen8s by making the pitch-wheel of each a "meta-controller" - in other words, I want to use the pitch wheel of each to control how the unit controls things.
When I "bump the top" of the pitch-wheel range, I want the MIDI Channel for that Oxygen8 to increase by one, and when I "bump the bottom" of the pitch-wheel range, I want the MIDI Channel for that Oxygen8 to decrease by one.
Also, the units must act completely independently of one another.
Here's what I've done so far to attain the goal:
Created a subpatch that uses [ctlin], [notein], and [bendin] to take in all the MIDI events I'm interested in, from all physical controllers. Packed all this data, 7 integers worth, into "midiBall" and sent it out. So far so good.
The main patch allows selection of the MIDI channels that the initial data for each physical controller comes from. (By default each physical controller transmits on channel 1, so that makes the Ctrl1 listen channel "1" and the Ctrl2 listen channel "17"). Still coming along great...
Here's where I run into trouble:
Created a subpatch to handle the incrementing and decrementing of send MIDI channel, per controller, via the pitch wheels. The pitchwheel has a control threshold: If the value is under 2000 then send a "minus1" to the send channel amount for that controller. If the value is over 14000 then send a "plus1".
The problem is, though, that I only want to send a single "plus1" for the entire duration of time that the pitch bend value exceeds 14000. The pitch bend should not be eligible to send another "plus1" until the value goes back below the threshold of 14000 and returns above it again.
In effect, what's happening now is that the pitch bend "bumps the top", but it increments the channel value 5, 10, 100 times (since the threshold is past everytime the wheel value registers) when I only want it to increment the value once.
As far as I can tell, here's the problem boiled down:
I need to construct a logical mechanism that has a threshold. If the threshold is passed, a *single* message is sent, and another "passed threshold" message is not sent until the threshold is "unpassed" and then crossed once again.
Thanks in advance for any insight, and thanks for reading!! rs