Timer Between Two Perform Actions

Hi Steve,

I have those translators

  • Perform ‘NoteON’
  • Perform ‘Call’ triggers a timer named ‘Wait’
  • Perform ‘NoteOFF’

When I put them in Rules for another perfom translator and call it, the order becomes strange. It triggers noteon and noteoff first then the timer last. Can you check the file and let me know how I can send a note on first, then send a second wait and lastly send a noteoff to silenced the playing note.

Thanks for all.
example.bmtp (1.9 KB)

Your call to to trigger the timer is killing the timer instead of starting it… Everything looks good here. I put log rules in each translator so that you can see what is happing.

732310 - MIDI IN [Bome MIDI Translator 1 Virtual In]: 9C 28 7F
732310 - IN   0.4 Note On on ch. 13 with note:40 (0x28) and any velocity set 'qq' to velocity=127
732310 - 0.4:3 Timer Started
732310 - IN   0.0 Perform NoteON(12,60,127)
732310 - 0.0:1 Sending Note On
732310 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 9C 3C 7F
732310 - IN   0.2 Perform Call()
732310 - 0.2:1 Starting Timer Wait
732310 - IN   0.1 Perform NoteOFF(12,60,127)
732310 - 0.1:1 Sending Note Off
732310 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 8C 3C 7F
734310 - IN   0.3 On timer "Wait"
734310 - 0.3:1 Timer Tripped
735310 - IN   0.3 On timer "Wait"
735310 - 0.3:1 Timer Tripped

It seems that you also have MIDI input ports and output ports defined so I set the input to ‘Captain’ and the ouput to MBCG1

For more information about device selection, see this tutorial.

