Old 01-10-2022, 06:08 AM   #1
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default How to set a parameter on every track?

Hi, can someone please give me a script that does the following, or point me in the direction of the API functions I need to read up on (and how to do a for loop in Lua/Eel). I can program, but never used Reascript before:


for each track
----for each FX parameter (in every VST)
--------if name == 'Tight'
------------parameter = 1
richardj is offline   Reply With Quote
Old 01-10-2022, 06:51 AM   #2
sockmonkey72
Human being with feelings
 
sockmonkey72's Avatar
 
Join Date: Sep 2021
Location: Berlin
Posts: 1,935
Default

Quote:
Originally Posted by richardj View Post
Hi, can someone please give me a script that does the following, or point me in the direction of the API functions I need to read up on (and how to do a for loop in Lua/Eel). I can program, but never used Reascript before:


for each track
----for each FX parameter (in every VST)
--------if name == 'Tight'
------------parameter = 1
Pretty much just like you said:

Code:
// SetNamedParameterValues.eel
// Jeremy Bernstein / sockmonkey72

theValue = 1;

ct = CountTracks(0);
i = 0;
loop(ct,
  tr = GetTrack(0, i);
  tr ? (
    fxct = TrackFX_GetCount(tr);
    j = 0;
    loop(fxct,
      paramct = TrackFX_GetNumParams(tr, j);
      keepGoing = 1;
      k = 0;
      while (
        TrackFX_GetParamName(tr, j, k, #paramName);
        match("Bypass", #paramName) ? (
          TrackFX_SetParam(tr, j, k, theValue);
          keepGoing = 0;
        );
        k += 1;
        keepGoing;
      );
      j += 1;
    );
  );
  i += 1;
);
sockmonkey72 is offline   Reply With Quote
Old 01-10-2022, 07:13 AM   #3
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default

Thanks. I renamed your variables so I could understand what the script is doing, but I get an error when I try to run it.

First I got an error like "SetNamedParamaterValue.eel:4 Syntax error <valueToSet = 0>", but that vanished when I reloaded the script (weird).

And now I get the error "SetNamedParamaterValue.eel:17: 'loop' undefined: ' <!> loop'"

Code:
// SetNamedParameterValues.eel
// Jeremy Bernstein / sockmonkey72

parameterToSet = "Tight Toggle";
valueToSet = 0;

numberOfTracks = CountTracks(0);
currentTrackNumber = 0;
loop
(
	numberOfTracks,
	currentTrack = GetTrack(0, currentTrackNumber);
	currentTrack ?
	(
		numberOfFX = TrackFX_GetCount(currentTrack);
		currentFXNumber = 0;
		loop
		(
			numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
			keepGoing = 1;
			currentParameterNumber = 0;
			while
			(
				TrackFX_GetParamName(currentTrack, currentFXNumber, currentParameterNumber, parameterToSet);
				match("Bypass", parameterToSet) ?
				(
					TrackFX_SetParam(currentTrack, currentFXNumber, currentParameterNumber, valueToSet);
					keepGoing = 0;
				);
				currentParameterNumber += 1;
				keepGoing;
			);
			currentFXNumber += 1;
		);
	);
	currentTrackNumber += 1;
);

Last edited by richardj; 01-10-2022 at 07:21 AM.
richardj is offline   Reply With Quote
Old 01-10-2022, 07:22 AM   #4
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default

Also, you never seem to use numberOfParamters (paramct), I think this code will get stuck in an endless loop if it finds a track without a matching parameter because of this.
richardj is offline   Reply With Quote
Old 01-10-2022, 07:25 AM   #5
sockmonkey72
Human being with feelings
 
sockmonkey72's Avatar
 
Join Date: Sep 2021
Location: Berlin
Posts: 1,935
Default

Quote:
Originally Posted by richardj View Post
Also, you never seem to use numberOfParamters (paramct), I think this code will get stuck in an endless loop if it finds a track without a matching parameter because of this.
You're right, yes, sorry about that -- I changed strategies halfway through and forgot to fix that.
sockmonkey72 is offline   Reply With Quote
Old 01-10-2022, 07:28 AM   #6
sockmonkey72
Human being with feelings
 
sockmonkey72's Avatar
 
Join Date: Sep 2021
Location: Berlin
Posts: 1,935
Default

Updated code with your changes and stuff fixed

Code:
// SetNamedParameterValues.eel
// Jeremy Bernstein / sockmonkey72

parameterToSet = "Bypass";
valueToSet = 0;

numberOfTracks = CountTracks(0);
currentTrackNumber = 0;
loop
(
  numberOfTracks,
  currentTrack = GetTrack(0, currentTrackNumber);
  currentTrack ?
  (
    numberOfFX = TrackFX_GetCount(currentTrack);
    currentFXNumber = 0;
    loop(
      numberOfFX,
      numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
      keepGoing = 1;
      currentParameterNumber = 0;
      
      while
      (
        TrackFX_GetParamName(currentTrack, currentFXNumber, currentParameterNumber, #parameterName);
        match(parameterToSet, #parameterName) ?
        (
          TrackFX_SetParam(currentTrack, currentFXNumber, currentParameterNumber, valueToSet);
          keepGoing = 0;
        );
        currentParameterNumber += 1;
        currentParameterNumber >= numberOfParams ? keepGoing = 0;
        keepGoing;
      );
      currentFXNumber += 1;
    );
  );
  currentTrackNumber += 1;
);
sockmonkey72 is offline   Reply With Quote
Old 01-10-2022, 07:36 AM   #7
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default

Thank you! This will save me literally hours of time instead of linking CC parameters to MIDI manually.

But one final question please, my script still gives a syntax error on loop, while yours works, but I can't see the difference - is it somehow my whitespace or what??

YOURS
Code:
parameterToSet = "Tight Toggle";
valueToSet = 1;

numberOfTracks = CountTracks(0);
currentTrackNumber = 0;
loop
(
  numberOfTracks,
  currentTrack = GetTrack(0, currentTrackNumber);
  currentTrack ?
  (
    numberOfFX = TrackFX_GetCount(currentTrack);
    currentFXNumber = 0;
    loop(
      numberOfFX,
      numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
      keepGoing = 1;
      currentParameterNumber = 0;

      while
      (
        TrackFX_GetParamName(currentTrack, currentFXNumber, currentParameterNumber, #parameterName);
        match(parameterToSet, #parameterName) ?
        (
          TrackFX_SetParam(currentTrack, currentFXNumber, currentParameterNumber, valueToSet);
          keepGoing = 0;
        );
        currentParameterNumber += 1;
        currentParameterNumber >= numberOfParams ? keepGoing = 0;
        keepGoing;
      );
      currentFXNumber += 1;
    );
  );
  currentTrackNumber += 1;
);
MINE
Code:
// SetNamedParameterValues.eel
// Jeremy Bernstein / sockmonkey72

parameterToSet = "Tight Toggle";
valueToSet = 0;

numberOfTracks = CountTracks(0);
currentTrackNumber = 0;
loop
(
	numberOfTracks,
	currentTrack = GetTrack(0, currentTrackNumber);
	currentTrack ?
	(
		numberOfFX = TrackFX_GetCount(currentTrack);
		currentFXNumber = 0;
		loop
		(
			numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
			keepGoing = 1;
			currentParameterNumber = 0;
			while
			(
				TrackFX_GetParamName(currentTrack, currentFXNumber, currentParameterNumber, valueToSet);
				match(parameterToSet, #parameterName) ?
				(
					TrackFX_SetParam(currentTrack, currentFXNumber, currentParameterNumber, valueToSet);
					keepGoing = 0;
				);
				currentParameterNumber += 1;
				currentParameterNumber >= numberOfParams ? keepGoing = 0;
				keepGoing;
			);
			currentFXNumber += 1;
		);
	);
	currentTrackNumber += 1;
);
richardj is offline   Reply With Quote
Old 01-10-2022, 07:42 AM   #8
sockmonkey72
Human being with feelings
 
sockmonkey72's Avatar
 
Join Date: Sep 2021
Location: Berlin
Posts: 1,935
Default

MINE
Code:
    loop(
      numberOfFX,
      numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
      keepGoing = 1;
YOURS
Code:
		loop
		(
			numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
			keepGoing = 1;
sockmonkey72 is offline   Reply With Quote
Old 01-28-2022, 01:02 AM   #9
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default

Also, is there a similar way to toggle media playback offset between 0 and -125 in this script please?
richardj is offline   Reply With Quote
Old 01-28-2022, 01:57 AM   #10
sockmonkey72
Human being with feelings
 
sockmonkey72's Avatar
 
Join Date: Sep 2021
Location: Berlin
Posts: 1,935
Default

Quote:
Originally Posted by richardj View Post
Also, is there a similar way to toggle media playback offset between 0 and -125 in this script please?
For every track?
sockmonkey72 is offline   Reply With Quote
Old 01-28-2022, 06:06 AM   #11
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default

Yes, it doesn't even need to be dependent on the Tight parameter. Just want to set all track offsets simultaneously.
richardj is offline   Reply With Quote
Old 01-28-2022, 06:44 AM   #12
sockmonkey72
Human being with feelings
 
sockmonkey72's Avatar
 
Join Date: Sep 2021
Location: Berlin
Posts: 1,935
Default

Quote:
Originally Posted by richardj View Post
Yes, it doesn't even need to be dependent on the Tight parameter. Just want to set all track offsets simultaneously.
voilà!

Code:
// SetNamedParameterValues.eel
// Jeremy Bernstein / sockmonkey72

parameterToSet = "Bypass";
valueToSet = 0;

HasExtState("sockmonkey72_SetNamedParameterValues", "mediaPlayOffsetToggle") ? (
  GetExtState(#retVal, "sockmonkey72_SetNamedParameterValues", "mediaPlayOffsetToggle");
  mediaPlayOffsetToggle = !strcmp(#retVal, "1") ? 0 : 1;
);
(!mediaPlayOffsetToggle) ? mediaPlayOffset = -125; // otherwise initialized to 0
SetExtState("sockmonkey72_SetNamedParameterValues", "mediaPlayOffsetToggle", !mediaPlayOffsetToggle ? "0" : "1", 0); // or could persist between runs (0 -> 1)

numberOfTracks = CountTracks(0);
currentTrackNumber = 0;
loop
(
  numberOfTracks,
  currentTrack = GetTrack(0, currentTrackNumber);
  currentTrack ?
  (
    numberOfFX = TrackFX_GetCount(currentTrack);
    currentFXNumber = 0;
    loop(
      numberOfFX,
      numberOfParams = TrackFX_GetNumParams(currentTrack, currentFXNumber);
      keepGoing = 1;
      currentParameterNumber = 0;
      
      while
      (
        TrackFX_GetParamName(currentTrack, currentFXNumber, currentParameterNumber, #parameterName);
        match(parameterToSet, #parameterName) ?
        (
          TrackFX_SetParam(currentTrack, currentFXNumber, currentParameterNumber, valueToSet);
          keepGoing = 0;
        );
        currentParameterNumber += 1;
        currentParameterNumber >= numberOfParams ? keepGoing = 0;
        keepGoing;
      );
      currentFXNumber += 1;
    );
    SetMediaTrackInfo_Value(currentTrack, "I_PLAY_OFFSET_FLAG", 2); // offset in samples
    SetMediaTrackInfo_Value(currentTrack, "D_PLAY_OFFSET", mediaPlayOffset);
  );
  currentTrackNumber += 1;
);
sockmonkey72 is offline   Reply With Quote
Old 01-28-2022, 11:49 AM   #13
richardj
Human being with feelings
 
Join Date: Nov 2012
Posts: 178
Default

Thanks again
richardj 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 05:17 PM.


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