Go Back   Cockos Incorporated Forums > REAPER Forums > REAPER for Live Use

Reply
 
Thread Tools Display Modes
Old 02-08-2018, 06:32 AM   #41
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

Another version uploaded (0.3.0). Hopefully it should all work OK now.
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 02-08-2018, 08:29 AM   #42
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
The MIDI path to Learn and parameter/Midi link is definitely NOT the MIDI coming in or being modified by that track.
AFAIK:
- Midi Leran is from Reaper Control Path (inviable for a midi logger)
- Parameter modulation by Midi is (by default) from the FX chain at the position the plugin is located (e.g form the ReaControlMidi positioned direly above).

(As said: if the Control Path is activated in the midi device some major confusion can arise.)

-Michael
mschnell is offline   Reply With Quote
Old 02-08-2018, 09:36 AM   #43
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
More ideal version...
Here you are... Please test.
-Michael

Code:
desc:Pipe Midi Filter
author: Michael Schnell (mschnell@bschnell.de)
version: 1.0
changelog: initial release
donation: United Nations Foundation http://www.unfoundation.org/
about:
  ## Description
   Pipe
  

  ## Limitations
   P?ipe
  





// Author: Michael Schnell, based on a work of Time Waster (M. Smith)
// License: LGPL - http://www.gnu.org/licenses/lgpl.html
//



slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Channel
slider2:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>CC Input
slider3:2<1,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>CC Output
slider4:10<0,127,1>Threshold
slider5:5<0,64,1>Hysteresis
slider6:0<0,500,10>dwell time (msek)
slider7:0<0,1,1{straight,invert}>Output

@init
  out  = 0;
  outo = 0;
  in   = 0;
  delay = 0;
  
@slider
  inChannel   = slider1;
  inCC        = slider2; 
  outCC       = slider3;
  thh         = slider4;
  thl         = thh - slider5;
  dt          = slider6;         
  invert      = slider7;
  thl < 1 ? thl = 1;
  invert ? (
    outh        = 0;
    outl        = 127;
   ) : ( 
    outh        = 127;
    outl        = 0;
  )  
  
@block
  while (midirecv(offset, msg1, msg2, msg3)) (
    status = msg1 & $xF0;      // Extract message type
    channel = msg1 & $x0F;
    channel == inChannel ? (   // Is it on our channel?
      status == $xB0 ? (       // Is it a controller event?
        msg2 == inCC ? (       // Is it the right CC?
          in = msg3;
          in > thh ? (
            out = outh;
           ) :  msg3 < thl ? (
            out = outl; 
          );  
          out != outo ? (
            outo = out;            
            f = srate / samplesblock;   // calls per second
            f = f * dt / 1000;          // minimum calls        
            f = 0 | f;
            delay = f+1;
          );
        );
      );
    );
    midisend(offset, msg1, msg2, msg3); // pass through
  );    
  delay ? (
    delay -= 1;
    !delay ? (
      outv !=  outo ? (
        outv = outo;
        midisend(offset, msg1, outCC, outo); // pass through            
      );  
    );   
  );
  
  
@gfx 640 400

gfx_r=gfx_g=gfx_b=0; gfx_a=1;
gfx_x=gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

q1 = gfx_w / 128;

outv>64 ? (
  gfx_r = 1; gfx_g = 1; gfx_b = 0;
  gfx_x = 0;
  gfx_y = 0;
  gfx_rectto(gfx_w, gfx_h/2);
);  

gfx_r=gfx_g=gfx_b=1;

gfx_r = 0; gfx_g = 0; gfx_b = 1;
gfx_x = thh*q1;
gfx_y = 0;
gfx_lineto(gfx_x, gfx_h);

gfx_x = thl*q1;
gfx_y = 0;
gfx_lineto(gfx_x, gfx_h);

gfx_r = 1; gfx_g = 0; gfx_b = 0;
gfx_y = 0;
gfx_x = 1+in*q1;
gfx_lineto(gfx_x, gfx_h);
mschnell is offline   Reply With Quote
Old 02-08-2018, 01:25 PM   #44
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Oh man, can’t wait to get to work and try this stuff!

I finally got a full pedal setup and was playing with it last night and was super happy with most everything. Even all the tracks didn’t take up more than 4% cpu. Making it so it didn’t mute unselected tracks only added like 0.5%

My big problem now is just the dropout time from switching and the often harsh bang or pop that can result from switching, which is honestly a common issue with guitar stuff. I’m going to try to figure out some crossfading tricks....too bad there’s no action for “fade in sends”
pipelineaudio is offline   Reply With Quote
Old 02-08-2018, 01:33 PM   #45
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

If nothing else helps, it's easy to do a JSFX that cross-fades two inputs.

Let me know what exactly you need, if you want it.

-Michael
mschnell is offline   Reply With Quote
Old 02-08-2018, 03:37 PM   #46
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
If nothing else helps, it's easy to do a JSFX that cross-fades two inputs.

Let me know what exactly you need, if you want it.

-Michael
Then it would likely control a mixer plugin? Trying to work out how to do this exactly. Let me look at if receives are available in the API. I remember when xenakious was still involved there were some command parameters which included some fade times assignable to things
pipelineaudio is offline   Reply With Quote
Old 02-08-2018, 06:02 PM   #47
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
Here you are... Please test.
-Michael

Code:
desc:Pipe Midi Filter
author: Michael Schnell (mschnell@bschnell.de)
I seems to only be getting a note off message with this, though its coming on CC28, I'm not seeing any other cc values...I may have the wrong path going as well
pipelineaudio is offline   Reply With Quote
Old 02-08-2018, 06:55 PM   #48
Time Waster
Human being with feelings
 
Time Waster's Avatar
 
Join Date: Aug 2013
Location: Bowral, Australia
Posts: 1,638
Default

