serial/ parallel processing?

Samoz

2016-10-16 18:40:50

Hi,

I'm trying to programm my "personal" footcontroller to trigger clips in Ableton Live.
The basics are working but sometimes the combination of adrenalin and the used switches produce double triggers.
I found a solution in the forum which works great, but...
I expected the translators to work strictly serial, but reading the output they seam to work some kind of parallel.

That means, I expected:
1. The incomming midi gets filtered by the first three translators
2. The "cleaned" midi signal gets transposed by translator 0.4
The result should have been max. one transposed midi note on event within 2 seconds.

but What I get at the midi out is:
1. a propperly gated, untransposed input signal and
2. a fantastic transposed, but totally ungated note on event with every single input trigger

I found a workaround by implementing the gate in every single "Transpose" translator ( means: the "Passthrough" translator has a transposed output), but since I have a lot of presets with different transpose actions...
Is there a way to filter the input once in the first "allways on" preset and than continue with the "clean" signal?

Probably it's one of this "stupid" mistakes, but I hope someone can help me to understand what's going on.

Thanks!

-------------------------------------------------

[x] Preset 0: Kill Double Trigger + Transpose

[x] Translator 0.0: Init
Incoming: on activation of this preset
Rules: go=0
Outgoing: (none)

[x] Translator 0.1: Passthrough
Options: swallow
Incoming: MIDI pp qq rr
Rules: if go==1 then exit rules, skip Outgoing Action
Outgoing: MIDI pp qq rr

[x] Translator 0.2: Lockout Timer -->Set "go"
Options: swallow
Incoming: MIDI pp qq rr
Rules: if go==1 then exit rules, execute Outgoing Action
go=1
Outgoing: One-shot timer "LockOutTime": 2000 ms delay
// Gatetime is very high for testing

[x] Translator 0.3: Timer --> Reset "go"
Incoming: On timer "LockOutTime"
Rules: go=0
Outgoing: (none)

[x] Translator 0.4: Transposer Note On
Options: swallow
Incoming: Note On on ch. 1 set 'gn' to note with any velocity
Rules:
Outgoing: Note On on ch. 1 with note:60 (0x3C) and velocity:127 (0x7F)

-------------------------------------------------

btw. a feature request:
I'm missing a debug mode where I can trigger every single working step manually.
That would help to find out where things go the unexpected way

Sakis

2016-10-18 14:00:33

Hi,
On translator 0.2 you should change
Rules: if go==1 then exit rules, execute Outgoing Action ,to
Rules: if go==1 then exit rules, skip Outgoing Action

Because the way you set it, it triggers the timer on every input event :)

Samoz

2016-10-23 13:31:58

Hi Sakis,

first of all thanks for your friendly reply.
I had one of this bussy weeks and so I couldn't recheck the preset earlier.

That mistake was obviously ...stupid, cause the gate closed varible "go" was never set to 1, but..

The corrected preset still doesn't work the way I expect it to.
I attache the version 0.2 of the preset with gatetime 1000 ms.

I'm sending a sequence of quick midi note on/off 90 24 xx from my Keyboard.
If I deactivate translator 0.4 I get a proper gated 90 24 xx at the midi out.
If I activate 0.4 again and deactivate translator 0.1 to 0.3 I get a 90 24 7F as programmed.
So far so good.

If all Translators are active they seem to work parallel and I get the gated midi in at midi out and a transposed signal for every midi in trigger.

Her is a logfile, only with the timestamped midi out signals.

1843 - Loaded Project file: C:\Users\TL\Desktop\WTF2.bmtp
1844 - Activated preset: Kill Double Trigger + Transpose
Opened MIDI OUT: Bome MIDI Translator 1 Virtual Out
Opened MIDI IN: MIDIMATE II 2

3435 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 24 6F
3436 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
3715 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
3970 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
4245 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F

//after 1000 ms the gate is switched off

4535 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 24 78
4536 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
4820 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
5106 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
5394 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F

//after 1000 ms the gate is switched off

5694 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 24 7A
5695 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
5967 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
6249 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F
6521 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F

//after 1000 ms the gate is switched off

6803 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 24 78
5804 - MIDI OUT [Bome MIDI Translator 1 Virtual Out]: 90 3C 7F

I think I checked all the relevant "swallow midi" options.
I attache the bmtp file and hope that someone can give me an hint how to transpose the gated signal.
gate+transpose.bmtp
(1.59 KiB) Downloaded 132 times

Sakis

2016-10-23 14:17:21

"If all Translators are active they seem to work parallel and I get the gated midi in at midi out and a transposed signal for every midi in trigger."

This is normal , since the last translator is triggered always by incoming note on message.
Do you want to transmit the transposed signal only once? And when exactly?
:)

Samoz

2016-10-23 15:37:32

ok, ....

1) I try to "gate" the input signal to sort out accidental doubble triggers in the translators 0.1 to 0.3

2) The output of translator 0.1 ( means "the clean signal") goes to the input of the "Transposer" translator 0.4 and gets processed.

What I want to achieve at the end is that I filter the input signal once at the beginning of the chain in an "allways on" preset.
Then I have several presets for my songs with different transpose settings etc. which I select alternating.

My understanding from reading the manual was, that every preset and every translator works in series.
So I expected that translator 0.4 (or finally the next preset) works with the output of translator 0.2 and not with the trigger note from my keyboard/ footswitch.

How can I achieve such a behaviour?

Thanx a lot for your support!

Sakis

2016-10-23 23:16:07

On the last translator you could add a counter
Rule
ga=ga+1

And if triggered once you can disable further outgoing actions:

If ga>1 then exit rules ,skip outgoing

On translator 3 you could add a rule
ga=0

to reset the counter and allow again, one trigger ,after the timer expires.

Hope it helps!

Samoz

2016-10-25 06:47:30

I discussed the project (and my false assumptions!) with Sakis in several mails.
I realised that my main problem was to clearly separate the incomming and the outgoing midi events.
Sakis came up with the idea of "abusing" a timer as a link between the input translators and the output processing.

That rearly did the trick for me.

The gate/ lock funktions remain the same, but they trigger a timer with 0 ms.
The according note number (switch number) is stored in a gloabel variable.

Since I'm using a footcontroller while standing I've got only one event at a time.
So I only need one timer for the Switch down state (note on) and one for the switch released state (note off).

That way I have a layer of events that only exist in Midi Translator and never apear at the midi out.

Using those two timers and the assigned global variable as an incomming event in the song specific presets delivers a transparent and easy to maintain set of translators without any double triggers.
Kill Double Trigger.bmtp
(2.96 KiB) Downloaded 152 times


Thanks to Sakis for his patiently support!

florian

2016-11-01 11:31:55

Hi Samoz,
great, thanks for sharing the project file!
As a matter of fact, the 0ms one-shot timers are even optimized internally in MT Pro because they're so useful for organizing a project.
Best,
Florian