Page 1 of 1

Posted: 16 Oct 2016, 00:53
by gurulogic
I am wondering if anyone can see a more efficient way to patch this.

In this example I have so far patched only for 3 parameters scroll / control knobs out of the 8 intended and I will need to use this patch several times throughout my workspace.
The general idea is that the "index" control scrolls up and down (x8) through the VST params of the connected VST while updating the VST names directly to the controls and linking the controls directly to the VST params. The expected result is to have my Novation Nocturn controller be able to scroll through the VST params and auto assign to the 8 knobs on the controller while at the same time showing the assigned parameter name for each control on screen. So far seems to be working ok but I am thinking there must be a lighter way to patch this sort of thing?

Image

edit: hmm, not sure why image code isn't working?
http://www.sensomusic.com/forums/upload ... sIndex.JPG

Posted: 16 Oct 2016, 01:06
by sephult
Hi guru,

I have my drag and drop VST implementation that could help out or give ideas...should be a standard in the next release ;)
I think this can be found currently in the addons or as a selection when inserting plugins...and reads the parameters and lets you drag and drop parameter names to knobs to link.
You need some help I could probably modify to create the banks you need.
Getting better at scripting most stuff here, so probably could simplify for you.

-s

Posted: 16 Oct 2016, 01:33
by gurulogic
sephult, thanks for the suggestion, it was already your VST DaD patch that got me started with this ;)
With your patch I have the issue that the VST params are all locked from updating from the VST when changing presets etc, so only control from the mapped knob works, and I could not find any easy solution in the DaD patch. I needed two way parameter flow so I started exploring this method with some loose basis from your patch (get/set index/values etc)

Scripting (as always) is probably the best answer, unfortunately for me I cannot wrap my head around the concept. I'm still in kindergarden playing with my little building blocks

Edit:
"I have the issue that the VST params are all locked from updating from the VST when changing presets etc"

I found the same problem when trying my patch with the VST in the parent patch. Solved with Pass If Changed module before VST Params inlet. I tried this with VST DaD and also had the problem solved. I did not know pass if change could work on array flow, good to know now. Ok, my options are expanding now :)

Posted: 16 Oct 2016, 04:22
by 23fx23
yeah images on uploader seems to have a problem..

If really want no scripts, here is one possible solution without a single script, while keeping ability to adjust NB of element displayed per pages easily setting a constant

but typically for this i would use scripts and/or IML , will be less webby and more cpu efficient/modular ..

Image

workspace HH exemple

Posted: 16 Oct 2016, 04:39
by 23fx23
re reading i forgot you have to link to separated knobs & names at some point so that won't fit.. (possible from this but will be even more webby^^)

in case it's possible this way:

_add the given with usine split comma text to N outs script, out of the listbox on right, there you'll have your 8x name scrolling done.

then your 8x fader/knobs outs go to pin of an array , and on input the reverse, an array splits all the 8x pins out to your faders, but with a passif change in bettwenn,
then this can replace the array im using here.

but im pretty sure sephult could script ya a magic single thing to replace all that mess ;)

Posted: 16 Oct 2016, 13:56
by nay-seven
Cool discussion and collaboration here (as often :) )
I love VST dad from sephult and your solution 23FX is interesting too, a good complement to VST dad !
here my version, based on your's but with knobs to use midi learn
Download

Posted: 16 Oct 2016, 13:59
by nay-seven
About image uploader, several things have been changed on PHP side, certainly some fix to do here

Posted: 16 Oct 2016, 16:26
by 23fx23
Cool :) not at home yet but ill check when back.
Between ive made a single script/iml much efficient version ill post as well later

Posted: 16 Oct 2016, 21:31
by gurulogic
Great stuff guys, thanks! :)
nay-seven, your build + expansion of 23fx23 patch idea works perfect. I can learn a lot from these examples.
I have done some more patching which allows usage of just one patch to switch between several VST plugins and have all parameters and names updated on switch. I did have some weird issues with sort of a feedback loop with parameters when using buses for this method but I think the stop modules have solved this.

Image

Posted: 16 Oct 2016, 22:15
by 23fx23
Ok cool to know it works, nice job nay !. However I opened the moded patch and I think there are slight things that can be improved.

It my fault because wasn't that clear when explained, but while we need the 8x pass_if_change before params (so we can set the knobs), we don't need them on output, and in-out before/after knobs shouldn't be same array, but one for demultiplex in and one for multiplex out otherwise it's kinda looping on itself and not useful., but add just 1 pass if change after the big array is reconstructed then.