I've uploaded yet another update to the ReaRack Nonlinearizer FX. It now outputs correctly for both low and high res CCs
__________________
Mal, aka The Wasters of Time
Mal's JSFX: ReaRack2 Modular Synth
Time Waster is offline   Reply With Quote
Old 02-08-2018, 08:31 PM   #49
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Grabbing it now! This is so awesome to see development in real time
pipelineaudio is offline   Reply With Quote
Old 02-08-2018, 10:41 PM   #50
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
Then it would likely control a mixer plugi
Nope.
It would be a self contained thingy that gets a signal (Midi message or pushing a preset on it via LiveConfigs) and according to that selects one audio input (e.g. "pins" 1+2) or the other (e.g. pin 3+4) to be propagated to it's audio output output. When switching over, it would use a crossfade that takes a definable amount of time.

-Michael
mschnell is offline   Reply With Quote
Old 02-08-2018, 10:48 PM   #51
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
I seems to only be getting a note off message with this, though its coming on CC28, I'm not seeing any other cc values...I may have the wrong path going as well
The plugin is not supposed to bother about Note On messages at all.

- It propagates all midi input (not on the Control path !!!)
- it checks the input for CC messages that match the midi channel and CC # set in the "input sliders"
- if the CC value of such messages request a reaction (according to your specs and the setting of the other sliders) it outputs Midi CC messages (not to the Control path !!!) on the same Midi channel and the CC # set with the output" slider.
- It shows the input CC value together with the threshold and hysteresis settings, and the output state in a graphic.

I'll do a testing project for you ...

Later...
You are right. Not enough testing ! There was a bug.
here an update:
Code:
desc:Pipe Midi Filter
author: Michael Schnell (mschnell@bschnell.de)
version: 1.0
changelog: initial release
donation: United Nations Foundation http://www.unfoundation.org/
about:
  ## Description
   Pipe
  

  ## Limitations
   Pipe
  





// Author: Michael Schnell, based on a work of Time Waster (M. Smith)
// License: LGPL - http://www.gnu.org/licenses/lgpl.html
//



slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Channel
slider2:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>CC Input
slider3:2<1,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>CC Output
slider4:10<0,127,1>Threshold
slider5:5<0,64,1>Hysteresis
slider6:0<0,500,10>dwell time (msek)
slider7:0<0,1,1{straight,invert}>Output

@init
  out  = 0;
  outo = 0;
  in   = 0;
  delay = 0;
  
@slider
  inChannel   = slider1;
  inCC        = slider2; 
  outCC       = slider3;
  thh         = slider4;
  thl         = thh - slider5;
  dt          = slider6;         
  invert      = slider7;
  thl < 1 ? thl = 1;
  invert ? (
    outh      = 0;
    outl      = 127;
   ) : ( 
    outh      = 127;
    outl      = 0;
  );  
  msg1o       = $xB0 + inChannel;
  
@block
  while (midirecv(offset, msg1, msg2, msg3)) (
    status = msg1 & $xF0;      // Extract message type
    channel = msg1 & $x0F;
    channel == inChannel ? (   // Is it on our channel?
      status == $xB0 ? (       // Is it a controller event?
        msg2 == inCC ? (       // Is it the right CC?
          in = msg3;
          in > thh ? (
            out = outh;
           ) :  msg3 < thl ? (
            out = outl; 
          );  
          out != outo ? (
            outo = out;            
            f = srate / samplesblock;   // calls per second
            f = f * dt / 1000;          // minimum calls        
            f = 0 | f;
            delay = f+1;
          );
        );
      );
    );
    midisend(offset, msg1, msg2, msg3); // pass through
  );    
  delay ? (
    delay -= 1;
    !delay ? (
      outv !=  outo ? (
        outv = outo;
        midisend(offset, msg1o, outCC, outo); // pass through            
      );  
    );   
  );
  
  
@gfx 640 400

gfx_r=gfx_g=gfx_b=0; gfx_a=1;
gfx_x=gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

q1 = gfx_w / 128;

outv>64 ? (
  gfx_r = 1; gfx_g = 1; gfx_b = 0;
  gfx_x = 0;
  gfx_y = 0;
  gfx_rectto(gfx_w, gfx_h/2);
);  

gfx_r=gfx_g=gfx_b=1;

gfx_r = 0; gfx_g = 0; gfx_b = 1;
gfx_x = thh*q1;
gfx_y = 0;
gfx_lineto(gfx_x, gfx_h);

gfx_x = thl*q1;
gfx_y = 0;
gfx_lineto(gfx_x, gfx_h);

