Simplified Way to do This???

Hello!

Alright, so I recently put together a project (this is actually a small part of a larger project) - and it works! However, Im sure there is a way to make it work better, more efficiently, and be less taxing on the computer. Here is what the project does (file attached):

I am using an Akai LPD-8 as a MIDI controller going into Ableton Live. This controller has 8 buttons, each with LED indicators on them. What I wanted was to be able to send MIDI notes to Ableton, to play chords. Ableton will handle the chord creation internally, so all I need to do is send a single note over. I have assigned the notes on the controller to C,D,E,F,G,A,B in the 0 octave.

I also want the LED lights to turn on and off when a note is latched (the LPD-8 buttons are set to momentary from the controller)

In addition to that, because I am doing other things while I would be playing these chords (I primarily play drums), I want one pad to kill all other pads (and LED lights), and send its note. Basically, a choke group. Only one key can be played at a time, and only one LED will be lit at a time.

Like I said above, I got it to work! But I want to see if there is a better way to do this.

 

Also - Bonus question: How much latency does Bome's introduce to the chain? from not input to note out from Bome's, is there any calculable latency?

 

Thanks so much for all your help! - Josh

 


Attachments:
1571529787952_Chord-Mute-Groups.bmtp

You are sending notes to Ableton Via MIDI channel 9 then and back to the LPD8 on MIDI CH 1?

Try this.

It is a totally different approach.

First translator handles all note-on and sends over to Ableton Live on MIDI channel 9

Rules handle exclusion of notes not in range and black keys.

We use ga as a bit map for the current note on. It stays on until another note is played

We use gb as a timer counter to iterate through all the notes and turn on and off the notes we want off and off back to the LPD8. The Update LED timer is also triggered by a Note-On within range.

SO I use 4 translators and two global variables.

Latency should be negligible with either your method or mine. I introduce a 10msec repeat delay for notes set back to LPD-8 in case it can’t handle updates too fast.

 

Also I set up aliases for Ableton Live and LPD-8. Always good to use aliases as it make it more sense what the project is doing and if you reassign ports, all you have to do is point the aliases elswhere.

Default output port at preset level is Ableton Live

Update LED translator overrides the preset default and is set to go back to LPD-8.

 

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

Steve Caldwell
Bome Q and A Moderator and
Independent Bome Consultant/Specialist
bome@sniz.biz

 


Attachments:
1571538261396_Chord-Mute-Groups-a.bmtp

Yeah, Ableton is reading keys MIDI on channel 9, but the controller is operating on channel 1 and will only produce LED feedback if messages are sent back on that channel. As far as controllers go, its not flagship by any means, but for this project the small LPD 8 fits my requirements.

Ok, first of all. Brilliant way to handle the note inputs. I never even thought about that! Inclusion of multiple, by exclusion of most!

Second, can you explain bitmapping… cause thats a bit beyond my abilities. Also, the document didn’t exactly work as planned. I only got LED feedback on one pad, (pad 4) and then only when I played pad 5?

Also, i think I forgot to mention, that I also want to be able to kill a note/LED signal by repressing the note. So if pad 1 is on, if I press pad 2, pad 2 sounds and pad 1 dies. then if I press 2 again, pad 2 dies. Not sure if that changes things

OK, since I don’t have an LPD-8 I really didn’t fully test it.
Bitmapping is a way to use a single global variable (which contains 32 bits) to control the state of up to 32 notes.
You can review documents on the web about binary numbers for more information here.
In the example I sent you, I use bit 0 for note 12 bit 1 for note 13 (ignored) bit 2 for note 14, etc. And just shif the bit into the proper position for evaluation when sending notes back to the LPD-8.
So with one global, you update the bit only for the note that is set and then you iterate through all of the bits of the variable with a timer setting a value to 127 and note-on for the one note that is set and send note off with velocity 0 for any bits that are 0.
I didn’t take into account pressing the same note and making it die. You could toggle the bit to do this.
What I recommend you do if you don’t understand bitmapping is just to continue to use different global variables for each note and iterate instead through the variables with the timer.
The main reason I use bitmapping is to conserve global variable space on large project and to me it is easier to iterate through the bits on a single global variable with rules than to use different global variables.
I would recommend also you review the bit shift operators in the MIDI Translator Pro manual.

Sorry comments don’t like certain characters so some of the text got munged.

And this version should turn on the correct LED’s

I had to add 12 to the note number to turn on the right LED for your controller. I tested this with my APC MINI


Attachments:
1571545978936_Chord-Mute-Groups-b.bmtp