here is a modified version based on nay'one i feel would work slighlty better and save tiny bit of cpu:

patch_with knobs_V2

im cleaning a bit the 1 script/iml version and will upload in one hour or so.

Posted: 16 Oct 2016, 23:35
by nay-seven
Cool , thanks a lot for this one
on my side i've change the max of the fader select ,
cause many plug in have a lot of parameters, so we i rely the get array size to his max ( divide by 8+ round)
second issue is the parameters names which are sometimes long and can't be read correctly

Posted: 17 Oct 2016, 04:32
by 23fx23
yes you're right Nay, so ive updated like this as well

I couldn't help trying to push a bit more :p , so here are two versions that might be of interest.

first one is same patch idea used previously, but where 3 main process that looked a bit weird heavy tricks in classic patch methods have been scripted.
I made 3 scripts rather than one only as 'maybe re-usable blocs for other things simplifying the patching':

_one that directly extracts a 'page' from a big input comma text with a scroll input, splitting to individual elements.
_one that combine 'extract sub array of a bigger one, let apply settings to the subarray, and re-incrusts it in parent bigger array.
_one that picks an array and demuliplex to n outs acting as if they had pass_if_changed, so no need to add n times a pass_if_change

Image

so this one should *theorically behave same way as previous
VST_SCROLLER_KNOBS_SCRIPTED_VERSION

And a new one different approach, only one script and IML. iml setting wirelessly captions and values to items, and back to VST.
The VST has to be tagged 'VST', and the items tagged with numbers '0', '1', '2' ect, then iml will be able to adress them.
(Tho this one however imply all stuff being in same patch, ill think of a way to use with multiples vsts via busses but might be tricky).

Image

VST_SCROLLER_IML_VERSION

EDIT: and while we are here, here is a multi VST IML edition exemple based on your busses idea, so should be able to scroll vsts anywhere in wksp.
I used dynamic busses names switching, feel it's lighter than spreading n big comma text and arrays with selector. just add a Send_iml module like the
exemple in each vst subpatch, and set busses names in listboxes, here works quite nicely :)

IML_MULTI_VST_SCROLLER

Posted: 17 Oct 2016, 07:18
by gurulogic
:o:o:o

I can't wait to check these out! Tomorrow..

Posted: 17 Oct 2016, 10:35
by gurulogic
I had a chance to try , "vst_scroller_knobs_scripted_version" works well and is easy to modify for more parameter knobs. Both the iml versions work but are a bit buggy for me with parameter values jumping and acting weird. Cool stuff though! Need more script gurus around here whipping up useful toolslike this..

Agreed about some parameter names being too long. Would be nice to be able to clip.

Posted: 17 Oct 2016, 10:43
by nay-seven
Definitely a great tool 23FX, Thanks !!
A lot of fun with a simple LPD8 (and will more better with the behringer X-TOUCH MINI i'm waiting soon :) ) .

Working with, I've add an increment /decrement button to the select fader, more precise and easy to midi learn.
these 3 scripts will be really useful , good idea to separate them !
IML version seems to win the cpu battle but with only 0,2, 0.3 % better here

Posted: 17 Oct 2016, 11:06
by nay-seven
and , thanks Senso, Pictures uploader on posts is working again :)

Posted: 17 Oct 2016, 12:32
by sephult
I'm working a bunch of scripts at the moment and have been practicing trying to optimize and combine useful tools.
I'm working this script as well as a single script, the only problem is breaking the inputs from the outputs for me at the read within the script.

Ton's of MIDI tools! coming this way as well as data to arrays, clock arrays, conversions, etc...
Expect many new features in the next version :)

Until then I will do some conversions and share to try out, hopefully some feedback and we can optimize our modules and tools to build the library!

I haven't had a chance to go through these ones you guys are sharing, awesome collaboration and I hope we all continue to share....what a wonderful community and user group!!
Hopefully take some time later this evening or tomorrow morning away from hectic life to go through these and maybe help out.

-s

Posted: 18 Oct 2016, 23:48
by 23fx23
@sephult cool :) not sure what you mean by "breaking the inputs from the outputs for me at the read within the script"?

@ Nay yeah not Sure IML is much more cpu efficient here, it just allow less wiring. think it might be when/ig passing huges params arrays or commatext only. Xtouch mini seems def a nice toy :p