gfx_r = 1; gfx_g = 0; gfx_b = 0;
gfx_y = 0;
gfx_x = 1+in*q1;
gfx_lineto(gfx_x, gfx_h);
And a test project:
Code:
<REAPER_PROJECT 0.1 "5.70/x64" 1518156521
  RIPPLE 0
  GROUPOVERRIDE 0 0 0
  AUTOXFADE 1
  ENVATTACH 1
  POOLEDENVATTACH 0
  MIXERUIFLAGS 11 48
  PEAKGAIN 1
  FEEDBACK 0
  PANLAW 1
  PROJOFFS 0 0
  MAXPROJLEN 0 600
  GRID 3199 8 1 8 1 0 0 0
  TIMEMODE 1 5 -1 30 0
  VIDEO_CONFIG 0 0 256
  PANMODE 3
  CURSOR 0
  ZOOM 100 0 0
  VZOOMEX 6
  USE_REC_CFG 0
  RECMODE 1
  SMPTESYNC 0 30 100 40 1000 300 0 0 1 0 0
  LOOP 0
  LOOPGRAN 0 4
  RECORD_PATH "" ""
  <RECORD_CFG
  >
  <APPLYFX_CFG
  >
  RENDER_FILE ""
  RENDER_PATTERN ""
  RENDER_FMT 0 2 0
  RENDER_1X 0
  RENDER_RANGE 1 0 0 18 1000
  RENDER_RESAMPLE 3 0 1
  RENDER_ADDTOPROJ 0
  RENDER_STEMS 0
  RENDER_DITHER 0
  TIMELOCKMODE 1
  TEMPOENVLOCKMODE 1
  ITEMMIX 0
  DEFPITCHMODE 589824
  TAKELANE 1
  SAMPLERATE 44100 0 0
  <RENDER_CFG
  >
  LOCK 1
  <METRONOME 6 2
    VOL 0.25 0.125
    FREQ 800 1600 1
    BEATLEN 4
    SAMPLES "" ""
    PATTERN 2863311530 2863311529
  >
  GLOBAL_AUTO -1
  TEMPO 120 4 4
  PLAYRATE 1 0 0.25 4
  SELECTION 0 0
  SELECTION2 0 0
  MASTERAUTOMODE 0
  MASTERTRACKHEIGHT 0
  MASTERPEAKCOL 16576
  MASTERMUTESOLO 0
  MASTERTRACKVIEW 0 0.6667 0.5 0.5 0 0 0
  MASTERHWOUT 0 0 1 0 0 0 0 -1
  MASTER_NCH 2 2
  MASTER_VOLUME 1 0 -1 -1 1
  MASTER_FX 1
  MASTER_SEL 0
  <MASTERPLAYSPEEDENV
    ACT 0 -1
    VIS 0 1 1
    LANEHEIGHT 0 0
    ARM 0
    DEFSHAPE 0 -1 -1
  >
  <TEMPOENVEX
    ACT 1 -1
    VIS 1 0 1
    LANEHEIGHT 0 0
    ARM 0
    DEFSHAPE 1 -1 -1
  >
  <PROJBAY
  >
  <TRACK {1E672BA9-AE0E-48B5-93F8-D12EC3F1C621}
    NAME ""
    PEAKCOL 16576
    BEAT -1
    AUTOMODE 0
    VOLPAN 1 0 -1 -1 1
    MUTESOLO 0 0 0
    IPHASE 0
    ISBUS 0 0
    BUSCOMP 0 0
    SHOWINMIX 1 0.6667 0.5 1 0.5 0 0 0
    FREEMODE 0
    SEL 1
    REC 0 0 0 0 0 0 0
    VU 2
    TRACKHEIGHT 0 0
    INQ 0 0 0 0.5 100 0 0 100
    NCHAN 2
    FX 1
    TRACKID {1E672BA9-AE0E-48B5-93F8-D12EC3F1C621}
    PERF 0
    MIDIOUT -1
    MAINSEND 1 0
    <FXCHAIN
      WNDRECT 24 52 906 663
      SHOW 4
      LASTSEL 3
      DOCKED 0
      BYPASS 0 0 0
      <JS ix/MIDI_CCRider ""
        0.000000 1.000000 64.000000 64.000000 0.000000 0.000000 0.050000 0.000000 6.000000 1.000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      FLOATPOS 0 0 0 0
      FXID {AF94A8BA-F063-4404-B4D8-B33959A5ACB3}
      WAK 0
      BYPASS 0 0 0
      <VST "VST: ReaControlMIDI (Cockos)" reacontrolmidi.dll 0 "" 1919118692
        ZG1jcu5e7f4AAAAAAAAAAOkAAAABAAAAAAAQAA==
        /////wAAAAAAAAAAAAAAAAkAAAAMAAAAAQAAAP8/AAAAIAAAACAAAAAAAAA4AAAAQzpcVXNlcnNcbXNjaG5lbGxcQXBwRGF0YVxSb2FtaW5nXFJFQVBFUlxEYXRhXEdN
        LnJlYWJhbmsAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABNYWpvcgANAAAAMTAyMDM0MDUw
        NjA3AAEAAAAAAAAAAAAAAAAKAAAADQAAAAEAAAAAAAAAAAAAAAAAAAA=
        AAAQAAAA
      >
      FLOATPOS 0 0 0 0
      FXID {6E414F4B-8730-45E4-8162-53A33A8D07C7}
      WAK 0
      BYPASS 0 0 0
      <JS test/pipe ""
        0.000000 1.000000 2.000000 10.000000 5.000000 0.000000 0.000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      FLOAT 1066 116 656 649
      FXID {BCAFC157-67D1-4109-8982-89E583D7A3EA}
      WAK 0
      BYPASS 0 0 0
      <VST "VST: ReaControlMIDI (Cockos)" reacontrolmidi.dll 0 "" 1919118692
        ZG1jcu5e7f4AAAAAAAAAAOkAAAABAAAAAAAQAA==
        /////wAAAAAAAAAAAAAAAAMAAAAEAAAAAAAAACUAAAB/AAAAQAAAAAAAAAA4AAAAQzpcVXNlcnNcbXNjaG5lbGxcQXBwRGF0YVxSb2FtaW5nXFJFQVBFUlxEYXRhXEdN
        LnJlYWJhbmsAAAAAAQAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABNYWpvcgANAAAAMTAyMDM0MDUw
        NjA3AAEAAAAAAAAAAAEAAAAEAAAABQAAAAIAAAAAAAAAAAAAAAAAAAA=
        AAAQAAAA
      >
      FLOATPOS 0 0 0 0
      FXID {0720C246-7019-4077-A374-6977599F30E7}
      WAK 0
    >
  >
  <EXTENSIONS
  >
>
Watch the sliders in the bottom half of the second ReaControlMidi innstance to see the working of the "Pipe Filter".

-Michael

Last edited by mschnell; 02-08-2018 at 11:21 PM.
mschnell is offline   Reply With Quote
Old 02-09-2018, 12:41 AM   #52
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Cool!
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 01:39 AM   #53
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

for StuffMIDIMessage(0, msg_type*16 + channel, 10, 0);

If I want to make it program change instead, lets say channel 3 pc1, what do I do for the final data point? PC's are only two bytes right?
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 05:34 AM   #54
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
If nothing else helps, it's easy to do a JSFX that cross-fades two inputs.

Let me know what exactly you need, if you want it.

-Michael
So it looks like I have some plugs that make trouble unless I mute the unused tracks. Some clicks and pops happen if I have three of them open at the same time. I tried tricking it to load the same plug across a few track and doing a sort of loop switch, and switching presets on it, but that crashed reaper. I'm afraid I will have to mute unused tracks, so I'm not sure how this would affect a crossfade

But really, I would love a crossfade betweem patches, but since you never know which two patches its going to be between, I'm not sure how it would work.

Can you think of anything?
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 05:40 AM   #55
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
The plugin is not supposed to bother about Note On messages at all.

- It propagates all midi input (not on the Control path !!!)
- it checks the input for CC messages that match the midi channel and CC # set in the "input sliders"
- if the CC value of such messages request a reaction (according to your specs and the setting of the other sliders) it outputs Midi CC messages (not to the Control path !!!) on the same Midi channel and the CC # set with the output" slider.
- It shows the input CC value together with the threshold and hysteresis settings, and the output state in a graphic.

I'll do a testing project for you ...

Later...
You are right. Not enough testing ! There was a bug.
here an update:
[code]
desc:Pipe Midi Filter
author: Michael Schnell (mschnell@bschnell.de)
version: 1.0
changelog: initial release
donation: United Nations Foundation http://www.unfoundation.org/


-Michael
This works PERFECT!

The dwell time gave me the full range of the wah back!
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 06:45 AM   #56
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
Can you think of anything?
As said, a Crossfade JSFX would help. But of course you need to do the appropriate routing and make sure that both inputs are fully alive and clean during the switching.

Supposedly you would need to use the crossfade plugin instead of track muting.

I suppose I can send you the code later this day.

-Michael

Last edited by mschnell; 02-09-2018 at 06:52 AM.
mschnell is offline   Reply With Quote
Old 02-09-2018, 06:50 AM   #57
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
This works PERFECT!
A possible improvement came in my mind:
The "not engaged" range is subtracted from the full range sent to the plugin as modulation CC.

Would it be better to stretch the value range of the original CC # to use the full range of 0...127 when the input is between the lowest possible "negaged" value to 127 ?

-Michael
mschnell is offline   Reply With Quote
Old 02-09-2018, 11:56 AM   #58
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
I’m going to try to figure out some crossfading tricks....too bad there’s no action for “fade in sends”
Did you try the "Tiny Fade on Config Switch" setting with LiveConfigs ?
Did you happen to find out what this exactly does ? (I seem to remember I always used the default setting.)

Anyway:
here is the "Midi Crossfade" JSFX.
It performs a crossfade between channels (1 and 2) vs (3 and 4) mixing down to (1 and 2). The balance is controlled by a CC. The fading speed is limited according to a slider setting. Hence it will smoothly crossfade when teh CC jumps between 0 and 127. You can watch the fading in the graphics (supposedly self-explaining)

-Michael

Code:
desc:Midi Crossfade
author: Michael Schnell (mschnell@bschnell.de)
version: 1.0
changelog: initial release
donation: United Nations Foundation http://www.unfoundation.org/
about:
  ## Description

  Pipe
 
  ## Limitations

  Pipe




// Author: Michael Schnell, based on a work of Time Waster (M. Smith)
// License: LGPL - http://www.gnu.org/licenses/lgpl.html
//



slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Input Channel
slider2:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}>CC Input
slider3:-0.3<-1,-0.1,0.01>Attenuation per CC step
slider4:0.01<0.0005, 0.01, 0.0001>max step(dB)
//slider5:0<0,1,0.01>Factor a (Test)
//slider6:0<0,1,0.01>Factor b (Test)

@init
  modval      = 0;
//  prelevel    = 0;
  maxCCvalue  = 127;
  r4          = log(10)/20;
  
  function fca(x) (
    x < limit  ? (
      x*r3;
     ) : (
      exp((maxCCvalue-x) * r5);
    );
  );

  function fcb(x) (
    fca(maxCCvalue-x);
  );


@slider
  inChannel   = slider1;
  modcc       = slider2; 
  dbperstep   = slider3;
  db20perstep = dbperstep/20;
  p1          = 1 / log(10) / db20perstep;
  p2          = 1 / maxCCvalue;
  p3          = p1 + p2;
  limit       = (-p3+0.5) |0; 
  r1          = (maxCCvalue-limit) * dbperstep;
  r2          = exp(log(10)*r1/20);
  r3          = r2 / limit;  
  r5          = dbperstep*r4;
  s1a         = exp(log(10)*slider4/20);
  s1b         = exp(log(10)*slider4/20);
  s2a         = 1 / s1a;
  s2b         = 1 / s1b;
  fa          = fca(1);
  fb          = fcb(126);
  
@block
  while (midirecv(offset, msg1, msg2, msg3)) (
    status = msg1 & $xF0;      // Extract message type
    channel = msg1 & $x0F;
    channel == inChannel ? (   // Is it on our channel?
      status == $xB0 ? (       // Is it a controller event?
        msg2 == modcc ? (      // Is it the right CC?
          modval = msg3;
          modval ? (
            outlevela < fa ? outlevela = fa;
          );
          modval != 127 ? (  
            outlevelb < fb ? outlevelb = fb;
          );  
          modlevela = fca(modval);
          modlevelb = fcb(modval);
        );
      );
    );
    midisend(offset, msg1, msg2, msg3); // pass through
  );    
  
  modval ? (
    modstepa  = exp( log(modlevela / outlevela) / samplesblock);
    modstepa == 1 ? (
      steppinga = 0;
     ) : (
      modstepa > s1a ? (
        modstepa = s1a;
       ) : modstepa < s2a ? ( 
        modstepa = s2a;
      );  
      steppinga = 1;
    );  
   ) : ( 
    modstepa = s2a;
 );    

  modval != 127 ? (
    modstepb  = exp( log(modlevelb / outlevelb) / samplesblock);
    modstepb == 1 ? (
      steppingb = 0;
     ) : (
      modstepb > s1b ? (
        modstepb = s1b;
       ) : modstepb < s2b ? ( 
        modstepb = s2b;
      );  
      steppingb = 1;
    );  
   ) : ( 
    modstepb = s2b;
 );    

//slider5 = modlevela;                        // test
//slider5 = modlevelb;                        // test
 
  
@sample
  outlevela *= modstepa;
  outlevelb *= modstepb;
  spl0 = spl0 * outlevela + spl2 * outlevelb;
  spl1 = spl1 * outlevela + spl3 * outlevelb;  
  
  
@gfx 640 400

gfx_r=gfx_g=gfx_b=0; gfx_a=1;
gfx_x=gfx_y=0;
gfx_rectto(gfx_w,gfx_h);

q1 = gfx_w / maxCCvalue;
q2 = gfx_h;


gfx_r= 1; gfx_g=0; gfx_b=0;
gfx_y = 0;
gfx_x = 0;
x = 0;
while (x<=maxCCvalue) (
  a = x*q1;
  b = gfx_h - fca(x)*q2;
  gfx_lineto(a, b, 1);
  x = x+1;
);

gfx_r= 0; gfx_g=1; gfx_b=0;
gfx_y = 0;
gfx_x = 0;
x = 0;
while (x<=maxCCvalue) (
  a = x*q1;
  b = gfx_h - fcb(x)*q2;
  gfx_lineto(a, b, 1);
  x = x+1;
);

gfx_r=gfx_g=gfx_b=1;
gfx_y = 0;
gfx_x = modval*q1;
gfx_lineto(gfx_x, gfx_h);

gfx_r= 1; gfx_g=0; gfx_b=0;
gfx_x = 0;
gfx_y = gfx_h-outlevela*q2;   
gfx_lineto(gfx_w, gfx_y);

gfx_r= 0; gfx_g=1; gfx_b=0;
gfx_x = 0;
gfx_y = gfx_h-outlevelb*q2;   
gfx_lineto(gfx_w, gfx_y);

Last edited by mschnell; 02-09-2018 at 12:27 PM.
mschnell is offline   Reply With Quote
Old 02-09-2018, 11:57 AM   #59
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

And here is a testing project for this:
- Michael

Code:
<REAPER_PROJECT 0.1 "5.70/x64" 1518201905
  RIPPLE 0
  GROUPOVERRIDE 0 0 0
  AUTOXFADE 1
  ENVATTACH 1
  POOLEDENVATTACH 0
  MIXERUIFLAGS 11 48
  PEAKGAIN 1
  FEEDBACK 0
  PANLAW 1
  PROJOFFS 0 0
  MAXPROJLEN 0 600
  GRID 3199 8 1 8 1 0 0 0
  TIMEMODE 1 5 -1 30 0
  VIDEO_CONFIG 0 0 256
  PANMODE 3
  CURSOR 2.5
  ZOOM 100 0 0
  VZOOMEX 6
  USE_REC_CFG 0
  RECMODE 1
  SMPTESYNC 0 30 100 40 1000 300 0 0 1 0 0
  LOOP 0
  LOOPGRAN 0 4
  RECORD_PATH "" ""
  <RECORD_CFG
  >
  <APPLYFX_CFG
  >
  RENDER_FILE ""
  RENDER_PATTERN ""
  RENDER_FMT 0 2 0
  RENDER_1X 0
  RENDER_RANGE 1 0 0 18 1000
  RENDER_RESAMPLE 3 0 1
  RENDER_ADDTOPROJ 0
  RENDER_STEMS 0
  RENDER_DITHER 0
  TIMELOCKMODE 1
  TEMPOENVLOCKMODE 1
  ITEMMIX 0
  DEFPITCHMODE 589824
  TAKELANE 1
  SAMPLERATE 44100 0 0
  <RENDER_CFG
  >
  LOCK 1
  <METRONOME 6 2
    VOL 0.25 0.125
    FREQ 800 1600 1
    BEATLEN 4
    SAMPLES "" ""
    PATTERN 2863311530 2863311529
  >
  GLOBAL_AUTO -1
  TEMPO 120 4 4
  PLAYRATE 1 0 0.25 4
  SELECTION 0 0
  SELECTION2 0 0
  MASTERAUTOMODE 0
  MASTERTRACKHEIGHT 0
  MASTERPEAKCOL 16576
  MASTERMUTESOLO 0
  MASTERTRACKVIEW 0 0.6667 0.5 0.5 0 0 0
  MASTERHWOUT 0 0 1 0 0 0 0 -1
  MASTER_NCH 2 2
  MASTER_VOLUME 0.33613221313416 0 -1 -1 1
  MASTER_FX 1
  MASTER_SEL 1
  <MASTERPLAYSPEEDENV
    ACT 0 -1
    VIS 0 1 1
    LANEHEIGHT 0 0
    ARM 0
    DEFSHAPE 0 -1 -1
  >
  <TEMPOENVEX
    ACT 0 -1
    VIS 1 0 1
    LANEHEIGHT 0 0
    ARM 0
    DEFSHAPE 1 -1 -1
  >
  <PROJBAY
  >
  <TRACK {DDA46169-045E-4377-82A9-931BAB2AB012}
    NAME ""
    PEAKCOL 16576
    BEAT -1
    AUTOMODE 0
    VOLPAN 1 0 -1 -1 1
    MUTESOLO 0 0 0
    IPHASE 0
    ISBUS 0 0
    BUSCOMP 0 0
    SHOWINMIX 1 0.6667 0.5 1 0.5 0 0 0
    FREEMODE 0
    SEL 0
    REC 0 0 0 0 0 0 0
    VU 2
    TRACKHEIGHT 0 0
    INQ 0 0 0 0.5 100 0 0 100
    NCHAN 4
    FX 1
    TRACKID {DDA46169-045E-4377-82A9-931BAB2AB012}
    PERF 0
    MIDIOUT -1
    MAINSEND 1 0
    <FXCHAIN
      WNDRECT 11 12 1909 628
      SHOW 0
      LASTSEL 6
      DOCKED 0
      BYPASS 0 0 0
      <JS synthesis/tonegenerator ""
        -12.000000 -6.000000 440.000000 0.000000 0.000000 0.000000 0.000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      <JS_PINMAP
        6AMAABwAAADoAwAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAOgDAAAEAAAAAgAAAAEAAAAAAAAAAgAAAAAAAAA=
      >
      FLOATPOS 0 0 0 0
      FXID {5A5C7239-F886-4B94-BA08-26ADC741F743}
      WAK 0
      BYPASS 0 0 0
      <JS synthesis/tonegenerator ""
        -12.000000 -6.000000 440.000000 3.000000 0.000000 0.000000 0.000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      <JS_PINMAP
        6AMAABwAAADoAwAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAOgDAAAEAAAAAgAAAAQAAAAAAAAACAAAAAAAAAA=
      >
      FLOATPOS 0 0 0 0
      FXID {2560B801-DA2F-4ACD-A810-26C2D1F8E9AC}
      WAK 0
      BYPASS 0 0 0
      <JS ix/MIDI_CCRider ""
        0.000000 1.000000 64.000000 64.000000 0.000000 0.000000 0.200000 0.000000 7.000000 1.000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      FLOATPOS 56 84 505 317
      FXID {F6BB17A2-D481-4B56-BEB2-09FDECDE35A3}
      WAK 0
      BYPASS 0 0 0
      <VST "VST: ReaControlMIDI (Cockos)" reacontrolmidi.dll 0 "" 1919118692
        ZG1jcu5e7f4AAAAABgAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAOkAAAABAAAAAAAQAA==
        /////wAAAAAAAAAAAAAAAAkAAAAMAAAAAQAAAP8/AAAAIAAAACAAAAAAAAA4AAAAQzpcVXNlcnNcbXNjaG5lbGxcQXBwRGF0YVxSb2FtaW5nXFJFQVBFUlxEYXRhXEdN
        LnJlYWJhbmsAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABNYWpvcgANAAAAMTAyMDM0MDUw
        NjA3AAEAAAAAAAAAAAAAAAAKAAAADQAAAAEAAAAAAAAAAAAAAAAAAAA=
        AAAQAAAA
      >
      FLOATPOS 1974 158 676 616
      FXID {96A28D80-E2E1-408A-B67C-410963C32832}
      WAK 0
      BYPASS 0 0 0
      <JS test/pipe ""
        0.000000 1.000000 2.000000 77.000000 19.000000 0.000000 0.000000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      JS_DIMS 639 610
      FLOAT 1214 37 655 649
      FXID {56A8E54E-C65C-4A34-8C0B-B04F3058159A}
      WAK 0
      BYPASS 1 0 0
      <VST "VST: ReaControlMIDI (Cockos)" reacontrolmidi.dll 0 "" 1919118692
        ZG1jcu5e7f4AAAAABgAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAEAAAAAAAAAAgAAAAAAAAAOkAAAABAAAAAAAQAA==
        /////wAAAAAAAAAAAAAAAAkAAAAMAAAAAQAAAP8/AAAAIAAAACAAAAAAAAA4AAAAQzpcVXNlcnNcbXNjaG5lbGxcQXBwRGF0YVxSb2FtaW5nXFJFQVBFUlxEYXRhXEdN
        LnJlYWJhbmsAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAABNYWpvcgANAAAAMTAyMDM0MDUw
        NjA3AAEAAAAAAAAAAAAAAAAKAAAADQAAAAEAAAAAAAAAAAAAAAAAAAA=
        AAAQAAAA
      >
      FLOATPOS 2006 190 676 616
      FXID {65B3D096-4029-4E6E-A692-534CA33C9B3F}
      WAK 0
      BYPASS 0 0 0
      <JS test/crossfade ""
        0.000000 2.000000 -0.100000 0.000500 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
      >
      JS_DIMS 1663 542
      <JS_PINMAP
        6AMAACwAAADoAwAABAAAAAQAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAACwAAADoAwAABAAAAAQAAAABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAA==
      >
      FLOATPOS 131 452 1679 581
      FXID {BD3325F3-8A13-4777-8791-653269E6BB07}
      WAK 0
      BYPASS 0 0 0
      <VST "VST: ReaEQ (Cockos)" reaeq.dll 0 "" 1919247729
        cWVlcu5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAAQAAAABAAAAAAAAAAIAAAAAAAAABAAAAAAAAAAIAAAAAAAAAKgAAAABAAAAAAAQAA==
        IQAAAAQAAAAAAAAAAAAAAAAAAAAAAFlAAAAAAAAA8D8AAAAAAAAAQAEIAAAAAAAAAAAAAAAAwHJAAAAAAAAA8D8AAAAAAAAAQAEIAAAAAAAAAAAAAAAAQI9AAAAAAAAA
        8D8AAAAAAAAAQAEBAAAAAAAAAAAAAAAAiLNAAAAAAAAA8D8AAAAAAAAAQAEBAAAAAQAAAAAAAAAAAPA/AAAAAA8CAABhAQAA
        AAAQAAAA
      >
      FLOATPOS 0 0 543 419
      FXID {3DB4F0B3-91F3-45C2-A724-3F1BB249A320}
      WAK 0
    >
  >
  <EXTENSIONS
  >
>
mschnell is offline   Reply With Quote
Old 02-09-2018, 12:13 PM   #60
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

If you want to have the crossfade to be initiated by LiveConfigs, you can put this plugin above "Midi Crossfade". It will send out a CC #0 with a value defined in the preset that LiveConfig might push upon it.

-Michael

Code:
desc:Slider to Midi CC0
author: Michael Schnell (mschnell@bschnell.de)
version: 1.0
changelog: initial release
donation: United Nations Foundation http://www.unfoundation.org/
about:
  ## Description
  Pipe
  
slider1:1<1,16,1>Midi Channel
slider2:1<1,128,1>Value

@init
 cc = 0xB0-1;
 mes2 = 0;                         // CC #
 mes3 = 0;
 mes3old = -1;

@slider
 mes1 = cc + slider1|0;
 mes3 = slider2|0;

@block
 mes3 != mes3old ? (
 midisend(0,mes1,mes2,mes3);
 mes3old = mes3;
 );

Last edited by mschnell; 02-09-2018 at 12:28 PM.
mschnell is offline   Reply With Quote
Old 02-09-2018, 01:22 PM   #61
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
A possible improvement came in my mind:
The "not engaged" range is subtracted from the full range sent to the plugin as modulation CC.

Would it be better to stretch the value range of the original CC # to use the full range of 0...127 when the input is between the lowest possible "negaged" value to 127 ?

-Michael
I think so, I think that’s the way axe does it, would be definitely worth a try, especially say for something like using it to control a whammy pedal dive bomber thing!
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 01:25 PM   #62
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Oh man, I can’t wait to get to work to try these out!!! Thank you!

Now I just gotta figure out an easier way of loop switching
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 02:37 PM   #63
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Ok, this seems to be doing what it should, but I'm not sure how exactly I would use this.

Lets say I had three patches to switch between, how exactly would I pick a track to play and a track to switch to and stuff?
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 02:42 PM   #64
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
I think so, I think that’s the way axe does it, would be definitely worth a try,
I'll do that tomorrow.
-Michael
mschnell is offline   Reply With Quote
Old 02-09-2018, 02:47 PM   #65
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
Lets say I had three patches to switch between,...
You said you wanted to do a crossfade, not a net-fade

Of course a "1 from n" selector (instead just 1 from 2) could be done using the same toolbox.

For three, you could try two instances in a sequence. But please first try just two as a proof of concept.

Quote:
Originally Posted by pipelineaudio View Post
how exactly would I pick a track to play and a track to switch to and stuff?
This primarily depends on a lot of details in your setup.
-Michael

Last edited by mschnell; 02-09-2018 at 11:41 PM.
mschnell is offline   Reply With Quote
Old 02-09-2018, 03:26 PM   #66
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Ok, this definitely kills the glitches. And the dropout time, though maybe an assymetrical fade would be even better for this

If it could crossfade one set of inputs to 2 sets of outputs, you'd also have the ability to do spillover!

What I'm trying to do exactly is eliminate the lag time and the glitches when I switch between rows in SWS Live Configs.

If I assign tracks in Live Configs, then I get both a long dropout time and often glitches, unless I set that fade knob thing longer, which makes the dropouts even longer, and still can give glitches.

So I have say, 8 rows going. Ideally, some of the rows would be the same track with some loops switched in and out to deal with buggy plugins, but barring that I think it can still be done, just not sure if I could somehow run 8 of these and be able to handle all the switching logic
pipelineaudio is offline   Reply With Quote
Old 02-09-2018, 11:46 PM   #67
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
an assymetrical fade would be even better for this
I suppose you mean faster up than down, not different times for the red/green channels ?

Quote:
Originally Posted by pipelineaudio View Post
you'd also have the ability to do spillover!
I have no idea what this is supposed to mean.

Quote:
Originally Posted by pipelineaudio View Post
...unless I set that fade knob thing longer, which makes the dropouts even longer...
Ahh ! So it's obvious what the fade knob does. One after the other:
- fade out
- mute track A
- unmute track B
- fade in

Obviously LiveConfigs never has two of the managed track unmuted at the same time. I suppose there are reasons for this.

So if you want to do a "Net Fade" between multiple active tracks, you need to deactivate LiveConfigs' track muting feature completely and (having the tracks unmuted all the time) use presets to be pushed to a plugin like "Midi Crossfade" by LiveConfigs or some actions based stuff for dynamically and mothly setting the routing.

-Michael

Last edited by mschnell; 02-09-2018 at 11:55 PM.
mschnell is offline   Reply With Quote
Old 02-10-2018, 12:03 AM   #68
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
So I have say, 8 rows going.
If you don't need a crossfade, but a kind of dynamic smooth "demultiplexer", you might try to use my "Midi Volume" JSFX (on ReaPack) instead of the new "Midi Crossfade".

It does the same action but only for a single input channel.

If you use same at the end of each of your (8 ?) tracks and feed CCs with values 0 / 127 to it, it will fade the appropriate track in and out glitchlessly at any point in time you desire.

With that, the "Net Fade" is just a matter of preset pushing and/or Midi programming and routing.

This is likely less complex/confusing then trying to apply multiple crossfades, as it is very much like muting/unmuting tracks.

-Michael
mschnell is offline   Reply With Quote
Old 02-10-2018, 02:41 AM   #69
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

now that sounds promising! I will try it. Is there a way to disable the SWS Live Config's muting?

Spillover would be like, if you switched from a channel with a delay on it, the delay would still finish playing even as the new track comes up. I've got it working by running the delay in parallel now, things are looking really good, but I'll see about the JS you just mentioned
pipelineaudio is offline   Reply With Quote
Old 02-10-2018, 02:55 AM   #70
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