example-2024-09-28.bmtp (2.2 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Steve,
I have the same problem. It is first sending noteon and noteoff, at last the timer. I am including the picture of Log Window. The reason I use the timer is to wait a second between on and off. But it waits after the note on and noteoff is processed.

What is the sequence of events and timing that you want to achieve?

If all that you want to do is immediately send a note on and then send a note off 1 second later, you can just use perform with a delay. No timer need. I use the 4th parameter to perform ‘NoteOFF’ for the delay amount in ms.

example-2024-09-29.bmtp (2.3 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Because english is my second language, I sometimes have difficulty in writing complex things. That’s why I wanted to ask in the simplest way that comes to my mind. That’s why I wanted to ask you in a simple 3-step sequence. Noteon, wait, noteoff. I just want to have a wait time that I will call independently between two performs.
I don’t want to do this using a delay and I will definitely have to use loop for different amounts and sequance in floating timeline. I can only design the complicated thing in my mind in this form. All I wanted is a wait time that I will call independently and wait. Not with delay function. That’s why I explained it in a simplified way 1. note on. 2. wait and 3.note off. Even though the operation order is as I said, the log shows the result differently.

The ordering in the file you sent me is also correct, but when I trigger the perform chain in your file, the ordering appears differently in the log. Same there also. 1. noteon, 2.noteoff. 3.Wait. This is not the right perform order that we definded in rules

if the way I write is not clear, please let me know and I will write in more detail.

Thanks

Could you open the log window and check. MIDI In, Incoming, MIDI OUT and , Outgoing. Then cut and paste the output and post it?

Perhaps since you have so many MIDI input devices, one of those are interfering with the order.

If you want flexible timing for the note-off event, please let me know how you want to control the different timing. For instance, do you want different notes to alter the note-off event timing, different incoming velocities or something else?

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi steve,

Here is the log view for the file you sent. Keep in mind that it if the first one you sent me, named example-2024-09-28.bmtp (2.2 KB). As I understand wait perform comes at the end which is not normal.

Back to the original question. I explained what I wanted to do by drawing it in the picture. I hope everything is clear in the graph.

Summary…

The main purpose here is to control pitch bend, modulation, expression(etc) as automation within a preset(translator) rather than manually. We can either apply it individually or several functions at once. With this technique, we will provide a special articulation to the musical instrument or different unique effects. The drum pads are serving as triggers for presets. We can program any CC number or note to any button includinc velocity, aftertouch, note number, midi channel etc. If it is not clear why we need special independent delays as I explained in the chart.

Thanks for all STEVE.

Log view for your file…

Yes, I realize the first project file I sent has the timer occuring after the note off.

So as I understand,

  1. You trigger a note-on
  2. You send pitchbend and various CC’s to manipulate the sound
  3. At some point you send a note-off with at timer.

My key questions are:

  1. What is the trigger (event) that you want to use to turn the note off?
  2. If using a timer, with variable length to turn the note off, what parameter do you use to control the length when the timer trips and sends the note-off message? Obviously any CC or PB manipulation that you do will do nothing if there is not a note playing.

The second project file I sent you had a fixed note length of 1000ms (1 second after the note-on message) before tripping the note-off message , but I think you said that you want to make that length variable. If that is not working, that is the file I need to see the log message as it worked perfectly for me.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve,

As I explained above, putting a wait time between Noteon and noteoff was just to make the explanation easier. So the real expectation was to do the wait operation without adding it as an delay to the end of a perform action. That’s why I sent the previous file. In the last file you sent, you added delay to the end of another perform, so that is why I didn’t want to send it.

Can I make an offer to clear up all this confusion? What I ultimately want to do is explained in the last graphics that I sent. I will apply various patterns of modulation, bend, expression or any CC# as shown in the graphic. These presets will be triggered with the buttons on the pad.

To do all this, while sending CC messages in a specific loop, I believe I need an independent wait perform so I can provide patterns in graphic. I don’t know any other way. If you suggest that I can make the patterns in the graph using a different logic, I will be happy to hear. All I want is to create presets where I can make specific up and downs on a controller(mod etc) while the time is flowing. If it’s still not clear, just ignore it. I’m sorry for taking up your time.

OK, then I’m not sure why you need perform at all.

Just have separate translators that send

  1. Note-on
  2. Note-Off
  3. CC messages
  4. Pitch bend
    … etc

and have them all directed to the same output.

I suspect you just push different buttons and use the velocity or the polyphonic aftertouch of the button to control the outgoing value of the CC or pitch bend.

If you want to use perform to trigger the other events then you can have them triggered in the rules and send parameters that determine the value to send along to the application. If you are just using buttons, just convert the button to the desired CC or pitch bend.

If you don’t put a delay on the action they will happen in the order you call the perform and maybe sometimes they will look like they are in parallel do to the speed of the Bome MIDI Translator Pro engine. If there are lots of rules in a given perform action, it may take a little longer for that action to process as rules will slightly effect the processing time before output.

In some cases the CC may affect the currently playing note unless it is a parameter not related to notes. I there are no notes playing, of course you probably won’t hear anything.

Sorry if I’m not getting it!

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Can you check this one last time. It has notes in it.
example2.bmtp (5.2 KB)

Ah, I think I see, you want to have a wait time, before triggering the next perform and not send it immediately with a delay.

Since timers do not accept parameters you would need to pass them to the timer as global variable and have the timer itself send the perform action using global values as incoming parameters and then use perform for outgoing parameters.

With that said, if you trigger a timer, while it is already running, it will reset the timer start time so you might need multiple timers (one for each perform) which kind of defeats the purpose of perform in the first place.

Is there a particular reason that you want to delay the trigger instead of the outgoing action. I assume that you don’t want to process any rules until the trigger occurs. I’m still hot sure why.

Why can’t you just process Pitch Bend and CC messages using your buttons on your control surface by press a button (converting note to PB or CC)? It will affect any notes currently playing.

See the below example. Note on off is handled on MIDI C1 and CC/PB processing on MIDI CH 2.

I still have to think about how we would delay the perform incoming trigger. You might need to have Perform in the outgoing action with a delay for each action you want to take instead of using it in rules.

Note-to-CC-PB-Example.bmtp (2.8 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

I may have cracked the code.

Here I create a Perform ‘Master’ that triggers a Perform ‘Fn’ with a given delay.
Since the delay is on the master outgoing action, it delays the ‘Fn’ incoming trigger instead.

The first parameter of ‘Master’ the function number followed by 3 parameters and then the outgoing delay (incoming delay for Peform ‘Fn’).

For ‘Fn’ we only have 4 parameters, the function number followed by the other 3 passed parameters. The first paramter of Fn determine whether it targets that given function.

So ‘Steps’ triggers ‘Master’ which in turn triggers the desired function with the incoming delay. There is no outgoing delay on ‘Fn’.

I hope this solves what you are looking for.

Peform-Incoming-Delay-Example.bmtp (2.3 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Yes, This Helps a lot. Thanks for all.

Sorry it took me a while to figure out what you wanted. I have just never had anyone ask about delaying incoming triggers, only outgoing actions.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz