Forum
    • Categories
    • Register
    • Login
    1. Home
    2. JamesC
    3. Posts
    J
    • Profile
    • Following 0
    • Followers 0
    • Topics 18
    • Posts 75
    • Groups 0

    Posts

    Recent Best Controversial
    • 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
    • XY Pad Gain Scaling...

      Morning all hope you are all enjoying the holidays still.

      I've got an XY Pad in a project that in itself is working nicely doing what it should and has a knob assigned to X axis and one to Y axis as you would expect, I'm wanting to control the gain on 4 simple gains 2 on the X 2 on the Y which again I've got working as it should, I'm just not sure to the maths for the values currently I've got it set to this:

      inline function onxypadControl(component, value)
      {
      	local x = component.data.x;
      	local y = component.data.y;
      	
      	gains1[0].setAttribute(gains1[0].GainValue, 36 * x);
      	gains1[1].setAttribute(gains1[1].GainValue, 36 - 36 * y);
      	
      	gains2[0].setAttribute(gains2[0].GainValue, 36 * x);
      	gains2[1].setAttribute(gains2[1].GainValue, 36 - 36 * y);
      	
      	knbxy[0].setValue(x);
      	knbxy[1].setValue(y);
      	
      	component.repaint();
      	
      }
      

      Which works to set the gain between 0 and 36. Now 36db is going to be way too loud for whats going on here so yes I could reduce that but also gain running right down to -100 whats the easiest way for me be able to include some of that in the range essentially looking at -30 to 20 or some such or in other words almost barely noticeable to packs some punch if you want.

      posted in Scripting
      J
      JamesC
    • RE: Custom Display panel questions...

      @David-Healey I'm not sure I've tried to get it to print some info to console for me but stuck at this point. Here is the full code if that helps shed any further light:

      ///Convo Reverb
      const var ConvolutionReverb1 = Synth.getAudioSampleProcessor("Convolution Reverb1");
      const var irs = Engine.loadAudioFilesIntoPool();
      
      const var rvbnextbtn = Content.getComponent("rvbnextbtn");
      const var rvbprevbtn = Content.getComponent("rvbprevbtn");
      
      // Track current IR
      var currentIRIndex = 0;
      
      ConvolutionReverb1.setFile(irs[currentIRIndex]);
      
      inline function onrvbnextbtnControl(component, value)
      {
          if (value)
          {
              currentIRIndex++;
      
              if (currentIRIndex >= irs.length)
                  currentIRIndex = 0; 
      
              ConvolutionReverb1.setFile(irs[currentIRIndex]);
          }
      }
      
      inline function onrvbprevbtnControl(component, value)
      {
          if (value)
          {
              currentIRIndex--;
      
              if (currentIRIndex < 0)
                  currentIRIndex = irs.length - 1; 
      
              ConvolutionReverb1.setFile(irs[currentIRIndex]);
          }
      }
      
      rvbnextbtn.setControlCallback(onrvbnextbtnControl);
      rvbprevbtn.setControlCallback(onrvbprevbtnControl);
      
      const lafrvbnextbtn = Content.createLocalLookAndFeel();
      rvbnextbtn.setLocalLookAndFeel(lafrvbnextbtn);
      
      lafrvbnextbtn.registerFunction("drawToggleButton", function(g, obj)
      	{
      		var c = obj.area;
      		
      		g.setFont("phosphor", 30);
      		g.setColour(obj.textColour);
      		g.drawAlignedText("\ue02e", c, "centred");
      	});
      
      const lafrvbprevbtn = Content.createLocalLookAndFeel();
      rvbprevbtn.setLocalLookAndFeel(lafrvbprevbtn);
      	
      	lafrvbprevbtn.registerFunction("drawToggleButton", function(g, obj)
      	{
      		var c = obj.area;
      		
      		g.setFont("phosphor", 30);
      		g.setColour(obj.textColour);
      		g.drawAlignedText("\ue05a", c, "centred");
      	});
      
      const var rvbfilename = Content.getComponent("rvbfilename");
      
      inline function onrvbfilenameControl(component, value)
      {
      	local currentReverb = ConvolutionReverb1.getCurrentlyLoadedFile();
      	    if (currentReverb == "")
      	    {
      	        rvbfilename.set("text", currentReverb);
      	    }
      	    else
      	    {
      	        rvbfilename.set("text", currentReverb);
      	    }
      	   rvbfilename.repaint();
      };
      
      Content.getComponent("rvbfilename").setControlCallback(onrvbfilenameControl);
      
      rvbfilename.setPaintRoutine(function(g)
      {
          var a = this.getLocalBounds(0);
          var cornerRadius = 4;
          
      
          // Text color
          if (isContainerOpen || isHovered)
          {
              g.setColour(0xFFFFFFFF);
          }
          else
          {
              g.setColour(0xFFFFFFFF);
          }
      
          // IR text
          var textArea = [a[0], a[1], a[2], a[3]];
          g.setFont("font", 20);
          if (currentReverb == "")
          {
              g.drawAlignedText("Default", textArea, "centred");
          }
          else
          {
      
              g.drawAlignedText(currentReverb, textArea, "centred");
          }
      });
      
      
      posted in Scripting
      J
      JamesC
    • RE: Custom Display panel questions...

      @dannytaurus

      Thanks for that buttons now working as I wanted now working on the text appearing, I can't quite work out what I've missed, currently it displays undefined:

      Screenshot 2025-12-19 054159.png

      This is the current code in respect of the text:

      const var rvbfilename = Content.getComponent("rvbfilename");
      
      inline function onrvbfilenameControl(component, value)
      {
      	local currentReverb = ConvolutionReverb1.getCurrentlyLoadedFile();
      	    if (currentReverb == "")
      	    {
      	        rvbfilename.set("text", currentReverb);
      	    }
      	    else
      	    {
      	        rvbfilename.set("text", currentReverb);
      	    }
      	   rvbfilename.repaint();
      };
      
      Content.getComponent("rvbfilename").setControlCallback(onrvbfilenameControl);
      
      rvbfilename.setPaintRoutine(function(g)
      {
          var a = this.getLocalBounds(0);
          var cornerRadius = 4;
          
      
          // Text color
          if (isContainerOpen || isHovered)
          {
              g.setColour(0xFFFFFFFF);
          }
          else
          {
              g.setColour(0xFFFFFFFF);
          }
      
          // IR text
          var textArea = [a[0], a[1], a[2], a[3]];
          g.setFont("font", 20);
          if (currentReverb == "")
          {
              g.drawAlignedText("Default", textArea, "centred");
          }
          else
          {
              g.drawAlignedText(currentReverb, textArea, "centred");
          }
      });
      
      posted in Scripting
      J
      JamesC
    • RE: Custom Display panel questions...

      @JamesC Nice its always the simplest thing here's what I ended up doing in case anyone else needs it and for any general feedback:

      const var ConvolutionReverb1 = Synth.getAudioSampleProcessor("Convolution Reverb1");
      const var irs = Engine.loadAudioFilesIntoPool();
      
      const var rvbnextbtn = Content.getComponent("rvbnextbtn");
      const var rvbprevbtn = Content.getComponent("rvbprevbtn");
      
      // Track current IR
      var currentIRIndex = 0;
      
      ConvolutionReverb1.setFile(irs[currentIRIndex]);
      
      inline function onrvbnextbtnControl(component, value)
      {
          if (value)
          {
              currentIRIndex++;
      
              if (currentIRIndex >= irs.length)
                  currentIRIndex = 0; 
      
              ConvolutionReverb1.setFile(irs[currentIRIndex]);
          }
      }
      
      inline function onrvbprevbtnControl(component, value)
      {
          if (value)
          {
              currentIRIndex--;
      
              if (currentIRIndex < 0)
                  currentIRIndex = irs.length - 1; 
      
              ConvolutionReverb1.setFile(irs[currentIRIndex]);
          }
      }
      
      rvbnextbtn.setControlCallback(onrvbnextbtnControl);
      rvbprevbtn.setControlCallback(onrvbprevbtnControl);
      

      Now all becomes about show the curently loaded file name in the panel!

      posted in Scripting
      J
      JamesC
    • Custom Display panel questions...

      Happy holidays all!

      Haven't been able to spend as much time as I would like working on projects and ideas but I was pleased I managed to create a custom preset bar that would display the loaded preset (if you click that text it opens the preset browser, as well as having next and previous buttons) its not the most sophisticated but it works:

      Screenshot 2025-12-18 200257.png

      I know this can be done with a combo box (I've got that set up atm) but in order to keep the UI consistent I'm looking to create essentially the same but that using the buttons will cycle through the various IR files in the folder for the Convolution Reverb.

      Firstly is this possible? Can it be built onto what I've already done with the combo box and then making the combox not visible but behind the scenes? I know I can essentially recycle the look and feel bits and pieces I've done in terms of design its the under the hood bits and pieces that I can't envision in my head.

      As always thanks for your help/responses in advance!

      posted in Scripting
      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: Sampler randomly triggering help!

      @iamlamprey Oh wow ok interesting will send it to my Mac and see if it happens there as well then!

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

      @d-healey Incoming don't judge my script too hard...

      HiseSnippet 7636.3oc68rDajibcrGMbmQ87e2wqcLhQnUlDziWsx8O8yShGpu6nLRynUs1Y8h8KUyp6l6vlrGR1RirylHXjCN.Av4pu4aA4RPtlaBwNWB7sEH.4lWjqAH60.Dfj5C+TEIKxhsnlcViHLCjX848qd0qdu56tN1cAtt1NRUpt+wi.RUtpbmis7Fr1.MCKosVWpxqKuoiVWuwN.ckN1iszOvVyQWZ0iGo45BzkpTYp2BU1JSeQI7Oe48WUyTypKHJIIomXazErswPCunT2U8gFllapoC12XHUoaqtUWaq0rMsGCoqojqKMRq6S05CdjFpXWPV5AZtCjp78jmuYqts0WTuYy4WdgtZK.VtmVudMZo2t8BKsbiVKq0doE.0mWpxqrgtgmsSGOMOfqTkKtps9wcFXejEAAOwv03.S.5iFRcfXlj7l1l5HVDkpzZCLL02MPf4JIUQd2Hw2TDw2sk2wP2HL8Hw3MwYnDUCZAXkKvRdSwPdMnIu5TjWJjTEJR5hDR5Vxc55XLxKJGD8bE4sr7.N8zfsSzjBorRW3ilUdMaXIr7lan1SAa5.+HrF0ZTud8YUVnd86dupUgMVtdJGp4nzQa3HSfSCk+TErVzb8AdXZD+UsYBxeF1p8DfocWCui2wVeroFTNv.f80frdHwWalfRqDUbJ34RPwV5tzvXK8sMb8BI.T4YJNpvu+GBAROaGkZF5JFVTP5tUmNnbyMZr6fZgv0GdvZbWDI78+9e+QNPxSSejlEvjhEwe6mGDWAhVj7wd3HaK3G0lgtPXVhNg4bAdaC+sgU+0zLMO.1knVuwVc8LrspY3tKoTvbua0eR0oM5oT66xl5zSCgvCAGS5X4VChfOymn2zGNtUMrLMr.JA.VIVUPflHhfLQ86oXn7mnzrwRn+3MdCDJ1vpOr9yQWsZFyp3Cf4NxvavJliFnUKHkCLgLxrJ0mqMRBNc1fGhcR9tTMPnlGbNXl1cNC2GY6Adz3gG.b1QazHfdMi6hJyjPbiAHZqIl1l9yph92zU+LrPS4Ic1W4cgMEizFAbnZqOz0C05z2AYsjaiMSovs1LoLGpcaqgPqd0l4mr6dO9Oai01+i27wau9F68YrEbjU+YlUAAuiBHlT.Gjo2EZKxaO6wdPgPjpCQeAQ2ZPZ0afgKhP21tql4pnZ5VqNogo+b5NZG4SRLXaVEMnTB9OJUJrzYeCOS.qjwCkTVBEbABX.7G4HJ7.O2iRHjR8Ef2OnX7NAIypbPR9FwMZVGqrOjrnX8tjjQDKWtmpL9VzB+NKY.cw7kCYAIAjFcKfzfFUypzkUffkH6N1xvcfRGHbnUFFgS1EkJeKhQkgXPL56rjHGXzGWliFX3ABjIYAKAjI5EPlPipYUzSpj3KRhoiPpVlpHQEghGxSAgpTLxhz.i.RBPgkD9JGfjBhUVuydDMCWJAgV1ZEZQMhZSltPRHH.e2q.7sVPieOVdNhG0ylG0inP8IiGSBgRlG0ykGcylGcinP2IiGSBgRlGcykGcxlGchnPmIiGSBgRlGc3viv9mHFwA52shWxQyPom6vYAEJbTnfDxa.svxQMhFefIfDYPAGSKDYypLHgbAGIKvItAbSRxYJUnJClOn9NKYBcw7EIYAoRVfPipzjGg5ItwFj2a.L4AvvnytWBawvbCaREtWS9Prj6EECgYXwPyyC5WdNCwEUFxnTQeW7A6x.Vk8vdTnJKal.SflKHGKmTEhX8iJghaEMSnU1VToQVVxAMHRxQJDVDBUG9Ywk.bgTYy8QHJswTBrch856dzVOEzXgYJ8sMOilKDAlkrXxTbKFlhXxvLd+byyhQirgVYKJDztgoPFNLSzW27LY5HO3U1Birsd.6AsG3PfyAw8IyAmZl9dDUDeSfAelkLgpTg1R4AlR1sCJDklWG9xA23gOBcEQGXpcbNys.coHgASmRwmegbfWIqlvhtrBzzIGAQPAHgJ5Lgre5PorC4zIe98HfW17aPAvTZvGEleSGJkL+FhjzLCzYf1Hfxtn0HPY0wdd1VzKECJS75GvUNDUjn0CAG0NJ8Cv.jen6QkAK.RrvA1VDRBUcGayZcCp6rPbXNFfDGJvehHh4fiEdTPwIk4dnoZmBUHwqeIBWCjXHJXVG2v5v3QmArNDXZOBjoIR5Bg4L5DxRIgob95HYCrR1XICxRyb4Sf5BwDIG5uVZYJRnKDYh0oRHyImmtbAyPel.qjEILHKMQxFucBkjmks5wyhZKeVtpDOiQYHQUKaEfmwkOWGMRQbVEO7QlbaXIHF0C9JKdNpPAiKvAFkLyGglz3ehiDvgBsGoaacDkP.x3GZaNFgYh6DLq87Ji0MrIKxK0JPSUGE+JEaEs6N7.CG9SLFJWpZXfW+Y+UmDIawncSCnWMaY4YuqMzfHpzIswhgTVlXwqIJ9KkeHThTc5oSxvnlBDxpAoi2GW12rwGhDdPTlICjt4XZZByinuQEs1LvgOG5hTJvLOdkbeNZkbMvKhKofZ55aAKVMkmOmCXjIZ2FjPICh5v7l6HsCmIX02wZAIcHzT.2AMi47l4YvUvrfUYGsfXNAZ1C.zOH+XHYJFg1YRp3hhbgXYKPXQXVy9h.ZENwZIcNCZEYAqxdJXDSqvQLsBmjsgNmMsh7gXYKPDVqPenwyyIdofRPFQK3qhGwDG3T1wLEhlTBhXWG.DcICefj9tYF+.UYXCfXGf03UyN9gnhLS5irw3TeCtgOPQC7heHBUBD9PiXiiS1bCl18syaWafJC8ds.8cN6bEbQX2wFoBkRdu6PipT25NqicS5HK+8ymxNZib46I.YaXMTaTFNDDVFZ+BhB3DmKBKHeuH6pqncWGLc7l2KgGVg.MKGsnnNTjgzov5SRDQL2mZaXUalOvh3VQpdcEmgR24qf863bZtA6Tv6h0IB4rZQnk10qowNewLiVnpsplSVSmkeQPbZzW4o8zetdFllqXZVKP+o1LGzmrC3vB.XIvMq3sKWTYPxM1Rgfydftd0d+5Xcpfx9tF5dCpcWkuGIEcMOs4F4X2GsfgQk5A.i9CfsxeXflHKKf1hvNI23iXVHIXibmFBY+MA4t94gTjHUA5CIRv.SX5zPov61RjgnTog5yU+dQ4hU2NjrUdgJbLP4dHO0iAXE+eHU1SygHDp0B0YEkAvzEDuT1iHEhHEoTZQaJxG6KvflEUhmUudolmu9MV0Mkr8QF+JVyBuQLo6UfJnTkKxtkmk4ukmo2Q1cI59TEz1ZKKCuGOBXwaeZK42gQRpx2wmpfE0Cu4nut+lilLHfjgtTkqISMiSRXxldmrKI.HtpbzfNE.BcLMzAN9Pfryodpk8AB.ga5CAn8fCrW094XXbcYZCUwgx8TEgStgbvdgv1xtWuIiYtIFHjk6RPFhKTHqTTZP4Nph.ka4yP3kXIMv7dBAlWKTtfWsyD.RsUqWSHA70k82aEmA46sHv3rJf8ACeI7WdeQ.yqR.SFh36Hjj4ZxjYsQTASp8AtjLdVEhW8aKTi70kCVjkIWnNsrtyYp5GA7RV8Vst6ohYHBS9mAcqqHaB54omBGbxGnJlkLGthvejPP3Fxgwzmre1W7i+02WLf3vEHexO+e9eQHfTUFELURN4tev+kP0+RxZoIFdnpXUNsVge1mKXkcSV4d8d8SEqxNIq7I+peEEluHoxWyux3yriubObR3wokPID4yD9PcI8NasN5ukpTwe.a3f3i.NdFH+CprN3Pit.xQZZZ40AtOE5qCrhgt.KU4UXIBbTgADA8ggP54zDvwzeL.6EZXJm9SUOB48ZXBp+b0J2jBkWhGJqJGbLAnv1oNpLXajlCDJTfKNgxhboiUiQepeBpMHr5Wyy+PnQnlMgtRBc4u+9F9MFUkeJ3Xx42KhnTeGJh5u8DUegOQRWU9gA0HHn.j3eg4Wb4V0qKEED.xRQ64at7RsWpUCpzahr.zt4xsWdgEat77Rnonm9n8gaxuvGUQF4F8LPjgiVXlefRi4mq9rnzV2vcDz9wi65ocn+w5AlcOMnyu37219HX0fI0pA96GXP9rQyEweu1XnWwCeKGsQCL55xT00A8zFa5sxnQ.MGzQVDlqmyXRlqhNYRPPsGZ.dXF0magkw+rzR0Wb45KRv19186CieyVGv.Yzg8asAZVn4FARJ3zdGWvSfgGY6PQKgXCl4llZdc7N1LFj1ciflf3o2AESPDVZFj9FV5T3dgpeVL8nu7uNtdzIusZt5hzJZWVPumizx9sGQokc5edrtUReTbJRZ87oHX.mCc8fD.dhMjp7GHmx7t4uxwir5mFGDzwcasC763NsL9uazfh3O4PJh+W9WjOkgzxQ1MwqtcLo+IZI30enZgHslz8d+KYIMAvEg3tobvb+4XejKzR+jn.jzt2UkiBhlhLUna9O4mnVPKepiRvG2Q8vfPDqLkjHljChoBy+bZbuoaQIsSdVBR6Qph0WgILwHBZ2SJbWkh1SnPs0bEnWSl5fNQOLGSi86GmArRv.V4KzQNEDl4qIVbyOmVDcL8GwnHiDTjQRJhkaGELACagwZGMuwN3yhLR1pMD3AXyw.1DODNJA5.0+HamgZlF+Xf9t.mtPfiZybG2qmwyQCJ9GIMzPW2DrqsqAtdgT0u89n439IHWn10dzXn6Ouh71P2ykPIiVceTXO3gUiqP7cSnPLvfDbFTw.qRXMdXGTEbiP2mnh40M0PCZ4m7o+ley+48Mb20bbeCqcCXUxTuLhMQxw0+xxjC6lTJNpHxzVvoi5m7b0gZv7jqTq3NRkReV3vMzsnUkCl6VruLtRW3uAxg0qu5t6nz5iaqTaaa6Qt2UoCz.ZipbxnYPFs4Ui1IqQCd3nAObzfGNZvCGM4gil7vQSd3nIObzhGNZwCGs3giV7vQad3nMObzlGNZyCGyyCGyyCGyyCGyyAGKwAEKwACKwAAKwA9KyA9KyA9KyA9KyA9a9iptCvSyTYWCutC.5UQl0F65ZbHP4Q1VQIaBc+0Y7vvDf89AG4F8omQ2mR+oi1Qges+.nq+AeI0CFjB1WYjIvUsM0YBEAaADUBnM1nt3yoJjGLQS4IdaIRa.5soGEwSMOiJvnyx0vDMYeU4FKs77K0b910WBZBRjgfutL8YUilV2jMTybGwaqznUVIgPNodYemToG881zzx6Eez2GkhOp4RKDmXuh79AGhhBQczdPe5drTGAxWVdE77fJkKkH.2TDRqEsWyGjFoMs7dj4VUpLDjEg1ZSGP2mxRaB1hcIYb7zEUpUU3UnfRsSglBuiZ99D4NDsVeQtIGiH2JsNMzdMbE40O1RaHLz9XtA9ZxAmPRamMrPSDltTgZY3Z.3lxrGiHtc61J+tcOJ+FQF2vecwWwmmS2PvzpDipVWjIBHASGuo8No5t6CgTxPftw3gEwi2e4u3W7uWHOde8vFak2TIx9jXZJeCJMkn5Rhb.MsmcMP8IGRega8dmh8DNxVObrfQTC8AYf+o6GDdgrrh9pbCvn4ohFfgfAHRcvt3Zx8bPy7aH9pHVtZlrb7KUpkuFsZYvfaBoS9pT5j9UjnP9Jx3atMF0u2SkRUCF3DOUs6npSl80mDewAKUUvqKSeb53N15KTqiIWCZ9JgIvYLFR.kzhnjbaZkj.2LJ9XbA0jqZxoNpwrRgWe4ylpy6oNQc33z2J89gkot4UkiNpzb8r5Ep0wz1VCkqARFdtHZluJilI1GRwzKuEsdItdCYutJYLeopl1nm7zDuIGMwu79m6l9mDMwKy2Jo+tPIdHu69WU3Pd4FQa9yw6kEyoBpaiDtywa7HdU+TQh3MlbPrHPhsEddoL.jaJ6esKvM5iLX87BKbdZdtcZgrRGmddXtjimdAZ+N+fy9DQDiZiMaAEgxVjdY7xKZ5TQaglI.gFR5Vxl7imr8YeboXrgvNLEeCtU.GlRxRhLtU5dPi6DwDUGugvDzwZ+dkeUDo2KkiPkge7lbhk7CNe0J+FEX+RVttJEikSUk7lgpj9FfNS5i2HPezGX7hPqLh96qWpe2P1jSbjpw7V+LO71iTET+KkMZKeEvh3p8sBUpJVDfgNYDTsBq+fBK7kE8mIoKab0jR0I8fMDc19n+Q45i9I8NK9nOsHa3xqJGc08HrK5ouoKn44h3c0R77b4zCDwuOhCVUQaRJ71WVpDIskoWmt2mkzxAMBS4xxq6bbw1wa0okXFSnDSV9cAdEQXUUvC..+vpJjH6jmjRLTEOvLFChn4rOwMBAqowokCB7hl2mVfSt.GS5m7vhw2orC5VWkr0Vp72KWckgiFX3M.nAGNo5pZPGlssGVcUfN92qocHn5ZCF6zcP000bdpx9iQ6tzpqO1pOv1p5lF.S8pO.JhNR6X3us5q4TcaiCMr5qrGB.vAXdJ5i2BJS5CfedngITVU0GNuiEbLMkUcLzgYh+v+xyeMCuiIIbjFZLK+s7ysHGdAQF1l4ZxJi3TmD2FYk2LiZeaQOTIEHPl3Li.CPw2QMCAGncqWdbTqXyVHtaHzElHC3ErKKkseIw1w+A2NY7LuW9pYut.m6nxMnDJtrHsGWW1+x56MUPiKUbymvZgelg9+iOlm1WvcEGuQwKesuuo.Gasyj12DpgkpGHTBnhq8Ag3KXsONqv0ouTtBWYbZ.vFPydizITDKmgMR2UExaSliJYFNaRq6bYY7EqFWe8Nelv+jKoFkPtPd7SOw8J8oXT02IGzDtYtvTWYMk8AzE8df6jUXoKBl80JmjIvexEWs4QVJEJjxM8OGpRkHoQuJGp8YIsD3sTkZWhGoIKuCzPGOWg937kXsK.UvclHthb3MCXFSDQ1HJwzTH3lexL8HOVOyIrt3c4EziP5SxME07soolu8Dtomn4TArPdCRpnnRvci4FlxO6ym7sIh5OWcROsL+gbOsLX60EwSOk+g25KJ31zhbYc9lJHZUAKRR2YfaKpdnSp5gm1+qF8PlKDfxVQzoXJh2LRQjLR14klHuVvuNpgd6PMTjTRgH3DbyJyd6LxypXxyL3YTa71Be4RTtJjIX3R3H.lhpjZqVe98OuUQDUUUftcWOzWDLHJhx22j07XnOMB4LvMkc3o+wXMLM8uRRaygm112hUaKii.JkVhH5jhLbbfXj1HHGkTdpeon6GSX+RiBZZ5UeqP8JrLHRwhixoP16thb3kuIOGgggBOIyJyjn7Qc60veVYDSuahlEhxQYkDVQQUQwbv4wjyknkgtMuHF1tVnBHh+nUutB+YWI50Sf6r98nX5Wm9SiK2UNpnytR6lKUegkVd44WL4M8xR0a2bQ3+YtoWtpbyElu9R0q2n4hRT2aCUlRjYQ5JxZ5tI1ZpYOehor0T+zz5FQIAE6nXl2crCzXJURM4RvawdQ6bU4Udv5c1Ce0vPcU6fjnMZ1X4kWX4EE811oYiEZ2bg5KsPqzuscpzgbY6raTmsY9AJyfwuxF9uhDMlAeaxrkkN34vbeSxUXyl1ll1G8t1NO0cjV2vKplpeVZ8ChZzxaoHgFAEZ76qKS+HWbl1XAzjWJKGcZqculI9CdKHau78YMXNflRdkrEXIOdy4cblyftciS2md.KcWf1tLYpNkKcqmPdu+DKuW+En71INcexSmX5dOAn6XTYRdQHeUf52Yd.RU+jIxQEZpUvIHH3VxihPlgt68LSTnXg7Wwt7RR6fxcK4X1JY8PIrRuXmLg1po5eyj30cRehft3+eb+DN+vwIIA02zy7Xg9hTeSOG8sTTlzOWN9cWBsxhw2qB4ntETmWnZam5ndNFNWn1Vos73vQAy7.f9hTays3ZatmKZaSK2YrqGZcsKh9VTs9pauXbdnqUhV1bx7Hcl10BSFdbcF1g3AWbqERWy4bRWK08Rdt5Z4dRhOqKQT5JDkmBWYtcJhtLcyLX3SMyIR2yxo3Trab2qKS+16clhTKNSmgjh+0NL+nvyEeBD7ZrMTzS7quxN15iMI2JfB09NsL3YwaY+D2hMMG+1wS7zbHTK6kkIuyfEY0zi3qLWJ8qVnoVognSsxqKutiV+9H8fMMLgVVHLC6jrr3RMVtd8kpGS7PMWJLyxxUjWZ94Wn0R0arf+jprWpSphuUPGimorwaWz4TIOMOEG0LD0YDsJ8hCS8BJkwbHVvKXwTmjw3ygXJh7lwxg2TElwhcS85Fwke1OskNlVPHv8CpTgHm38XnIGU6yL47dE5Z.mseTKt8iTJFco7SSwVDSOwa3W6fqbX5tfsZzr97KzrwhKjXxlCu7vYTTpJ2XgEWbwlMl2+RD+e6BjtfnGGlNZGB7eewntjsQ4rwygsGtPu.bWwEBqwCsXtVsQEA1iD5AU5UG8V43l.l5F9akPlrhR9w85AYazswc8vJshtd5nXOfEzlQ54sNzcHON40An4zc.5AfhJiM0Nz1AJ21pKEUDQDzYyTswll6p4MHHe16McedcKnbTGrpsidrqj8GMdHQzhpVKxsvN9a7k6dvEp96ie6hpOWqX+LaASGl7GRtI3Mb8VwAnExm9XX1z9UXsHT1d1GsqlN5gWRz5EJtIO0ZnpQxXGaG+Vn34DoUFOm.4bhbgCCDo02hQqWvyMMdz.+Kkad6A2DmvqTtgb+gQW31XGVCGoSpxE22+bLE5vyZCPAHt05nDQ6bZ+LPNeuJzuJWW.5JcdpsPFGfNkeLsq6Ut.6SC0T7eZnpS8zPkxC+jfj3sjwWqnoSiWHEZTR5bgFmZe+FwM50Cz0Kh.un7l+HF4Vog9JxT3+RD7eknayZL1YtcqooBpq1ZJQy6B7VYHTA1itMEZ2GuA5oJGLZLu3oUYJg4qFYyWUDrs+aRcAcq7UiVJ4g4q+NZP2DQQrBsd1A1YuKv+Qb.85nU4BnS7F465nuQDQGfkN9i+W3O9Y1.8cE+LaDjIsV1sCdCUVarygfMdleuTVOUY3eHAQbbFSISAA9pZXLS16E+w+O+22GkPifY14iW6.UTBMokWnDZEOg1zWkRnDlO.nG92IeJJgEBt2weiu3eEWhEiCikhmvxzZTXBKfTk1+WeALTaDPqm9q9veFFrMRPrMRPsMXH2M2b+f84OzJQoo49hVc3JD0gKQ19AXkgvMdAsYP1crK0i.UrcPI0i6Dyl7h58Zhc2FQ8FLsMZPXW2Mc.Oid9cdfQhTggbh1lDTu+R6CfCF14XqtmK1SdQ2p7pACEPc3jvsMoebkXZn7OobrljoSB85gsMTfX0kYLssFNZLzCtsAV8oi1.Y7FSWaYMZLiQ82wErZXDfnqvFMcFC7AGeRpzdfwZTv.11tt1vQP4JcYfcr7MQEtLjnmmdx7H96mXh3HmKYzy.OYBnIhc+SJ7meiokLssGgepbBxCkvFn6x.R9ecWIoZ38wAVCg954f1J9aA4tPCVQRaTxQW+PwxvegLoZyQoFLmrTgel75MlBRoci1lZ1jqmOpWPwD26nTApl71ljhdhcamQgsD23RIyKIWG6dMIUpXGsmBPyvaBvkLiu1pw8cHZbupbGOXucX2s99OSFXMOpGMCZCRrViPCkZhdqsnEHOw1nK.KthRcj5CMLM2TSGfmyep04FErJ8tZx+QykcI.NUc0wP2ncXS8eTEip3NnNR0mx2CLBn4sCYgs7y7xp6s2aAswMJE2ZQwMruCTagwF1Wd+GaAfsmdLp4N1tt8frCFVtLVJG6zmUKEaX2kMMTT0TspnFJnEXjNjQ2.E.ptuHrTmLi3nmWO72Mh8cyXe2J12si887w9dgXeuXz2gOw0HMieOYNuYEIdGfeEw5J.gKNFWpRtpQ+PbRRAOON57dVfq7JIC851xnGtsvzoihEkgRTMNWhF6qAwTW4BTz3MB7cDuHd9wRGeA8noscrsrGMv1xnKqxNT4seefCMEmJaPrLiCbgF.3M.QhTiaF+gpjT1F12xjwoDlgAtiJY+TP4jRvBd6OxD5cyL1PAnWCyM5ZyZ3nPh8FhGmdVpFWyeyGQN3Xu7MWKWOf9HsBu7QfWkrcZdYU9cifcewKsBvqGrl8eUJBubfqwAqEqevSoszr4RgvQY8GWi17zgnafX8XlgP6CFVi.Pma7wIFFqG7b2VZlFJkY4bpemdVNEW0k3AgBIbwWFMNgcyRA4U7uqMEkcC.Eje7+aRmko.QSylY7wtC1mOnGP5WDT4PstN1ebWx6dMhVuLNEHUZ4uOm1A8Mzy1Duz0CgdP9wc6xBpDUr4jVwVSZEaOoUb9IshKLoUbwIshKkeEQN3uxXO6gDiiRR6r6FDEvJQyy6TR+eScdZz.
      
      posted in Newbie League
      J
      JamesC
    • Sampler randomly triggering help!

      No doubt its something I've done but...

      So I've got a sampler set up various sampler maps when I trigger a sample using a key on the keyboard another samples is always triggered, however it plays and overrides all settings such as envelope velocity and just continues to endlessly play just on that one note, all other notes and samples work fine.

      Should note I can put any sample on that note and the same thing always happens. Leaving that particular note blank with no sample yes it works but I can still see the note being triggered on the playing of other notes.

      Video here if that doesn't make sense: https://www.dropbox.com/scl/fi/ufbzurhqv47sjmf8gmdud/Video-18-11-2025-13-06-04.mov?rlkey=ijwiczjvg1wuv9bzckam9k244&st=4wdzismp&dl=0

      Going to be honest this one is way outside what I can comprehend and not even sure where to start on a solution but at the moment is tanking this entire instrument!

      Any help greatly appreciated!

      posted in Newbie League
      J
      JamesC
    • Handling un-pitched loops in the sampler

      Afternoon

      So I have a series of percussive loops that have been designed a set in 4/4 and a set in 3/4 for now, 12 different variants in each time signature.

      Now I'm using the sampler as I happen to already have a sampler in the instrument and my gut was to go into this new sample map for 4/4 and adjust the settings to un-pitched and tempo sync thinking that would then tempo mach a tempo change in the DAW, however it doesn't on testing what have I missed, is there a set of scripting required?

      The loops themselves work and loop extremely nicely using the base functionality and much as I used to for kontakt I've also got various iterations of these loops at different tempos if needed.

      Thanks

      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: Coloured Keys not quite behaving...

      @d-healey awesome will stick it on my watch list and regroup tomorrow!

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

      @Lindon thanks both for the help, I'm not sure I'm understanding the example given in the documentation

      What element is this case are we setting the loading call back for in the exmaple I see its the panel in this case is it the sampler? (I'm also fairly sure my layout of brackets etc is completely out on this also!:

      //so put all this code in the OnLoad callback
      
      sampler.setLoadingCallback(function(isPreloading)
      {	
      for (i = 0; i < 127; i++)
      {
          if (Sampler1AsASampler.isNoteNumberMapped(i))
          {
              Engine.setKeyColour(i, Colours.withAlpha(Colours.green, 0.3));
          }else{
             Engine.setKeyColour(i, Colours.withAlpha(Colours.white, 0.0));
          }; 
      };
      // to here...
      
      posted in Newbie League
      J
      JamesC
    • Coloured Keys not quite behaving...

      Evening everyone hope you are all well. So code incoming, I've got a dropdown box to change loaded sample maps - they've got quite a varying range depending on the selected map and was colour coding the keys for the user so its clear what you've got to work with.

      The issue is that it seems a bit inaccurate and to be honest I'm not sure why some are very close 1 or 2 notes missed low and high others are missing 16-20 notes left uncoloured completely, as always I suspect there is something I've missed!

      /// Dropdown Sample Maps
      Content.getComponent("cmbsamplemap").setControlCallback(oncmbsamplemapControl);
      
      const var sampleMaps = Sampler.getSampleMapList();
      
      const var cmbsamplemap = Content.getComponent("cmbsamplemap");
      
      
      cmbsamplemap.set("items", sampleMaps.join("\n"));
      
      inline function oncmbsamplemapControl(component, value)
      {
      	Sampler1.asSampler().loadSampleMap(sampleMaps[value-1]);
      	
      for (i = 0; i < 127; i++)
      
       if (Sampler1.asSampler().isNoteNumberMapped(i))
          Engine.setKeyColour(i, Colours.withAlpha(Colours.green, 0.3));
          else
         Engine.setKeyColour(i, Colours.withAlpha(Colours.white, 0.0));
      };```
      posted in Newbie League
      J
      JamesC