@guru/others maybe iml would need some latency bloc to wait in certain cases, or i think i forgot to set to slower callback that could create problems, ill check

for the 'clipped too long names' thing
Ive made a simple script to force a max amount of char on a displayed item of a commatext. basically pick commain, if a n element is too long format it, and output comma tex out, so you can paste if want this in a new script and insert out of param names to filter too long names.

Code: Select all

////////////////////////////
// set a max char length for comma text elements
////////////////////////////
const MAX_LEN = 8; //max displayed  chars per item

Var Commain,Commaout : tparameter;
Var SL1: Tstringlist;   
//////////////////////////////             
Procedure Init;                                         
Begin
  commain:= CreateParam('comma in',Pttextfield);Setisoutput(commain,false);   
  commaout:= CreateParam('comma out',Pttextfield);Setisinput(commaout,false); 
  
  SL1.Create;       

  SetModuleColor($909090);
END;
                         
// destroy
procedure Destroy;
begin  
 sl1.free;
end;   
///////////////////////////////////////////////////////////
Procedure Callback (n:integer);    
Var i, L, Litem :integer;  
Var item : string; 
BEGIN                           
                                                  
  SL1.setcommatext(getstringvalue(COMMAIN));  
  L := SL1.Getcount;
  
  for i:= 0 to L -1 do begin  
   item := SL1.GetStrings(i); 
   Litem:= Length(item);
                    
   if Litem  > MAX_LEN then begin  
     item := copy(item,0,MAX_LEN);      
     SL1.setstrings(i,item);
   end;
                                        
  end;
    SetStringValue(commaout,SL1.Getcommatext);
           
END;    
/////////////////////////////////////
NB this can work only on the non iml version, othewise iml will try to access params by cliped name and that won't work, ill try to provide a modified version of iml code with same setting, but can be a useful separated bloc maybe for other things..

Posted: 19 Oct 2016, 00:37
by 23fx23
Here is a moded script for IML versions that adds a max length for name setting
can edit at top of the script.
I also set fast callbacks to false wich is better when dealing with iml and a lentency bloc count man can adjust , both should help if observing feedback.
just have to set MODE_MULTI to true if using the way the multi vst patch shown, or false if using only one vst in same patch. then should just replace existing script codes

Code: Select all

/////////////////////////////////////////////
// IML VST Scroller 23fx 17/10/16
// Allow to scroll Vst params names and values
// And passes them to items   
// VST and items should be in same patch  
// of the script, VST should be TAGGED
// with 'VST ' tag bellow, and items
// tag numbered from 0 to NB_ELEMENTS-1
////////////////////////////////////////////
const NB_ELEMENTS = 8;    //how many items ie faders/knobs
const NB_CHAR_MAX = 8;    // Max lengh of displayed names
const MODE_MULTI = true; //set false if only one vst in same patch, true
                         // for multi vst spread accross different patchs

const msg_VST_TAG    = 'VST ';     //vst header tag followed by space         
const msg_SET_PATCH  = 'SET_TARGET_PATCH SENDER_PATCH';                
const msg_SET_STRING = 'SET_STRING_VALUE ';                   
const msg_GET_VALUE  = 'GET_VALUE ';                             
const msg_SET_VALUE  = 'SET_VALUE ';           
                                         
                                                             
 const max_count_scroll = 200;                       
 const max_count_set = 200;
                        //when scrolling iml get VST values and sets item values
                        //that items values get back to script via array            
                        // normally we want when modifying items to 
                        // send values back to vst 
                        // so there is a wait time when scrolling 
                        //to avoid msgs loops overflows being constantly send back 
                        //idem when we set a value, params array in feedback
                        //this means high amount of message we stop while we set
                        // increase if observing feedback, decrease for less wait
 
// parameters declaration                 
var pParamsArray : Tparameter;
var pCommaIn    : Tparameter;   
var pscroll    : Tparameter;                                      
var parray : Tparameter;
var pNB_params : Tparameter;       
var pMax_Scroll : Tparameter;                                        
var pMax_Pages : Tparameter; 
var pCounting_Scroll: Tparameter;
var pCounting_Set: Tparameter;   
var pIML: Tparameter;
                                            
//var output    : array [0..NB_ELEMENTS] of Tparameter;
var sl1       : TStringList;                                              
//var mess : string;   
var scroll : integer;    
var count_scroll : integer;   
var counting_scroll : boolean;   
var count_set : integer;   
var counting_set : boolean; 
var nb_params : integer;        
var param : string;                                     
var msg_iml: string;     
var i ,iscroll, id, idscroll: integer;                        
var in_val, mem_val ,idval: single;  
                      
var array_mem : array [0..NB_ELEMENTS] of single;                       
                       
// destroy
procedure Destroy;
begin  
 sl1.free;
end;
 /////////////////////////////////////////////////////////
 // initialisation : create parameters
procedure init;
var i : integer;
begin     
 SetModuleColor($909090);    
     
   pParamsArray := CreateParam('params array',ptArray);
   SetIsOutput(pParamsArray,false);
   SetFastCallBack(pParamsArray, false);      
      
 pCommaIn := CreateParam('params names',ptTextField);
 SetIsOutPut(pCommaIn,false); 
 SetFastCallBack(pCommaIn , false);                     
                                     
  pscroll := CreateParam('scroll',ptDataField);
  SetIsOutPut(pscroll,false); 
  SetFastCallBack(pscroll, false);      
                               
   parray := CreateParam('items array',ptArray);
   SetIsOutput(parray,false);                      
   setlength(parray,NB_ELEMENTS); 
   SetFastCallBack(parray , false);   
   
   pNB_params := CreateParam('nb of params',ptDataField);
   SetIsInPut(pNB_params,false);   
 
    pMax_Scroll := CreateParam('max scroll',ptDataField);
    SetIsInPut(pMax_Scroll,false);  
 
    pMax_Pages := CreateParam('max pages',ptDataField);
    SetIsInPut(pMax_Pages,false);      
       
    pCounting_Set:= CreateParam('VST feedback blocked',ptSwitch);
    SetIsInPut(pCounting_Set,false);  
                       
    pCounting_Scroll:= CreateParam('User feedback blocked',ptSwitch);
    SetIsInPut(pCounting_Scroll,false);  
       
     pIML:= CreateParam('IML_message',ptTextField);
     SetIsInPut(pIML,false);    
                                                          
      count_scroll:= -1;
      count_set:= -1;     
      counting_scroll := FALSE; 
      counting_set := FALSE;  

 Sl1.Create;    
 
  Sl1.SetCommaText(GetStringValue(pCommaIn)); 
  nb_params := Sl1.count;
  SetValue(pNB_params,nb_params);                     
  SetValue(pMax_Scroll,nb_params-NB_ELEMENTS);
  SetValue(pMax_Pages, nb_params div NB_ELEMENTS);
    
end;///INIT   

/////////////////////////////////// 
Procedure SEND_NAMES_TO_ITEMS;
begin                               

 For i := 0 to NB_ELEMENTS-1                      
     do begin                           
    iscroll:=i+scroll;    
                                                          
   if &#40;iscroll<nb_params&#41;                            
   then begin                                             
      param &#58;= SL1.GetStrings&#40;iscroll&#41;; 
      
      if Length&#40;param&#41; > NB_CHAR_MAX then begin
      param &#58;= copy&#40;param,0,NB_CHAR_MAX&#41;;
      end;
      
   end                                        
   else begin
      param &#58;= '_';     
   end; 
    msg_iml &#58;= +msg_SET_STRING + inttostr&#40;i&#41; + ' CAPTION '+ ''''+param+''''; 
    SendUsineMsg &#40;msg_iml&#41;;  //name apply   
    end;//loop
end;   
///////////////////////////////////////////// 
Procedure SEND_VALUES_TO_ITEMS; 
var temp &#58; single;
begin 

    For i &#58;= 0 to NB_ELEMENTS-1 
     do begin                           
    iscroll&#58;=i+scroll;    
                                                          
   if &#40;iscroll<nb_params&#41;                            
   then begin                                             
      param &#58;= SL1.GetStrings&#40;iscroll&#41;;                                       
      //method A gets from VST to temp var and send back to item  
      // but use 2x more iml messages so prob higher cpu
      
     // msg_iml &#58;= msg_GET_VALUE + msg_VST_TAG + param + ' "PARAM_VALUE"';   
     //  SendUsineMsg &#40;msg_iml&#41;;     //get from vst to temp var              
     //  msg_iml &#58;= msg_SET_VALUE + inttostr&#40;i&#41; + ' 1 '+ '"PARAM_VALUE"';  
     //  SendUsineMsg &#40;msg_iml&#41;;    // send temp var to item    
        
       //method B picks directly from params array float 
       temp &#58;= GetDataArrayValue&#40;pParamsArray,iscroll&#41;; 
       msg_iml &#58;= msg_SET_VALUE + inttostr&#40;i&#41; + ' 1 '+ floattostr&#40;temp&#41;;  
       SendUsineMsg &#40;msg_iml&#41;;    // send temp var to item    
              
   end                                        
   else begin 
        msg_iml &#58;= msg_SET_VALUE + inttostr&#40;i&#41; + ' 1 '+ '0';  
        SendUsineMsg &#40;msg_iml&#41;;   //send 0 if out of range    
   end; 
                                                         
  end; //loop      
  end;
///////////////////////////////
Procedure IMPORT_COMMA_TEXT;
begin
  Sl1.SetCommaText&#40;GetStringValue&#40;pCommaIn&#41;&#41;; 
  nb_params &#58;= Sl1.count;                             
   SetValue&#40;pNB_params,nb_params&#41;; 
   SetValue&#40;pMax_Scroll,nb_params-NB_ELEMENTS&#41;; 
   SetValue&#40;pMax_Pages, nb_params div NB_ELEMENTS&#41;;  

end;  
//////////////////////////////////////
Procedure SEND_VALUE_TO_VST;
begin
  if &#40;idscroll < nb_params&#41; then begin 
     
   if&#40;MODE_MULTI&#41; then begin  
       msg_iml &#58;= msg_SET_PATCH + ',' + '"'+ msg_SET_VALUE + msg_VST_TAG +  '''' +SL1.GetStrings&#40;idscroll&#41;+ ''''+ ' '+ floattostr&#40;idval&#41; +'"'; 
       SetStringValue&#40;pIML,msg_iml&#41;;  
   end
   else begin                                          
   SendUsineMsg &#40;msg_SET_PATCH&#41;; 
   msg_iml &#58;= msg_SET_VALUE + msg_VST_TAG +  '''' +SL1.GetStrings&#40;idscroll&#41;+ ''''+ ' '+ floattostr&#40;idval&#41;; 
   SendUsineMsg &#40;msg_iml&#41;;
   end;      
  end;   
end;
///////////////////////////////////////////////////////////////////////////  
procedure Callback&#40;n&#58;integer&#41;;


begin     

if&#40;n=pCommaIn&#41; then begin IMPORT_COMMA_TEXT; SEND_NAMES_TO_ITEMS; end;    


 if&#40; &#40;n= parray&#41; AND &#40;not counting_scroll&#41;&#41;then begin 
  count_set &#58;=0;      //while we set we don't want params array in feedback
  For i &#58;= 0 to NB_ELEMENTS-1 
     do begin  
       in_val &#58;= GetDataArrayValue&#40;parray,i&#41;; 
       mem_val &#58;= array_mem&#91;i&#93;;
    
    if &#40;mem_val - in_val <> 0&#41;
    then begin   
     id &#58;= i;   
     idval &#58;= in_val;                  
    end;                                                 
     array_mem&#91;i&#93; &#58;= getDataArrayValue&#40;parray,i&#41;;                 
      end; //loop
                             
     idscroll &#58;= id + scroll; 
              
      SEND_VALUE_TO_VST;         
   end;
                                                          
                                                                            
if &#40;n = pscroll&#41; then begin   

    count_scroll &#58;= 0;           
                                              
     SendUsineMsg &#40;msg_SET_PATCH&#41;;                                                                                 
     scroll &#58;= trunc&#40;GetValue&#40;pscroll&#41;&#41;; 

     &#40;SEND_NAMES_TO_ITEMS&#41;;
     &#40;SEND_VALUES_TO_ITEMS&#41;; 
                                                                         
 end;  
 
 if&#40;n=pParamsArray&#41; AND &#40;not counting_set&#41;then begin   
  count_scroll &#58;= 0;   
 &#40;SEND_VALUES_TO_ITEMS&#41;; 
 end;
                                                        

end;  ////Callback  
 // strace&#40;GetStringValue&#40;outPut&#41;&#41;;         
 ///////////////////////////////////////////////      
Procedure Process;
begin     

 if &#40;count_scroll >-1&#41; then begin
 count_scroll &#58;= count_scroll+1;    
 counting_scroll &#58;= true;
 if &#40;count_scroll >max_count_scroll&#41; then begin
 count_scroll &#58;=-1;   counting_scroll &#58;= false; 
 end;  
 SetValue&#40;pCounting_Scroll,count_scroll&#41;;  
 end;    
 
  if &#40;count_set >-1&#41; then begin
 count_set &#58;= count_set+1;    
 counting_set &#58;= true;
 if &#40;count_set >max_count_set&#41; then begin
 count_set &#58;=-1;   counting_set &#58;= false;
 end;
  SetValue&#40;pCounting_Set,count_set&#41;;  
 end;  

