Forum
    • Categories
    • Register
    • Login
    1. Home
    2. JamesC
    J
    • Profile
    • Following 0
    • Followers 0
    • Topics 20
    • Posts 80
    • Groups 0

    JamesC

    @JamesC

    10
    Reputation
    3
    Profile views
    80
    Posts
    0
    Followers
    0
    Following
    Joined
    Last Online

    JamesC Unfollow Follow

    Best posts made by JamesC

    • RE: Notarisation help please!

      It was that certificate that needed the permission change that was the block.

      Honestly thank you so much to all of youf or your help I'm going to put together a post later this week step by step on what I had to do to get it working just incase anyone does face the same issues and at least then it summarised in one central location

      posted in Newbie League
      J
      JamesC
    • RE: Odd complied behavior of VST3 in DAW

      @dannytaurus so just to update on this it was clearly a UI issue as all sound function were working, so after going through part by part it is filter displays that trigger this behavior for me when using more than 1 sampler in a project at this time.

      posted in Newbie League
      J
      JamesC
    • RE: Sampler randomly triggering help!

      @iamlamprey I unplugged all midi devices and then plugged them back in and haven't seen any issue since so bit odd but solved thanks for the help!

      posted in Newbie League
      J
      JamesC
    • RE: Coloured Keys not quite behaving...

      @d-healey Seeing it and what its actually doing makes so much more sense now, thanks so much again for brilliant video!

      posted in Newbie League
      J
      JamesC
    • RE: Automated exporter script for MacOS Help

      @DanH cheers for that the AI heavily judged me for not quite having the correct type of certificate and I was able so far to successfully sign the things!

      @d-healey thanks for your advice of doing it manually first so everythigns in place solid as always!

      posted in Newbie League
      J
      JamesC
    • RE: Issues with Sampler

      @JamesC @d-healey as predicted I missed a step, thanks so much for the videos that you have put out there, should have started with them!

      posted in Newbie League
      J
      JamesC
    • XY Pad with Optional Motion + Speed Control (HISE Script)

      Hey everyone,

      After my question yesterday I wanted to share a the script I’ve been working on. Would love to hear thoughts on updates as to whether this is the most sensible approach. Particular mention should go to @David-Healey whose original XY Pad videos sent me down the rabbit whole with this and did a lot of the heavy lifting!

      Overall it’s an XY Pad that supports:

      • Manual user control via mouse or XY knobs
      • Optional motion driven by a simple sine-wave “LFO”
      • Adjustable motion speed
      • Fully modular and easy to extend

      The idea is that you can move the XY pad automatically, but still allow the user to take manual control at any time.

      Features

      • btnMotion: toggle automatic motion on/off
      • knbMotionSpeed: adjust the speed of the motion
      • Motion is applied as a small offset on top of the manual X/Y position
      • Gains are mapped from the XY pad to two gain modules, with scaling

      How it works

      • baseX/baseY store the manual (user) position
      • lfoX/lfoY store motion offsets generated by the LFO
      • updateXY() combines base + motion values and clamps them 0–1
      • LFO speed is multiplied by motionSpeed for easy adjustment
      /// ===============================
      /// XY PAD STATE
      /// ===============================
      
      // Manual (user) position
      reg baseX = 0.5;
      reg baseY = 0.5;
      
      // Motion offsets
      reg lfoX = 0.0;
      reg lfoY = 0.0;
      
      // Motion enable
      reg motionEnabled = false;
      
      /// Speed
      reg motionSpeed = 1.0;
      
      /// ===============================
      /// COMPONENTS
      /// ===============================
      
      const var xypad = Content.getComponent("xypad");
      const var btnMotion = Content.getComponent("btnMotion");
      const var knbMotionSpeed = Content.getComponent("knbMotionSpeed");
      
      const SIZE = 10;
      
      /// ===============================
      /// GAINS
      /// ===============================
      
      const gains1 = [
      	Synth.getEffect("Simple Gain1"),
      	Synth.getEffect("Simple Gain2")
      ];
      
      /// ===============================
      /// XY PAD CORE CALLBACK
      /// ===============================
      
      xypad.setControlCallback(onxypadControl);
      
      inline function onxypadControl(component, value)
      {
      	local x = component.data.x;
      	local y = component.data.y;
      	
      	local gainX = -50 + (65 * x);
      	local gainY = -50 + (65 * (1 - y));
      	
      	gains1[0].setAttribute(gains1[0].GainValue, gainX);
      	gains1[1].setAttribute(gains1[1].GainValue, gainY);
      	
      	knbxy[0].setValue(x);
      	knbxy[1].setValue(y);
      	
      	component.repaint();
      }
      
      /// ===============================
      /// PAINT ROUTINE
      /// ===============================
      
      xypad.setPaintRoutine(function(g)
      {
      	g.fillAll(this.get("bgColour"));
      	
      	var x = Math.range(this.data.x * this.getWidth(), 0, this.getWidth() - SIZE);
      	var y = Math.range(this.data.y * this.getHeight(), 0, this.getHeight() - SIZE);
      	
      	g.setColour(this.get("itemColour"));
      	g.fillEllipse([x, y, SIZE, SIZE]);
      });
      
      /// ===============================
      /// CENTRAL XY UPDATE
      /// ===============================
      
      inline function updateXY()
      {
      	local modX = motionEnabled ? lfoX : 0.0;
      	local modY = motionEnabled ? lfoY : 0.0;
      	
      	xypad.data.x = Math.range(baseX + modX, 0, 1);
      	xypad.data.y = Math.range(baseY + modY, 0, 1);
      	
      	xypad.changed();
      }
      
      /// ===============================
      /// MOUSE INPUT
      /// ===============================
      
      xypad.setMouseCallback(function(event)
      {
      	if (event.clicked || event.drag)
      	{
      		baseX = Math.range(event.x / this.getWidth(), 0, 1);
      		baseY = Math.range(event.y / this.getHeight(), 0, 1);
      		
      		updateXY();
      	}
      });
      
      /// ===============================
      /// XY KNOBS
      /// ===============================
      
      const knbxy = [];
      
      for (i = 0; i < 2; i++)
      {
      	knbxy.push(Content.getComponent("knbxy" + i));
      	knbxy[i].setControlCallback(onknbxyControl);
      }
      
      inline function onknbxyControl(component, value)
      {
      	baseX = knbxy[0].getValue();
      	baseY = knbxy[1].getValue();
      	
      	updateXY();
      }
      
      /// ===============================
      /// MOTION BUTTON
      /// ===============================
      
      
      inline function onbtnMotionControl(component, value)
      {
      	motionEnabled = value;
      };
      
      Content.getComponent("btnMotion").setControlCallback(onbtnMotionControl);
      
      /// ===============================
      /// SPEED CONTROL
      /// ===============================
      
      
      inline function onknbMotionSpeedControl(component, value)
      {
      	motionSpeed = value;
      };
      
      Content.getComponent("knbMotionSpeed").setControlCallback(onknbMotionSpeedControl);
      
      
      /// ===============================
      /// LFO ENGINE
      /// ===============================
      
      const LFO_RATE_X = 0.35;
      const LFO_RATE_Y = 0.25;
      const LFO_DEPTH = 0.25;
      
      reg phaseX = 0.0;
      reg phaseY = 0.0;
      
      xypad.startTimer(30);
      
      xypad.setTimerCallback(function()
      {
      	phaseX += LFO_RATE_X * motionSpeed * 0.03;
      	phaseY += LFO_RATE_Y * motionSpeed * 0.03;
      	
      	if (phaseX > 1.0) phaseX -= 1.0;
      	if (phaseY > 1.0) phaseY -= 1.0;
      	
      	var waveX = Math.sin(phaseX * Math.PI * 2);
      	var waveY = Math.sin(phaseY * Math.PI * 2);
      	
      	lfoX = waveX * LFO_DEPTH * 0.5;
      	lfoY = waveY * LFO_DEPTH * 0.5;
      	
      	updateXY();
      });
      
      posted in Scripting
      J
      JamesC
    • RE: XY Pad Gain Scaling...

      @JamesC So for those interested this is how I solved it in the end with a bit of AI help:

      inline function onxypadControl(component, value)
      {
      	local x = component.data.x;
      	local y = component.data.y;
      	
      	local gainX = -40 + (60 * x);
      	local gainY = -40 + (60 * (1 - y));
      	
      	gains1[0].setAttribute(gains1[0].GainValue, gainX);
      	gains1[1].setAttribute(gains1[1].GainValue, gainY);
      	
      	gains2[0].setAttribute(gains2[0].GainValue, gainX);
      	gains2[1].setAttribute(gains2[1].GainValue, gainY);
      	
      	knbxy[0].setValue(x);
      	knbxy[1].setValue(y);
      	
      	component.repaint();
      	
      }
      
      posted in Scripting
      J
      JamesC

    Latest posts made by JamesC

    • RE: Odd complied behavior of VST3 in DAW

      @dannytaurus so just to update on this it was clearly a UI issue as all sound function were working, so after going through part by part it is filter displays that trigger this behavior for me when using more than 1 sampler in a project at this time.

      posted in Newbie League
      J
      JamesC
    • RE: XY Pad with Optional Motion + Speed Control (HISE Script)

      @xm4ddy Thanks for this I will have to drop it in and see how it works. Plenty to learn still!

      posted in Scripting
      J
      JamesC
    • XY Pad with Optional Motion + Speed Control (HISE Script)

      Hey everyone,

      After my question yesterday I wanted to share a the script I’ve been working on. Would love to hear thoughts on updates as to whether this is the most sensible approach. Particular mention should go to @David-Healey whose original XY Pad videos sent me down the rabbit whole with this and did a lot of the heavy lifting!

      Overall it’s an XY Pad that supports:

      • Manual user control via mouse or XY knobs
      • Optional motion driven by a simple sine-wave “LFO”
      • Adjustable motion speed
      • Fully modular and easy to extend

      The idea is that you can move the XY pad automatically, but still allow the user to take manual control at any time.

      Features

      • btnMotion: toggle automatic motion on/off
      • knbMotionSpeed: adjust the speed of the motion
      • Motion is applied as a small offset on top of the manual X/Y position
      • Gains are mapped from the XY pad to two gain modules, with scaling

      How it works

      • baseX/baseY store the manual (user) position
      • lfoX/lfoY store motion offsets generated by the LFO
      • updateXY() combines base + motion values and clamps them 0–1
      • LFO speed is multiplied by motionSpeed for easy adjustment
      /// ===============================
      /// XY PAD STATE
      /// ===============================
      
      // Manual (user) position
      reg baseX = 0.5;
      reg baseY = 0.5;
      
      // Motion offsets
      reg lfoX = 0.0;
      reg lfoY = 0.0;
      
      // Motion enable
      reg motionEnabled = false;
      
      /// Speed
      reg motionSpeed = 1.0;
      
      /// ===============================
      /// COMPONENTS
      /// ===============================
      
      const var xypad = Content.getComponent("xypad");
      const var btnMotion = Content.getComponent("btnMotion");
      const var knbMotionSpeed = Content.getComponent("knbMotionSpeed");
      
      const SIZE = 10;
      
      /// ===============================
      /// GAINS
      /// ===============================
      
      const gains1 = [
      	Synth.getEffect("Simple Gain1"),
      	Synth.getEffect("Simple Gain2")
      ];
      
      /// ===============================
      /// XY PAD CORE CALLBACK
      /// ===============================
      
      xypad.setControlCallback(onxypadControl);
      
      inline function onxypadControl(component, value)
      {
      	local x = component.data.x;
      	local y = component.data.y;
      	
      	local gainX = -50 + (65 * x);
      	local gainY = -50 + (65 * (1 - y));
      	
      	gains1[0].setAttribute(gains1[0].GainValue, gainX);
      	gains1[1].setAttribute(gains1[1].GainValue, gainY);
      	
      	knbxy[0].setValue(x);
      	knbxy[1].setValue(y);
      	
      	component.repaint();
      }
      
      /// ===============================
      /// PAINT ROUTINE
      /// ===============================
      
      xypad.setPaintRoutine(function(g)
      {
      	g.fillAll(this.get("bgColour"));
      	
      	var x = Math.range(this.data.x * this.getWidth(), 0, this.getWidth() - SIZE);
      	var y = Math.range(this.data.y * this.getHeight(), 0, this.getHeight() - SIZE);
      	
      	g.setColour(this.get("itemColour"));
      	g.fillEllipse([x, y, SIZE, SIZE]);
      });
      
      /// ===============================
      /// CENTRAL XY UPDATE
      /// ===============================
      
      inline function updateXY()
      {
      	local modX = motionEnabled ? lfoX : 0.0;
      	local modY = motionEnabled ? lfoY : 0.0;
      	
      	xypad.data.x = Math.range(baseX + modX, 0, 1);
      	xypad.data.y = Math.range(baseY + modY, 0, 1);
      	
      	xypad.changed();
      }
      
      /// ===============================
      /// MOUSE INPUT
      /// ===============================
      
      xypad.setMouseCallback(function(event)
      {
      	if (event.clicked || event.drag)
      	{
      		baseX = Math.range(event.x / this.getWidth(), 0, 1);
      		baseY = Math.range(event.y / this.getHeight(), 0, 1);
      		
      		updateXY();
      	}
      });
      
      /// ===============================
      /// XY KNOBS
      /// ===============================
      
      const knbxy = [];
      
      for (i = 0; i < 2; i++)
      {
      	knbxy.push(Content.getComponent("knbxy" + i));
      	knbxy[i].setControlCallback(onknbxyControl);
      }
      
      inline function onknbxyControl(component, value)
      {
      	baseX = knbxy[0].getValue();
      	baseY = knbxy[1].getValue();
      	
      	updateXY();
      }
      
      /// ===============================
      /// MOTION BUTTON
      /// ===============================
      
      
      inline function onbtnMotionControl(component, value)
      {
      	motionEnabled = value;
      };
      
      Content.getComponent("btnMotion").setControlCallback(onbtnMotionControl);
      
      /// ===============================
      /// SPEED CONTROL
      /// ===============================
      
      
      inline function onknbMotionSpeedControl(component, value)
      {
      	motionSpeed = value;
      };
      
      Content.getComponent("knbMotionSpeed").setControlCallback(onknbMotionSpeedControl);
      
      
      /// ===============================
      /// LFO ENGINE
      /// ===============================
      
      const LFO_RATE_X = 0.35;
      const LFO_RATE_Y = 0.25;
      const LFO_DEPTH = 0.25;
      
      reg phaseX = 0.0;
      reg phaseY = 0.0;
      
      xypad.startTimer(30);
      
      xypad.setTimerCallback(function()
      {
      	phaseX += LFO_RATE_X * motionSpeed * 0.03;
      	phaseY += LFO_RATE_Y * motionSpeed * 0.03;
      	
      	if (phaseX > 1.0) phaseX -= 1.0;
      	if (phaseY > 1.0) phaseY -= 1.0;
      	
      	var waveX = Math.sin(phaseX * Math.PI * 2);
      	var waveY = Math.sin(phaseY * Math.PI * 2);
      	
      	lfoX = waveX * LFO_DEPTH * 0.5;
      	lfoY = waveY * LFO_DEPTH * 0.5;
      	
      	updateXY();
      });
      
      posted in Scripting
      J
      JamesC
    • RE: XY Pad Movement?

      @David-Healey no worries if I know its possible will find out!

      posted in General Questions
      J
      JamesC
    • XY Pad Movement?

      If I wanted the knobs that control X & Y (independently) to randomly cycle over a constant period of time allowing similar to that of say an LFO Mod is it possible to do this and how would be best to approach doing this?

      Thanks

      posted in General Questions
      J
      JamesC
    • RE: Odd complied behavior of VST3 in DAW

      @dannytaurus Yes both Logic and cubase, I will download reaper to see, yes started with a clean build each time

      posted in Newbie League
      J
      JamesC
    • RE: Odd complied behavior of VST3 in DAW

      @David-Healey no deliberately not updated either cubase or logic

      posted in Newbie League
      J
      JamesC
    • RE: Odd complied behavior of VST3 in DAW

      @JamesC No I've deliberately not done that as not really at a point it would be sensible to do so so not touched that side of things at all.

      posted in Newbie League
      J
      JamesC
    • Odd complied behavior of VST3 in DAW

      Evening

      Hope everyone is well! An odd one here I've a compiled project which has been working fine and tested made some adjustments and since that when the interface is open for plugin in DAW the rest of DAW does not function but is frozen until plugin interface is closed.

      Initially I thought changes we made were the cause of this so I rolled back but am now having the same issue on the older version also.

      Has anyone come across this and know what it might be that is triggering this kind of behavior?

      Thanks

      posted in Newbie League
      J
      JamesC
    • RE: XY Pad Gain Scaling...

      @JamesC So for those interested this is how I solved it in the end with a bit of AI help:

      inline function onxypadControl(component, value)
      {
      	local x = component.data.x;
      	local y = component.data.y;
      	
      	local gainX = -40 + (60 * x);
      	local gainY = -40 + (60 * (1 - y));
      	
      	gains1[0].setAttribute(gains1[0].GainValue, gainX);
      	gains1[1].setAttribute(gains1[1].GainValue, gainY);
      	
      	gains2[0].setAttribute(gains2[0].GainValue, gainX);
      	gains2[1].setAttribute(gains2[1].GainValue, gainY);
      	
      	knbxy[0].setValue(x);
      	knbxy[1].setValue(y);
      	
      	component.repaint();
      	
      }
      
      posted in Scripting
      J
      JamesC