Simulating button presses (and releases) in scripts
2 posters
Page 1 of 1
Simulating button presses (and releases) in scripts
Hello everybody.
Let me explain what I am wishing to have if it's possible
I want to build a Chord Sequencer .
So in order to do that , I have 12 buttons for the root of the chord (C,C#-Db,D....)
I also have 7 buttons for the most used chord types (Major,Minor,7th....)
So with a combination of 1 root button and 1 chord type button i can send 4 midi notes (or more)
My first Root button has the following script
[(press)
{@root:#48+@low#}
]
(48 is the low C and @low is a variable which permits to choose the octave)
My first chord type button has the following script
[(press)
{cc:1,123,0}
{noteon:1,#@root#,#@vel#}
{noteon:1,#@root+4#,#@vel#}
{noteon:1,#@root+7#,#@vel#}
{noteon:1,#@root+12#,#@vel#}
]
(@vel is the velocity of the note) , cc 123 is all note off to cut the previous chord)
so when I press C button and Maj button , I can send a Cmajor chord
and when I press D button and Min button I cut the Cmajor and send D minor
I cannot think of a mean to mesmorize the chord sequence other than putting the scripts of the pair of buttons (root-type) in a string variable that grows each time
So it would be nice if instead of making a gigantic script I could mesmorize only the buttons and then replay them with the help of timers
So it would be great to have "press button " and "release button" in the possible events
Anyway , this is a great plugin and I thank you for your continuous job
Kindly
Alain
Let me explain what I am wishing to have if it's possible
I want to build a Chord Sequencer .
So in order to do that , I have 12 buttons for the root of the chord (C,C#-Db,D....)
I also have 7 buttons for the most used chord types (Major,Minor,7th....)
So with a combination of 1 root button and 1 chord type button i can send 4 midi notes (or more)
My first Root button has the following script
[(press)
{@root:#48+@low#}
]
(48 is the low C and @low is a variable which permits to choose the octave)
My first chord type button has the following script
[(press)
{cc:1,123,0}
{noteon:1,#@root#,#@vel#}
{noteon:1,#@root+4#,#@vel#}
{noteon:1,#@root+7#,#@vel#}
{noteon:1,#@root+12#,#@vel#}
]
(@vel is the velocity of the note) , cc 123 is all note off to cut the previous chord)
so when I press C button and Maj button , I can send a Cmajor chord
and when I press D button and Min button I cut the Cmajor and send D minor
I cannot think of a mean to mesmorize the chord sequence other than putting the scripts of the pair of buttons (root-type) in a string variable that grows each time
So it would be nice if instead of making a gigantic script I could mesmorize only the buttons and then replay them with the help of timers
So it would be great to have "press button " and "release button" in the possible events
Anyway , this is a great plugin and I thank you for your continuous job
Kindly
Alain
AL1_1956- Posts : 7
Join date : 2024-03-30
Re: Simulating button presses (and releases) in scripts
Hi, I see what you are getting at, but unfortunately, the plugin can't do that.
I would suggest that you create a solution where a background script plays the chords and that you trigger that script from buttons, using variables.
You have the @root and @vel variables, and I suggest defining a third variable for chord type. You could, e.g., have a variable @chord that can have values like "Maj", "Min", "Maj7", and whatever chord you need to have available.
The background script can have commands like this:
[(@chord:"Maj"){cc:1,123,0}{noteon:1,#@root#,#@vel#}{noteon:1,#@root+4#,#@vel#}{noteon:1,#@root+7#,#@vel#}{noteon:1,#@root+12#,#@vel#}]
[(@chord:"Min"){cc:1,123,0}{noteon:1,#@root#,#@vel#}{noteon:1,#@root+3#,#@vel#}{noteon:1,#@root+7#,#@vel#}{noteon:1,#@root+12#,#@vel#}]
...and so on.
On a button, you could then have a command like this:
[(press){@root:64}{@vel:100}{@chord:"Maj"}]
The important thing is to set the @chord variable last since that's what triggers the chord in the background script. You can, of course, split the command if you want to set the root with one button and the chord type with another.
If you want to automate a sequence of chords, you can either have a script like this:
[(press){@root:64}{@vel:100}{@chord:"Maj"}{wait:1000}
{@root:50}{@vel:100}{@chord:"Min"}{wait:500}
{@root:74}{@vel:100}{@chord:"Maj7"}{wait:1000}]
Or create a multi-action with separate script actions separated by delay actions.
I would suggest that you create a solution where a background script plays the chords and that you trigger that script from buttons, using variables.
You have the @root and @vel variables, and I suggest defining a third variable for chord type. You could, e.g., have a variable @chord that can have values like "Maj", "Min", "Maj7", and whatever chord you need to have available.
The background script can have commands like this:
[(@chord:"Maj"){cc:1,123,0}{noteon:1,#@root#,#@vel#}{noteon:1,#@root+4#,#@vel#}{noteon:1,#@root+7#,#@vel#}{noteon:1,#@root+12#,#@vel#}]
[(@chord:"Min"){cc:1,123,0}{noteon:1,#@root#,#@vel#}{noteon:1,#@root+3#,#@vel#}{noteon:1,#@root+7#,#@vel#}{noteon:1,#@root+12#,#@vel#}]
...and so on.
On a button, you could then have a command like this:
[(press){@root:64}{@vel:100}{@chord:"Maj"}]
The important thing is to set the @chord variable last since that's what triggers the chord in the background script. You can, of course, split the command if you want to set the root with one button and the chord type with another.
If you want to automate a sequence of chords, you can either have a script like this:
[(press){@root:64}{@vel:100}{@chord:"Maj"}{wait:1000}
{@root:50}{@vel:100}{@chord:"Min"}{wait:500}
{@root:74}{@vel:100}{@chord:"Maj7"}{wait:1000}]
Or create a multi-action with separate script actions separated by delay actions.
Re: Simulating button presses (and releases) in scripts
Okay , Thank You for the tip of using the background script.
I was at first a bit surprised because as I am working on several projects with the StreamDeck , I had some strange things happening in my other projects.
Then I realized that I forgot to deactivate the background script
(Silly me , Age is really a shipwreck)
Then I thought "What is the simplest way to record a sequence of keys ," and the answer was to use a combination of e_row and e_column which is unique for each key of the StreamDeck.
So I build a string wich looks like this
Let's say I want a sequence of 4 chords
the C root is '01' and the Major Chord is '31'
my string is '0131,'
the C# root is '02' and the Minor Chord is '32'
my string becomes '0131,0232,'
and so on...
then my background script reads and cuts the long string in several pieces , each one being a root+chord and sends the "noteon ,wait, noteoff"
Easy on paper , lets do that on the StreamDeck
Have a nice day
Alain
I was at first a bit surprised because as I am working on several projects with the StreamDeck , I had some strange things happening in my other projects.
Then I realized that I forgot to deactivate the background script
(Silly me , Age is really a shipwreck)
Then I thought "What is the simplest way to record a sequence of keys ," and the answer was to use a combination of e_row and e_column which is unique for each key of the StreamDeck.
So I build a string wich looks like this
Let's say I want a sequence of 4 chords
the C root is '01' and the Major Chord is '31'
my string is '0131,'
the C# root is '02' and the Minor Chord is '32'
my string becomes '0131,0232,'
and so on...
then my background script reads and cuts the long string in several pieces , each one being a root+chord and sends the "noteon ,wait, noteoff"
Easy on paper , lets do that on the StreamDeck
Have a nice day
Alain
AL1_1956- Posts : 7
Join date : 2024-03-30
Re: Simulating button presses (and releases) in scripts
It sounds complicated to me, but if it works for you, it's fine.
Similar topics
» v-pot scribble scripts not updating
» Scripts and scribble strips
» Is there a way to change the icon only once for every button?
» Streamdeck Plus: Possible to use rotation knobs with scripts or sysex?
» ID Button Number
» Scripts and scribble strips
» Is there a way to change the icon only once for every button?
» Streamdeck Plus: Possible to use rotation knobs with scripts or sysex?
» ID Button Number
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum