Jump to content

Scripter for midi channel split & transpose


itayburg

Recommended Posts

Hi all'

I'm trying to write a script for scripter should be very simple. I want to be able to split midi channels and to decide which channels are entering the software instrument's input. I also want to be able to transpose a particular channel or specific key range.

I use a fishman triple play midi pickup for my guitar and would like to control the tuning or to transpose an oct down the 3 upper strings ext..

I can do it in the environment easily but would like to use it in MainStage as well.

thanks a lot

Itay

Link to comment
Share on other sites

this script might do it but it doesn't fit logic scripture:

// KeyBoard_Deploy_v1.0, Xackley 5-10-2008

//Updated with better Midi Channel In descriptions 5-18-2008

 

desc:MIDI Keyboard Splitter, with Xackley Zero Tricks

 

slider1:0<0,15,1{0 All,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Channel In

slider2:1<0,15,1{Block Input Channel - Just Notes to New Channels,Pass Input Channel - Just Notes to New Channels,Pass Input - Send Notes & CC to New Channels,Block Input - Send Notes & CC to New Channels}>Original

 

slider3:2<0,15,1{0 Set Range,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Ouput MIDI Channel A

slider4:1 <1,127,1>Minimum Note A

slider5:127<1,127,1>Maximum Note A

slider6:0<-36,36,1>Transpose A

 

slider8:0<0,15,1{0 Set Range,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Ouput MIDI Channel B

slider9:1<1,127,1>Minimum Note B

slider10:127<1,127,1>Maximum Note B

slider11:0<-36,36,1>Transpose B

 

slider13:0<0,15,1{0 Set Range,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Ouput MIDI Channel C

slider14:1<1,127,1>Minimum Note C

slider15:127<1,127,1>Maximum Note C

slider16:0<-36,36,1>Transpose C

 

//slider2:0<-1000,+1000,.00000001>test

 

////////////////////////////////////////////////////////////////////

 

 

@slider

 

chanA= slider3 -1;

chanB= slider8 -1;

chanC= slider13 -1;

 

slidermove = 1 ;

 

PassC = slider2==2 || slider2==3;

PassN = slider2==1 || slider2==2;

 

 

/////////////////////////////////////////////////////////////////////

 

@init

 

ext_noinit = 1 ;

 

 

slider4 =1;

slider5 =127;

 

slider9 =127;

slider10=1;

 

slider14=127;

slider15=1;

 

 

 

chanA= slider3 -1;

chanB= slider8 -1;

chanC= slider13 -1;

 

 

 

////////////////////////////////////////////////////////////////////

 

@sample

 

 

while ( midirecv(ts,msg1,msg23) ? (

 

m = msg1 & 240;

channel = msg1 & 15;

vel = (msg23/256)|0;

note = msg23 & 127;

 

passN ? midisend(ts,msg1,msg23);

 

slidermove ? (

slidermove = 0;

// all sounds off

midisend(ts,176 + 0,120);

midisend(ts,176 + 1,120);

midisend(ts,176 + 2,120);

midisend(ts,176 + 3,120);

midisend(ts,176 + 4,120);

midisend(ts,176 + 5,120);

midisend(ts,176 + 6,120);

midisend(ts,176 + 7,120);

midisend(ts,176 + 8,120);

midisend(ts,176 + 9,120);

midisend(ts,176 + 10,120);

midisend(ts,176 + 11,120);

midisend(ts,176 + 12,120);

midisend(ts,176 + 13,120);

midisend(ts,176 + 14,120);

midisend(ts,176 + 15,120);

);

 

 

 

OKchannel = channel==(slider1-1) || slider1==0;

 

 

slider3 && OKChannel ? ( //1

m == 144 || m == 128 ? ( //2

note >= slider4 && note <= slider5 ? ( //3

noteA = note + slider6;

noteA|=0;

noteA > 1 && noteA < 128 ? ( //4

midisend(ts,m + chanA,noteA|(vel*256));

); //4

); //3

):( //or on 2

passC ? midisend(ts,m + chanA,msg23);

x=1;

); //2

); //1

 

 

slider8 && OKChannel ? (

m == 144 || m == 128 ? (

note >= slider9 && note <= slider10 ? (

noteB = note + slider11;

noteB|=0;

noteB > 1 && noteB < 128 ? (

midisend(ts,m + chanB,noteB|(vel*256));

);

);

):(

passC ? midisend(ts,m + chanB,msg23);

x=1;

);

);

 

 

slider13 && OKChannel ? (

m == 144 || m == 128 ? (

note >= slider14 && note <= slider15 ? (

noteC = note + slider16;

noteC|=0;

noteC > 1 && noteC < 128 ? (

midisend(ts,m + chanC,noteC|(vel*256));

);

);

):(

passC ? midisend(ts,m + chanC,msg23);

x=1;

);

);

 

 

///////////////////////////////////////////////////////

 

slider3 == 0 && m == 144 ? (

slider4 = min(slider4,note);

slider5 = max(slider5,note);

);

slider8 == 0 && m == 144 ? (

slider9 = min(slider9,note);

slider10 = max(slider10,note);

);

slider13 == 0 && m == 144 ? (

slider14 = min(slider14,note);

slider15 = max(slider15,note);

);

 

);

 

 

 

);

Link to comment
Share on other sites

itayburg,

 

I have done a little Scripter programming.

 

I am not at all clear on what you are asking for.

 

As I understand it, the input to a script is a stream of MIDI events plus (maybe) settings on the interface. The output is a single stream of MIDI events going to one destination (another MIDI effect or a software instrument).

 

You say you want to split MIDI channels. Do you mean assign MIDI channels based on note number? Or what?

 

drb

Link to comment
Share on other sites

Hi man

Thanks for you reply

Basically I need 2 functions:

1. Control which midi channels are entering the software instrument (like channel splitter in logic's environment.

2. Split the keyboard in a specific note and Transpose one half.

Do you have any IDE how can I do it in one or two scripter scripts?

Thanks again

Itay

Link to comment
Share on other sites

thank you so much drp. i really appreciate your efforts.

i'm working on a live set using MainStage for sound (synth, guitars, vox ext) and Ableton Live to control loops playback and automations.

my only instrument is a guitar with midi pickup (fishman triple play). i play guitars, synth and bass simultaneously. i can split the pickup output to different channels at different split points (strings and or frets).

i use the TransposeSomeNotes.pst you wrote to transpose the high notes down for playing the bass line (with arpiggiator) and it seems to work perfectly.

the FilterChannel.pst you wrote is used for splitting the guitar to different zones. the problem is it's only one channel output and i'm trying to filter a group of channels - for example channels 11-16 will be the specific instrument input.

i will appreciate if you can change this script.

anyway, the setup is working really good and thanthank you so much drp. i really appreciate your efforts.

i'm working on a live set using MainStage for sound (synth, guitars, vox ext) and Ableton Live to control loops playback and automations.

my only instrument is a guitar with midi pickup (fishman triple play). i play guitars, synth and bass simultaneously. i can split the pickup output to different channels at different split points (strings and or frets).

i use the TransposeSomeNotes.pst you wrote to transpose the high notes down for playing the bass line (with arpiggiator) and it seems to work perfectly.

the FilterChannel.pst you wrote is used for splitting the guitar to different zones. the problem is it's only one channel output and i'm trying to filter a group of channels - for example channels 11-16 will be the specific instrument input.

i will appreciate if you can change this script.ks again drp for your help

Link to comment
Share on other sites

Hi,

 

This is a nice one.

But I'm wondering if it's possible to merge midi channels. Or it may be called multiply channel outputs instead...

 

Exemple: I have a multi-instrument with 4 instruments on channel 1 to 4.

I want to be able to route the instrument input channel 1 to instruments 1,2,3 and 4 simultaneously.

 

Sure I could simply put all the instruments on channel 1 or use the environment but I wish I could do this with scripter for some reason.

 

If someone know it's possible I will try to do it but I'm not sure if scripter can do that.

 

Thanks

Link to comment
Share on other sites

  • 4 weeks later...

itayburg,

 

Apple claims to have fixed the major bug in the Logic sequencer with multiple Scripter scripts. I am still downloading additional content at this point, so I have not been able to check it yet. I see that Mainstage has also been updated. You may wish to try the scripts again if you update.

 

drb

Link to comment
Share on other sites

  • 11 months later...
I have added drb's FX script for splitting midi channels to an instrument track in Pro Logic X but am unable to get it to function. Very frustrating as I am fairly desperate to split my incoming midi data in real time. My set up is a Korg i5M which outputs an arrangement on 8 channels, one channel for each instrument. I want to record each channel on its own track and at this stage just want the midi data recorded. I'm new to Logic and so my setup may not be correct. I open Logic, select one software instrument track, don't assign it to any patch, insert the drb MIDI FX and select Filter Channel. I block all channels but they appear on that one track. What is wrong here? Any advice including RTFM (but which one?, I've read lots), greatly appreciated.
Link to comment
Share on other sites

  • 2 weeks later...
itayburg,

 

Apple claims to have fixed the major bug in the Logic sequencer with multiple Scripter scripts. I am still downloading additional content at this point, so I have not been able to check it yet. I see that Mainstage has also been updated. You may wish to try the scripts again if you update.

 

drb

 

Hi, do you know if a similar bug fiix is coming for Mainstage? All I need scripter to do is Program Changes which

clearly does not work with mainstage & scripter at all. Latest Mainstage is 3.0.4

 

 

rachel

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...