end; //PROC  
 ////////////////////////////////////////////////////                       
// no process bloc
edit: i had also made one mistake that would create feedback when modifying on vst, fixed in above code

Posted: 19 Oct 2016, 06:14
by gurulogic
Both set a max char length and latest IML VST Scroller seem to work well, cheers! I dig the comments in the script. It helps me wrap my head around it a little more.

Is there anywhere to enter a value to offset the start of where to clip from.. ie: iwanttoextract[thispartonly] ? I tried but my guesses were not so good..

Posted: 19 Oct 2016, 07:43
by 23fx23
cool :) normally it should be this: if you locate in the script you use where there is "copy"

param := copy(param,0,NB_CHAR_MAX); // actually keep part from char 0 to NB_CHAR_MAX defined at top of the script

so what you could do is define a new constant at top of the script like const CHAR_START = wanted start position value;
and then replace by

Code: Select all

 param &#58;= copy&#40;param,CHAR_START, CHAR_START + NB_CHAR_MAX&#41;;
however i don't know what will happen if doing so we go beyond the actual char lenght of item, as the offset+lenght could potentially be greater
so maybe if problems use this that will pick the minimum integer between item actual length and lenght we asked

Code: Select all

      
      if Length&#40;param&#41; > NB_CHAR_MAX then begin    
      param &#58;= copy&#40;param,CHAR_START , minI&#40;CHAR_START + NB_CHAR_MAX,Length&#40;param&#41;&#41;&#41;;
      end;

Posted: 19 Oct 2016, 08:46
by nay-seven
Thanks for your script 23FX, you're a master ;-)
On my side i found a different solution,i suppose if we use this patch for some specific Plug ins , and each one will need different new parameters name. Not easy to create a rule.
So i 've insert a list box ( via comma text) in the parameters name flow, once populated, i delete the inlet wire.
Now i can rename individually each parameters . Save the patch with the name for this plug in

Image

Posted: 19 Oct 2016, 10:09
by 23fx23
yup i see nice idea nay! wouldn 't work for iml versions tho it could be possible to mayke a separate commain_in for 'displayed names' but yes will work on hardwired version

Posted: 19 Oct 2016, 10:15
by gurulogic
Thabks 23fx, i will try your suggestions. Nay's approach also looks handy, could even use parameter renaming as visual cues for live performance "filt.pat6" as a reminder that i want to tweak that filter when on pattern 6 of the specific arrangement, or "don't" (haha) for if there is a parameter that shouldn't be used live

Posted: 24 Oct 2016, 06:43
by gurulogic
Here's a way to directly learn a parameter from touching VST UI. Press learn, touch a control on the VST and voila, two way control. Bulky patch, could probably use the magic touch of a script guru, but as is, is a good proof of concept. (assuming this sort of approach isn't old news)

Things I would like the patch to be able to do:
-Scrolling through learned parameters pages
-Toggling between multiple VST's workspace wide with auto parameters update
-Learn from multiple VST's on one page (have working sort of via a mess of busses, and concat /extract array modules etc.
-Cook me dinner.

Annoying things:
-Busses. They only send values when changed. This keeps making me very very frustrated. Need a way in HH to request busses send current values.
-Empty parameter names in VST. Does not show as a parameter name and causes name index malfunctions.
-Can't figure out how to do the learn reset thing in this patch without the annoying double press of learn switch for next learn.
-Cold pizza

http://www.sensomusic.org/forums/upload ... s%20v3.pat

Posted: 24 Oct 2016, 11:02
by oli_lab
gurulogic wrote:-Busses. They only send values when changed. This keeps making me very very frustrated. Need a way in HH to request busses send current values.
definitly an issue on advanced patches

an input " send data" on the bus send modules would be a great improvement, Senso ?

Posted: 24 Oct 2016, 16:30
by gurulogic
I am thinking a button on tbe receive bus to request value. Off topic, will post in feature suggestions.

Posted: 24 Oct 2016, 23:40
by oli_lab
gurulogic wrote:I am thinking a button on tbe receive bus to request value. Off topic, will post in feature suggestions.
great idea !
we need both !