how would I automate that send from 127 to 0 though?
pipelineaudio is offline   Reply With Quote
Old 02-10-2018, 04:55 AM   #71
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
s there a way to disable the SWS Live Config's muting?
LiveConfiogs Page bottom: "Options" -> uncheck "Mute all but active track" (can be set per page)

For "spillover" you obviously would need to mute the input to the plugin and leave the output connected. Of course this is doable by "midi Volume" as well.

-Michael
mschnell is offline   Reply With Quote
Old 02-10-2018, 05:09 AM   #72
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
how would I automate that send from 127 to 0 though?
Save two presets for the "Slider To CC0" JSFX one with the "Value" slider set to 0 and one with the value slider set to 127.

Place a "Slider to CC0" instance above any "Midi Volume" JSFX and set the "Midi Volume" JSFX to adhere to CC # 0 .

Now you can have any LiveConfigs Line push either of the presets to any of the "Slider To CC0" instances. (Unfortunately LiveConfigs does not show the alias names, so you need to take care to select the correct instance.)

- Michael
mschnell is offline   Reply With Quote
Old 02-10-2018, 11:50 AM   #73
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
LiveConfiogs Page bottom: "Options" -> uncheck "Mute all but active track" (can be set per page)

For "spillover" you obviously would need to mute the input to the plugin and leave the output connected. Of course this is doable by "midi Volume" as well.

-Michael
That only disables the track muting, the send muting is still there
pipelineaudio is offline   Reply With Quote
Old 02-10-2018, 11:52 AM   #74
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
Save two presets for the "Slider To CC0" JSFX one with the "Value" slider set to 0 and one with the value slider set to 127.

Place a "Slider to CC0" instance above any "Midi Volume" JSFX and set the "Midi Volume" JSFX to adhere to CC # 0 .

Now you can have any LiveConfigs Line push either of the presets to any of the "Slider To CC0" instances. (Unfortunately LiveConfigs does not show the alias names, so you need to take care to select the correct instance.)

- Michael
That is some genius stuff! Am I getting it right, slider to midi cc is trigger Able? Like you send it a message and it performs that action? I couldn’t quite figure out what it did
pipelineaudio is offline   Reply With Quote
Old 02-10-2018, 12:31 PM   #75
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
That only disables the track muting, the send muting is still there
I never came across "send muting". What exactly do you mean by this, and what does LiveConfigs do ?

-Michael
mschnell is offline   Reply With Quote
Old 02-10-2018, 12:41 PM   #76
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
That is some genius stuff!
Not really . I did the "Slider To PS" JSFX a long time ago to make LiveConfigs send Midi Program change messages to Kontakt to have same latency-free switch pre-loaded Sample-libraries for a new sound/patch. (I think it's described in my LiveConfigs User Guide.

I just did a minimal edit to the source code to do the "Slider To CC0" JSFX.

Quote:
Originally Posted by pipelineaudio View Post
Am I getting it right, slider to midi cc is trigger Able?
It's extremely simple: whenever the "value" slider is moved (manually or when pushing a preset to it) it sends out a Midi CC #0 message with channel and value according to the (new) slider setting.

-Michael

Last edited by mschnell; 02-10-2018 at 02:41 PM.
mschnell is offline   Reply With Quote
Old 02-10-2018, 12:48 PM   #77
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Do you see that the power of Reaper as a Live playing tool is freed by LiveConfigs plus a set of JSFXes for Midi preprocessing.

I hope that we some day will be able to create a Toolbox that makes setting up such stuff easy for non-programmers.

With that, Reaper users would not any longer be forced to take a learning curve with dedicated Live VST player software such Forte or Bidule.

-Michael

Last edited by mschnell; 02-10-2018 at 02:43 PM.
mschnell is offline   Reply With Quote
Old 02-10-2018, 01:36 PM   #78
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
It's extremely simple: whenever the "value" slider is moved (manually or when pushing a preset to it) it sends out a Midi CC #0 message with channel and value according to the (new) slider setting.

-Michael
But then where do the time components for the fade out or in happen? What I think I need is a way to select whatever slider and then tell it "when I send you this message, you will beging a 50msec fade" or something like that
pipelineaudio is offline   Reply With Quote
Old 02-10-2018, 01:37 PM   #79
pipelineaudio
Mortal
 
pipelineaudio's Avatar
 
Join Date: Jan 2006
Location: Wickenburg, Arizona
Posts: 14,047
Default

Quote:
Originally Posted by mschnell View Post
I never came across "send muting". What exactly do you mean by this, and what does LiveConfigs do ?

-Michael
If you chose an audio input track, it automatically builds sends to whatever tracks you specify in the rows of live configs, and then when you activate a row, it unmutes the send from the audio input track to the target track and mutes all the other sends...at least as far as I can tell. I think I could make a screen grab video, if I could figure how to make the i/o window stay open for it
pipelineaudio is offline   Reply With Quote
Old 02-10-2018, 02:53 PM   #80
mschnell
Human being with feelings
 
mschnell's Avatar
 
Join Date: Jun 2013
Location: Krefeld, Germany
Posts: 14,686
Default

Quote:
Originally Posted by pipelineaudio View Post
"when I send you this message, you will beging a 50msec fade" or something like that
The fade time is defined in the Midi Volume JSFX.

It's not given in msec (as it is not just for fading (i.e. 0->127 or 127->0) but for smoothing a volume curve provided by the CC (avoiding zipper noise).

Instead, the max step size in dB is given. As with each sample a step is taken and the minimum Volume above 0 (-inf dB, at CC= 0) is at CC=1 with a given dB of attenuation (depending on the curve setting, I don't have the formula in mind) the count of steps until and hence the time till reaching 0dB is defined by this slider. I suggest to try this out.

If you need to dynamically change the fade rate, you might try to push a preset onto "Midi Volume".

-Michael

Last edited by mschnell; 02-10-2018 at 03:25 PM.
mschnell is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 06:41 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.