Dup Ver Goto 📝

AudioMidiChannelSwitcher1

PT2/music/reaper-jsfx does not exist
To
104 lines, 370 words, 2285 chars Page 'AudioMidiChannelSwitcher1' does not exist.

This is a simple script which lets midi notes control which stereo pair the input signal is sent to. It uses only the pitch class, and as written only supports 4 output pairs, but it is trivial to add support for more. At present I just use spl(X) = 0 to clear the output channels rather than a for loop.

desc:Switch stereo audio channels by midi

slider1:gain_db=0<-150,12,1>gain (dB)

in_pin:left input
in_pin:right input
out_pin:left output1
out_pin:right output1
out_pin:left output2
out_pin:right output2
out_pin:left output3
out_pin:right output3
out_pin:left output4
out_pin:right output4

@init
opair = 0;

@block
while(midirecv(offset,msg1,msg2,msg3)) (
  status = msg1;
  channel = msg1 & 0xF;
  cmd = msg1 >> 4;
  ( cmd == 0x9 && channel == 0xF ) ? (
    opair = msg2 & 3;
  );
  midisend(offset,msg1,msg2,msg3);
;)

@sample
x0 = spl0;
x1 = spl1;
spl(0) = 0;
spl(1) = 0;
spl(2) = 0;
spl(3) = 0;
spl(4) = 0;
spl(5) = 0;
spl(6) = 0;
spl(7) = 0;
spl(2*opair) = x0;
spl(2*opair+1) = x1;

Output based on note held

Again this does four channels for now, but trivial to modify. This time, the plugin outputs to all channels corresponding to which notes are held. C == channels 1/2, C# == channels 3/4, etc.

desc:JDA Switch stereo audio channels on/off by midi

slider1:gain_db=0<-150,12,1>gain (dB)

in_pin:left input
in_pin:right input
out_pin:left output1
out_pin:right output1
out_pin:left output2
out_pin:right output2
out_pin:left output3
out_pin:right output3
out_pin:left output4
out_pin:right output4

@init
channel_status_base = 100;

@block
while(midirecv(offset,msg1,msg2,msg3)) (
  status = msg1;
  channel = msg1 & 0xF;
  cmd = msg1 >> 4;
  ( channel == 0xF ) ? (
    pc = msg2 % 12;
    ( cmd == 0x9 && msg3 > 0 ) ? (
      channel_status_base[pc] = 1;
    ) : ( ( cmd == 0x9 && msg3 == 0 ) || ( cmd == 0x8 ) ) ? (
      channel_status_base[pc] = 0;
    );
  );
  midisend(offset,msg1,msg2,msg3);
);

@sample
a0 = channel_status_base[0];
a1 = channel_status_base[1];
a2 = channel_status_base[2];
a3 = channel_status_base[3];
c = channel_status_base[2] > 0;
x0 = spl(0);
x1 = spl(1);
loop( i=0; 4,
  s = channel_status_base[i];
  spl(2*i) = s ? x0 : 0;
  spl(2*i+1) = s ? x1 : 0;
  i += 1;
);  

Later Ideas