HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Mighty23
    M
    • Profile
    • Following 0
    • Followers 2
    • Topics 90
    • Posts 339
    • Groups 0

    Mighty23

    @Mighty23

    just a raver

    71
    Reputation
    62
    Profile views
    339
    Posts
    2
    Followers
    0
    Following
    Joined
    Last Online

    Mighty23 Unfollow Follow

    Best posts made by Mighty23

    • Let’s Build the “League of Newbies”

      Hi everyone,

      I’ve noticed that many of us, especially newcomers, work independently on amazing projects. Unfortunately, many of these projects remain unfinished or fail to reach their full potential due to limited resources, time, or marketing experience.

      I believe that by forming a team, we could:

      • Develop better software through collaboration and shared knowledge.
      • Solve common technical problems more efficiently.
      • Pool resources to handle marketing and distribution effectively.
      • Share the workload and reduce the strain of going solo.
      • Bring unfinished projects to life and give them the exposure they deserve.
      • This isn’t just about coding—it’s about forming a team to cover the entire journey, from development to launching and promoting plugins or software.

      Personally, I have a few projects ready in terms of logic but need time and help to refine, distribute, and market them. I imagine many of you are in a similar position!

      I’m proposing the creation of a “League of Newbies” where We can work together, not just on development but also on creating strategies for distribution and marketing. By joining forces, We can achieve more and bring our creations to a wider audience.

      If this sounds exciting to you, let’s discuss ideas and potential collaborations here. Together, we can make this happen! 😊

      I’m also open to any constructive criticism about this idea—I woke up with this thought and felt like sharing it with all of you.

      posted in General Questions
      M
      Mighty23
    • RE: More Positive Posts?

      @clevername27 said in More Positive Posts?:

      marketing and promotion

      My good news for today: in less than 48 hours, my plugin has been downloaded over 240 times from KVR Audio to my Gumroad. I’m not sure if that’s a strong number in general, but to me, it feels huge.

      If you’ve tested your product and it works, don’t be afraid to release it. I’ve left projects sitting unfinished for months, held back by doubts about quality—don’t make the same mistake.

      For non-native English speakers like me, don’t hesitate to have your writing checked by AI or a trusted friend. Take the time to craft well-written marketing emails, and always personally thank those who support your work.

      posted in General Questions
      M
      Mighty23
    • RE: Saturation Models (Neve, Tweaker, Oxford Inflator) in FAUST

      I’m a simple person—I like loudness! 😄

      I’ve been experimenting with an inflator-like idea these past few days, and here’s the code I came up with:

      declare name "Inflator-like test1)";
      
      import("stdfaust.lib");
      
      // Interface
      input_slider = hslider("Input (dB)", 0, -6, 12, 0.01);
      effect_slider = hslider("Effect (%)", 0, 0, 100, 0.1);
      curve_slider = hslider("Curve", 0, -50, 50, 0.1);
      clip_slider = checkbox("Clip 0 dB");
      band_split_slider = checkbox("Band Split");
      effect_in_slider = checkbox("Effect In");
      output_slider = hslider("Output (dB)", 0, -12, 0, 0.01);
      
      // Utility functions
      clamp(x, minv, maxv) = min(maxv, max(minv, x));
      sign(x) = (x > 0) - (x < 0);
      
      // Convert UI values to processing parameters
      pre = input_slider : ba.db2linear;
      post = output_slider : ba.db2linear;
      wet = effect_slider * 0.01 * 0.99999955296;
      dry = 1 - (effect_slider * 0.01);
      
      // Curve coefficients
      A = (curve_slider * 0.01 + 1.5);
      B = (curve_slider * -0.02);
      C = (curve_slider * 0.01 - 0.5);
      D = (0.0625 - curve_slider * 0.0025 + (curve_slider * curve_slider) * 0.000025);
      
      // SVF Filter implementation
      svf_coefficient(cutoff) = tan(ma.PI * (cutoff/ma.SR - 0.25)) * 0.5 + 0.5;
      
      svf_lpf(cutoff) = _ : fi.tf2(b0, b1, b2, a1, a2)
      with {
          c = svf_coefficient(cutoff);
          b0 = c * c;
          b1 = 2 * b0;
          b2 = b0;
          a1 = 2 * (b0 - 1);
          a2 = 1 - 2 * c + b0;
      };
      
      svf_hpf(cutoff) = _ : fi.tf2(b0, b1, b2, a1, a2)
      with {
          c = svf_coefficient(cutoff);
          b0 = 1;
          b1 = -2;
          b2 = 1;
          a1 = 2 * (c * c - 1);
          a2 = 1 - 2 * c + c * c;
      };
      
      // Band splitting with integrated gain calculation
      band_split(x) = low, (mid * mid_gain), high
      with {
          low_cutoff = 240;
          high_cutoff = 2400;
          
          c_low = svf_coefficient(low_cutoff);
          c_high = svf_coefficient(high_cutoff);
          mid_gain = c_high * (1 - c_low) / (c_high - c_low);
          
          low = x : svf_lpf(low_cutoff);
          high = x : svf_hpf(high_cutoff);
          mid = x - low - high;
      };
      
      // Waveshaping function
      waveshaper(x) = select2(abs(x) < 1,
                             select2(abs(x) < 2,
                                    x,  // > 2
                                    (2 * abs(x) - abs(x) * abs(x)) * sign(x)), // 1 < x < 2
                             (A * abs(x) + B * (abs(x) * abs(x)) + 
                              C * abs(x) * (abs(x) * abs(x)) - 
                              D * ((abs(x) * abs(x)) - 
                                  2 * (abs(x) * abs(x)) * abs(x) + 
                                  (abs(x) * abs(x) * abs(x) * abs(x)))) * sign(x)) // x < 1
                      * wet + x * dry;
      
      // Main processing function
      process = par(i, 2, channel_process)
      with {
          channel_process(x) = x : input_stage : effect_stage : output_stage;
          
          input_stage(x) = x * pre <: 
                           select2(clip_slider,
                                  clamp(_, -2, 2),
                                  clamp(_, -1, 1));
          
          effect_stage(x) = select2(effect_in_slider,
                                   x,
                                   select2(band_split_slider,
                                          waveshaper(x),
                                          band_split_process(x)));
          
          band_split_process(x) = band_split(x) : 
                                 (waveshaper, 
                                  waveshaper,
                                  waveshaper) :> _;
          
          output_stage(x) = select2(abs(x) < 0.0000000000000000555111512312578270211815834045,
                                   x * post,
                                   0);
      };
      
      posted in ScriptNode
      M
      Mighty23
    • RE: Click and Drag on a XY PAD - What I'm doing wrong?

      @ustk @d-healey

      ok, many thanks!

      HiseSnippet 3403.3oc2ZssjaiTFVNId2LFBr.aUvkplhK7rShV4SisIrv3SZ7Y6Y7YuEEzVpkTOVpkFcvm1Zqhp3QfmDtgq4QfGAJdB.dAV5VxxVdhyjgTvR.cgmn+9+v2+g9uk9U5ZYHBssMrXhDq+ZSHSjuazdqwNpkTAHLSsxLQddztVPanCSw0l.aanDSjHO8J5pQN4YLdW+seYQfF.KB2ShgYnARD1Doib1Ss6kMPZZB.IXejdHtSeYMQCbICMCWBRdZTdFSf3bfBrMfx1ShxTEXqxD4yhlOSlD.I4rxIRkH+LIYQXpr7WjNaRPlbxxY4SjNkTV4zDP9QUjPNFV8b.NPalHOqngz5dpFKw9FXHxFMSCRuIASOhk8IKXnIQcQJUlRpHMotAgHaFlHQ6tOf8T+.1mFsERBsi99.2m3s.6dIBG.i7jCg2SO.dIBCO9Pv6HPJRHH8LeH8Ch1SzBY5reEJd9NQqgcfVx.RdJLT74k4I+8OI5m+4rkrfDDw5nBYksLvNrn.g3dQrRDBPrCmNXNTft5NMF+Bd9WxR94rW+hXuHFQQWAc7zhNIdvNdRWfDqI.C0HpgjqscXW.r7o2Eqw9ErA5VA5TxP2z.StI9oALb5N8tEf.rDKQOxHEWKe31zvwAA69F1HD8PlAHI4QJ9ogV+zWxR7BOeHr1HU+wOcIRxQkvPliurJDon571Welhe4M0Dq34E7tNJm.MMikkH+NirGvlv+oEzzX2S3rWG6MjprEPQAgUJZ3hkriGD0nAylFh.ssz4OySXRTrFF4f.ZnM9wt4XiY1r.KKv5Chc9z+B1u7WED9CIn2hujEtxTCIhbzVyRPhCAETUhrXs.XEHgAZphTsgTvd1RbqmPLjrgEabpcPDav+Zxe94rII+47yOi8qdQLVxkmQ9Rzu5sVgzfvvormyFGQ9IwYzPJUN+eI.txAvyCADDCEcfR9HjymUjLUEeAAG6r8VMHPP4pWYZXS7bC7OyWJVjM6qxvy5XPx3b64O.uzrxMTFiS3hVU7RB31hsulEpYC2awDGyhqOlE8rWB9G1fTSwef8tWHo213.IO6XYnsKiPUNoDc6tUYWrH07bGlHn1ojufA0j90aTq80zpjsUJsLbs2msYo45C2hduZXO92ox.qGGtfjl8BP6veYWKZUlz1hdNtPoPO14nKc+fZKfomWigK86DwFDfYCbdpORp60bg1ghvAaDFSpA0AlCoqG2QEYSqDie5pSOyqsQ3McinMKheF6qXC3aKkWxtsbHH2D1.SNtAVeDCT0qcyAVHfz1r+AV3f.w.SofV7G2g8S07doZev349gUnOKItGKSHsW1xPrShcxImbuTbALRGPi3BVjC1805mk6rWeRrGGySdURdJ2mbxtB6ud+AC6pz1V5PN5Zgwbx17kpPLKv2YIahzMV.kHtKBqgvv8r6EeiKFzZ4k9AFRYz9cNkgjy6zoRsTEIp5qxk.RqSoacsc7TKkUKnBKRZEIe5En3PXI3pNx6U9gso75DPY2u6ieO.jEoIrmA9q+1eOqqeRa0th1P4KMZKdZc8AUndneW81CThFNtuegvY623LpUjikn16Xcz78CZOM+dMjtLRuger9A8iIGwO7KpenMB2yOBV4Acj09Nxj2VqxafljmewgclgipeWCaZiBKnrF4HDVQUuy33XY+4uqqW8.W9lKL3r7sa7.bsyk2ufG8ckOdQI1eAs9gb8UdzeG6n7KuIam7bbue8xheUriDptmras2mw9J5QtaqAX2d..sGiCRC4rd+lKRPijQI6B8Ej7rk5rjcBaOZirJ.SBwPqiru79UBjGQuEB6+WvJu7m28z+BVsqsuEzw0BGDYd0VwNif439bRn4K5YreNabesEhuy2tJ8XsXTexOh75Xgd9HMORzXCoh8z77o4v8unQtRIp2ev4BbiuXr4fhbtF04TKq2sXAta6aXHnr95M3YCEVIOC24pV0JbwlpiJ1ApZRtVsnnbAtQbUE35cS09ycFcWkTWrn+B2IEJlZvvaFUed+J45kTpdi6pUTBMX4hoEUR1ueszxSsW..4TKlVIYxp0Sv2dIWVwTUyBztYxfAoFrwrPyNoa2L2PiExvyms7hEcSkz9hEsmkRFttR0qycSwxYEGaVW5FtVMjTKcQtgBvQ1UWk3hpaV4tdVRk0cUgk3kVm0oP6ASGNqSKP4FSK2XdgFympZJplOUaKTiZ4saHMQTLoxRqr.ozIlNeyFdUAm6pccAWkjJymktVmjJ1iGTaSs7hBI6OstCbAWxg8.plpFXChRstnj6Rzsxyt10UuWavFqpCTuYjvlJtP4oRRkxMqkTRIIygxhtktZYOq1ytZ07LcQkVJMR55rfgR4WUrgU41Z7sLEV1QlqjIdby5othu4n6RagssFtwt5nYN2kcoc0ZJvNfaqWnqvl0hiuvdpceqqxBbL1f4ROBjeV+V58LtyvPIMOlSo0xqJUpzrZEAMmH0YxrE0rHQailEg2TwXVAAzxQYEE5OT.Ma0rkkgqKaLNY0aucYKklKRCLW3zoUMkEaPURVr4prR0u95pBK33zZhKLurJdBGWwpxb8KWlSdB2597cmUnJzjSFXmW91TMjSmKeIkzBCxIr9bd41sLq1OkdqV8RL0vbTG7zo5fUSqvi5x2haT5MC.m2smT+dUlOYP8h8aqnKvuobkQslUsEecWm4J71c3arp+XyMMxNNgq9zV8JbWAcTwj84qTiu2Xd9x75ILLH5H8.yoqMztKsx.gZKVgMqHVGOvrXm1WMtmsFN0lwquVAXlQ81L0rxLUMSuK3R2uPtZcytTOk9Ty9WauQD.tZP2BpvhBloWLRe5cEaLb8PAQ2MoK3BlAptnWF0EsF141EML6ZiElJls4c4V.N+V06b0WYkpdd67oWMFOp9Tb0VMFdSWNq0yNel9nhfriy4Htt04SUc5O4b64I61L+nTBWWZijfV8bkDqOVzcdgt1H6YcvvZ2Vq53tklf0qTb75I2MZyEMHaGuScAm902nlKy4CEFWIggfb4B4g37nBokRKaveUR.Z0x7cEv3Zqm6jU65t1ScZmXX6LkWsHeaP0jCr0UuqRZ00CkgSQSDqUeVlU.kVp0l1VPt0MVFWe6xz4az31ziw43m2r1EJiW0o8jpobKtbzFNd8q6VrZ5ri.JapMp6sIptXwFf1hZs4pzDTrfc4zo6zq6Z7xp0OeQ6bUk2LZX0L8zJS1H2RZUFS6UJhNILPEFOx4tdVYf7EST3zXwda86iuuGGoQueqOedKCb.j1d26X2cBRW167qcMxMvsMbfcvwOK1WQd9PxQN2eIY4it1122PCZczkoCSx5gDLN1UeFzJ3I5BXjIxyNbJLQe6SgI7PhD8eQzPLZfouWbGSH9sM5Hlsu8JCSjmrEUDVc7lWy2a67Z5ogjfVLHIlHebT560lfwCv6GTVsKYdzBmbuve5q+C+nW+GZbIyfZzrBcpQagCAhlPKR9i38QJCWfDg9yP5jnkg1ycLLIFZ2aayDIluQeQvDlnYcOaFKZvinvrZGd+sxWtNL38lgR3U8mZRXJlFltlcv2PoWh7h6yoin5vQhvD46G8fQhvfbf5ASO7jO5O969GeCUa6olLLYpu+t8mWDMTccHW5xeC0khF4mQ92AtyGkb6LO24N6nDL1GJsu4a7rOy6xaLAVDrEFj6isdxFLsGhq7DlP7872Y4TnTyWFJ0bowk5HIIMX2sOT99j1e4WpGdTu09SjSSBmRIuziYOzFX3oAGFSe76rJcu59SV2CSgM0j2JDeKf3MmK5mDskgjqF4n7CFSKcX1aWfp2vyFkNeSLwdqCq4+sM61GKD+AQ6hbDUONFexQvHsIy+Av31Id+hnUjkIu8yd.9rnBi+VX71Oe2mn.oapAuJv7eusDXoTR7.enBFlxPMvAApQGzRhTkcjOkQM7BROxtFZ.q6Gle5i1OS7v94ydz0BTWh8C550eXTuv7G5fzK0+gMH+jnjye9uDDuwvkNL+V.GKDoObz1jW+hbRlHj.OLcPHziAeB8Ia7ummdOED8fXIuaHG38MaWLA89HaWLQvhgCC+X+vv2I5HvBn22fzKBDMZuBidfsz+4G62dz7Q+sG6H5PfPeK.11zvFlHrl6A0Q8IGsYe.06IQxiJQxC6C43hOT09jNfKZnPvvRODeO+x.hICSjTlbfxH2eflZgVE9L8JX.oHve1bcrEIAFZcW35nttZ1PucHIBK3dxICStJvRhjyDendiO6w0a7c7EX+nO39Br+OvCZbvonmDfQ+CMqPNbSi7R.65bKCb0bBnd3oosLvFz4xfNHQeCjzgPQAdP8yQcnBNN.5SzGP4Su7FnFDXGZ63O8xlHLDXQhSv2yXQh+k+f4GMe8Sh5CWVZ+B1+28ADe5+W+.hO9cejVfeXmE+wQIshSx5kJY+uSt7aiy7+1vF5.QKie81uuMcS+y8nP7ar2+ihNIZK58ruw.VXXHukI5WKJdnpdCAS99JXp2WAS+9JXl2WAu38UvruuBl6cKH8D8BtNF9yXj9jMcq3MSqHQ7enFusIL+S.b1u9RB```
      posted in General Questions
      M
      Mighty23
    • RE: Let’s Build the “League of Newbies”

      @orange said in Let’s Build the “League of Newbies”:

      I think sharing and collaboration can be done on a forum category or topic (there is even a category like "SNIPPET WAITING ROOM").

      I shared our collaborative vision in the group chat - we're working to align our ideas while planning to contribute back to the community. We aim to both evolve together and strengthen HISE's ecosystem.

      posted in General Questions
      M
      Mighty23
    • RE: More Types of Saturation

      I made this sketch in Faust to allow us to test different types of saturation

      import("stdfaust.lib");
      
      //  Parameters
      drive = hslider("Drive", 1, 1, 10, 0.1);
      saturationType = nentry("Saturation Type", 0, 0, 4, 1);
      dryWet = hslider("Dry/Wet", 1, 0, 1, 0.01);
      outGain = hslider("Output Gain", 1, 0, 2, 0.1);
      
      // Saturation Functions
      saturate(x) = 
          (saturationType == 0) * aa.tanh1(x) +  
          (saturationType == 1) * aa.arctan(x) + 
          (saturationType == 2) * aa.hardclip(x) + 
          (saturationType == 3) * aa.cubic1(x) + 
          (saturationType == 4) * aa.hyperbolic(x); 
      
      // Main Process
      process = _ <: (_, (*(drive) : saturate)) : dry_wet(dryWet) : *(outGain)
      with {
          dry_wet(mix, dry, wet) = (1-mix)*dry + mix*wet;
      };
      
      posted in General Questions
      M
      Mighty23
    • RE: Free Reverse Delay built in RNBO

      @JulesV

      import("stdfaust.lib");
      
      MAX_DELAY = 192000;  
      
      // Phase-shifted phasor for reverse reading
      // dtime: delay time in samples
      // phase: phase offset for reading position
      phasor_phase(dtime, phase) = ((os.lf_rawsaw(dtime) + phase) % dtime) : int;
      phasor(dtime, phase) = phasor_phase(dtime*2, phase) <: <=(dtime), (*(-1) + dtime*2), _ : select2;
      
      // Single channel reverse delay processing
      reverse_delay = _ <: direct, delayed_and_reversed :> _
      with {
          // Get current sample rate for scaling controls
          current_sr = ma.SR;
          
          // User controls in milliseconds 
          delay_ms = hslider("Delay Time (ms)[style:knob]", 500, 20, 1000, 1);  
          delay_time_raw = min(MAX_DELAY-1, delay_ms * current_sr / 1000);
          delay_time = si.smooth(ba.tau2pole(0.05), delay_time_raw);
          dry_wet = hslider("Dry/Wet[style:knob]", 0.5, 0, 1, 0.01);
          
          // Direct path with gain
          direct = *(1-dry_wet);
          
          // Delay into reverse buffer implementation
          delayed = de.delay(MAX_DELAY, delay_time);
          
          // Reverse buffer with windowing to reduce clicks
          // Use a single buffer with smoothed reading
          write_idx = phasor(delay_time, 0) : int;
          read_idx = phasor(delay_time, delay_time/2) : int;
          
          // Apply Hann window to reduce discontinuities
          window_pos = (phasor(delay_time, delay_time/2) / delay_time);
          hann_window = 0.5 * (1.0 - cos(2.0 * ma.PI * window_pos));
          
          reversed = _ <: rwtable(MAX_DELAY, 0.0, write_idx, _, read_idx) * hann_window;
                           
          // Process delayed signal through reverse buffer with filtering and gain
          // Add gentle low-pass filter to reduce aliasing artifacts
          delayed_and_reversed = delayed : reversed : fi.lowpass(2, current_sr * 0.45) : *(dry_wet);
      };
      
      // Main stereo processing - apply reverse_delay to each channel independently
      process = reverse_delay, reverse_delay;
      
      

      I tried a few additions because the previous version worked decently with mostly percussive sounds, but with instruments like vocals or pads, it tended to create too many clicks/pops and glitchy audio.

      Test this new version (milliseconds > Delay time) included.

      posted in Blog Entries
      M
      Mighty23
    • RE: Saturation Models (Neve, Tweaker, Oxford Inflator) in FAUST

      @clevername27 said in Saturation Models (Neve, Tweaker, Oxford Inflator) in FAUST:

      or is there also some dynamics processing as well?

      there is no compressor/limiter/gate in the processing. I would consider it 100% multiband waveshaping.

      @Allen said in Saturation Models (Neve, Tweaker, Oxford Inflator) in FAUST:

      For the band split, you may want to use the linkwitz riley instead of svf.

      Yes, for sure. Many Thanks.

      @Allen said in Saturation Models (Neve, Tweaker, Oxford Inflator) in FAUST:

      may I know what CPU you're are running this code on?

      10510u i7 on Windows
      Late 2016 Mini Mac overclocked and open-core operating system.

      posted in ScriptNode
      M
      Mighty23
    • RE: do faust nodes only work as hardcoded in a compiled plugin?

      @Morphoice said in do faust nodes only work as hardcoded in a compiled plugin?:

      I guess a workaround would be using a knob that can either be 1 or zero as the gate/trigger parameter inside faust, then simply passing 1 to it on a note-on and 0 on a note-off

      In my opinion this is the most immediate way and by testing it I can guarantee that it works.

      What I tried to understand about FAUST:

      • we need to enable MIDI by setting it to ON like this:
      declare options "[midi:on]";
      

      We can capture data from a graph and analyze which MIDI note was pressed like this:

      current_note = hbargraph("Current Note[midi:key]", 0, 127);
      

      And get those information in scriptnode:
      scriptnodemidi.png

      Unfortunately, I'm not getting the desired output values, but I hope this rough sketch can help you.

      HiseSnippet 2311.3oc6Z0saibaEdFaS60paSSZ1DzdGgQuPdifVMxx+stAq85eZEZrWCKmEAHHvfZFJqAdD4zYFYakfBzK5E6qPtp80n2Ef9BTf7BzdUusuAsGRN+vQZjskpcZ11nEqsH44vyGO+wuwRzqinLGpyYgLWeeZjgg4rGGvsogg7.CyRmNvmZX9XTqArnt61k3xLZtmg46fNjDFQCvpod4.eRXH0wvzb1ekXByEmyP95e9hWR7HLaZ1TFFul6ZS+D2dtQYyd71+FWOuCHNzSc6oIcisaZyY6x838A7LKplgOw9Bx4ziHBwlAY7qIgcMLeJZyUW0h3zY8NVqXsYamN1zUVu1ZMVuNY0M5zY8ZVMVwY8NM.PN+9NtQ7fVQjHZng4buj6LnUW9ULkAdsanaaOpXfkQKvxpoOf64HNhhYM1sqqmSpiJDbaHM21rJ21SPG553lNel66ckKfyzP2AZNSd3MaN3YoCuZZvq.HYpAo4TP58PsrCb8ixVQfmeDpIChlcHPbRGJJYML+FztbP.VT0djKnGD.CRUn7Z0pUAC+X4s5zmYG4xYXN6HdD8UrxKW5qJsXoeWI7vK0oSgqILS.2yiFT3xhTifaRwxr98ZSCpfuj30mlJHb7y6SQi2mpGxsUmZMA4rlL2nW4SYiKQvH1UAu6SatGIhHBDwyAx4SChbEPvbO5kPYfJrrHZOZ3EQbenPXjXFjsvc56QhxmBIJzhW.7A4hahfCKzMZfdg38Vd0cEhuG5X2H6tEiwYJ.ifm5g.iwUi+Xz9c5Psix.3bnC9rGlROcyuXh4UUSxNoRy+yimgwcnX4zzP2PZf0MzO8udW6m5em6mlTjWAMIET2XOzwVPkOmUS9B5dM+26Zn9VPsYtd9KlfwVt878n6ytj5AMfjX7mBcb5P56EkLa9rtC4LteWNy0VOQ6DZTf64mSCzwdgGnchhfqoyl4IaeB0iRB0xD+Ea+ItLJI.7SzozWXMw2+UX75mgTvEKJUvu81Sc1+mtmZQgyRwsPAaJL9iiGhO3yrJjHyaz5w4GP8IAzS4G6QFTNjHJQNAvXEbaOt8Esb+R5nLM7UP3kBIJa2kvXTuvogPx72SI4Fmv6G4xN+PBTZdMvr4n98ZA81so6FiNXNyYD7RTiqIFKxKZAD+kC9Wvq3EsDiMiWzJYQMJMGQithGbgLbD+dCyETbH6AsfOfzOLxXGOO9UGy8FjzBQdjnAghDVyEP0pB+SI0t7d9twoxPfRMLA66zi2GLa7A.H5eJw0SPdnU+PfBlyqXs.gk2FJRzNR1IY9CH1fmcvwD3dVnfQPhCxNoAUsSyR0AaVdhvCqdrB80E6Zx8kJOG.xdB2g3oOLmUrtxenLe19qrWN37AZvISD8TUc.nV81.fFqRUQhXDzBXFUIQyvWKV0l3Y7ZQRnv+Yj.5Y0.8BnNxCbN.+X.vAzpcFqqJQqIBkyLDJWDsqGryMcRfn57eJMLxR12QW3ehHG+XR.Xd3YPBSTQRiPaZCyGkNBfzgtrXA+PQ9WsMUuVe80ZrQ8U2ntwgjqiE.gpComshn9hl.iUAAVdDhntoKV0m.hZUS8xpwl0rrVSGU4vw7nUEkAY18Qn5fZ4LMBYAiUoTsgqOwcBn+1DisfPdXYiG9y4BHGpMYPhkeePxUhOkVaVu1l02b7mx54OkKJOki6XNOJ+IrQia3DhP42Z01T71dNzn0Hmd2wMcQjUsaJrzi6fCHryS28zv3zGWZbWiKKhBh4Uog9UmV+0MZnPnJWzNJugZckfOxojfyoQx9O5SD+nuLp7VQYge1PCUCanlGbhPWwKgRb.uoHWrvBHk0LJTs2ActGuMw6Lah3txh0TqA2PxmqO2GhBTWjVMmLE0wansQuw2iQMpuwlPYe8UZLYco0NfwNXPq7syL0BpycaAUUQqZpc5Gw6Ao+xm61Hi6XZTyH2UWYwhbdn2Wd0EvooZl.Ee2Y15+Gc007H4iFjdif3Q7pefn6v38Kym4WxX.qUKql6aNa6rjdsmjYb9rVWPuR4KzEuPOoNxFZvTbM8K47K5Qj7sdP+qI8Hz9WGEPr9d3S7DCs5eWBsefS88Fm57DZmLF0SK4zDa9VB0zg6Ys8e+K+CuXjdVv7C0yRJWwslJhZpb0+zW+0+4WXbyMLat8HFe6+XgMLGuwKfsZh.taa7ve3GhupRkUV4ausydiQO6u4amvyddJrwq86+psMl36oDlYBMsNMWsqplXS+l+xDGwGgHbVxyTDwe2ILhOBS3jk+au39vweqVeH5wZV+dgh7chq6TRt9GnH++STjugmGbAjU80GyC5d28T+2m062E725QrC3mEGukWoKmAhXLYLdQzghwXKiKGtcif+vY1142pQTr9zp3JSqhMlVEWcZUbsoUw0mVE231UTTDEmkK50.WOb79xjPSy8Yh9YRJlFzdsoNNTG0msfHWMcFF85C.RzxT9NthG4XFwuTH4CTrReVJKxpNg9IeUCLl4eLKxsmOOHp7RgQNRQq541dok2pDPowiDPwbe4cE3k9bwd7bN6KVZqRkd1yv64F.MHwG1bul3KnCvDawyzfILGrianuGYPI69AAfcNiwin3OF2sMT1FP76VdocUqfEe+LTaLrEewRUv0pfg1Bf8EzZ.cXfTACJujXXpf9hqzDR2nAHec4+qI9lgXAJJHk.J1teTDmUdIwPMKr7VXI5S9jHw9oMPvvMkcweZSbRcVIEmVAxC8bcnAkWRMymGFMvi97KX71RLW0R7iZvOqqdix+QFnqpbhQzbkQ0L9xcccimZDsWU4vRUMlUhtpwSUnpRC2HUageARkDeUqx7JkDbqOKNZjtqoDtGZeqKhBqFGPTwCfo1YRlZ55mReaT8qoNSYATAr1MfJBq6rWqSvz3PWoj2.aLkUk3DFPKqBPUvRucEbriqBN1MTAKxGh2T0mTMNT7sgPE74g1tdx+l.x73NRmQIk.eLrZUPfxhi8x3mCqVEd9WwEtkgnXla5iRQH9o3zSerMOsKEKwXWref3aQg6kTQBmfrQHNBVMoHAGwkiCcOmQ7vc.aUJ9SDDvhZOJqf1SSsXErdM2x3e4ywmU4rsLL923A4vWB
      
      posted in ScriptNode
      M
      Mighty23
    • RE: do faust nodes only work as hardcoded in a compiled plugin?

      @Morphoice said in do faust nodes only work as hardcoded in a compiled plugin?:

      what is actually the benefit of a hardcoded fx?

      The forum discussions highlight significant performance improvements. For instance, some users have reported dramatic reductions in CPU usage - from 14% down to 4% - achieved simply through compilation.

      Nodes containing FAUST scripts must be compiled and their corresponding .dll files must be added to HardcodedMasterFX. Important note: the uncompiled scriptnode needs to be completely removed from the processing chain, not just disabled.

      Any scriptnode that is compiled for macOS must also be compiled separately for Windows.

      posted in ScriptNode
      M
      Mighty23

    Latest posts made by Mighty23

    • RE: Free Reverse Delay built in RNBO

      @JulesV said in Free Reverse Delay built in RNBO:

      Thanks for the update, it sounds better. I think you made the transitions smoother, right?

      Yes, transitions are smoother now because of three changes:

      1- Smoothed delay time

      delay_time = si.smooth(ba.tau2pole(0.05), delay_time_raw);
      

      2 - Hann window on reverse buffer

      hann_window = 0.5*(1 - cos(2*ma.PI*window_pos));
      reversed = rwtable(...) * hann_window;
      

      3 - Gentle (?) low-pass filter:

      ... : fi.lowpass(2, current_sr*0.45);
      

      this is to try to: avoid clicks, reduce aliasing

      posted in Blog Entries
      M
      Mighty23
    • RE: Free Reverse Delay built in RNBO

      @JulesV

      import("stdfaust.lib");
      
      MAX_DELAY = 192000;  
      
      // Phase-shifted phasor for reverse reading
      // dtime: delay time in samples
      // phase: phase offset for reading position
      phasor_phase(dtime, phase) = ((os.lf_rawsaw(dtime) + phase) % dtime) : int;
      phasor(dtime, phase) = phasor_phase(dtime*2, phase) <: <=(dtime), (*(-1) + dtime*2), _ : select2;
      
      // Single channel reverse delay processing
      reverse_delay = _ <: direct, delayed_and_reversed :> _
      with {
          // Get current sample rate for scaling controls
          current_sr = ma.SR;
          
          // User controls in milliseconds 
          delay_ms = hslider("Delay Time (ms)[style:knob]", 500, 20, 1000, 1);  
          delay_time_raw = min(MAX_DELAY-1, delay_ms * current_sr / 1000);
          delay_time = si.smooth(ba.tau2pole(0.05), delay_time_raw);
          dry_wet = hslider("Dry/Wet[style:knob]", 0.5, 0, 1, 0.01);
          
          // Direct path with gain
          direct = *(1-dry_wet);
          
          // Delay into reverse buffer implementation
          delayed = de.delay(MAX_DELAY, delay_time);
          
          // Reverse buffer with windowing to reduce clicks
          // Use a single buffer with smoothed reading
          write_idx = phasor(delay_time, 0) : int;
          read_idx = phasor(delay_time, delay_time/2) : int;
          
          // Apply Hann window to reduce discontinuities
          window_pos = (phasor(delay_time, delay_time/2) / delay_time);
          hann_window = 0.5 * (1.0 - cos(2.0 * ma.PI * window_pos));
          
          reversed = _ <: rwtable(MAX_DELAY, 0.0, write_idx, _, read_idx) * hann_window;
                           
          // Process delayed signal through reverse buffer with filtering and gain
          // Add gentle low-pass filter to reduce aliasing artifacts
          delayed_and_reversed = delayed : reversed : fi.lowpass(2, current_sr * 0.45) : *(dry_wet);
      };
      
      // Main stereo processing - apply reverse_delay to each channel independently
      process = reverse_delay, reverse_delay;
      
      

      I tried a few additions because the previous version worked decently with mostly percussive sounds, but with instruments like vocals or pads, it tended to create too many clicks/pops and glitchy audio.

      Test this new version (milliseconds > Delay time) included.

      posted in Blog Entries
      M
      Mighty23
    • RE: Parameter restore in Pluginval (compressor using scriptnode)

      @ustk said in Parameter restore in Pluginval (compressor using scriptnode):

      When you turn the attack directly in the HC FX, it goes from 0 to 60,

      ok thanks, that's definitely the problem but I don't see it that way, I see correct ranges - very strange indeed.

      posted in General Questions
      M
      Mighty23
    • RE: Parameter restore in Pluginval (compressor using scriptnode)

      @ustk said in Parameter restore in Pluginval (compressor using scriptnode):

      Why having the Attack using the callback to set the parameter and all other knobs connected through the property editor?

      Initially they were all connected to HardcodedFX via the Property editor, I moved the Attack callback (knob1) to scripting for testing purposes; the error occurs in both cases.

      @ustk said in Parameter restore in Pluginval (compressor using scriptnode):

      @Mighty23 It might not be this, but the first thing I notice is that none of your parameters have the same range as their targets in the hardcoded FX... Start fixing this

      I don't understand this one. It seems to me that the Min, Max, and stepSize values are the same for the knobs and the HardcodedFX parameters... that's definitely it, but I don't get it.

      posted in General Questions
      M
      Mighty23
    • Parameter restore in Pluginval (compressor using scriptnode)

      Hi everyone,
      I’m building a compressor plugin using scriptnode in HISE, inspired by the Distressor. When I run it through Pluginval, it fails the Plugin state restoration test.
      The problem is that when pluginval saves the plugin state and then restores it, the Attack parameter value isn't being correctly restored.

      !!! Test 1 failed: Attack not restored on setStateInformation -- Expected value within 0.1 of: 0.728435, Actual value: 0.131516
      

      I've investigated, but I can't figure out the error. I'm sure it's a problem with the Attack parameter and some inconsistency I can't find.

      HiseSnippet 5668.3oc27rzbabjdCjz30jxNVdW4c2ZqbXBK6p.snfvKRBZEai2jPBDDDC3SWNZGLSCfgXdwYF.BHGU1UpbJWhOjK6s8uvdL2zOfbX+IrmxYeKmRo7087pG7f.fhwQaXUhTS28W2eu5uWcOScScQjkktISjUaNx.wD4CX4GoY2sPWAYMlJEYh7gr1cksrMcFV9QFBVVHIlHQt6t3gDYk6wP94m957BJBZhnflXXNVWVDUUVU1Nn05YetrhRYAITSYUpQmNaEQcsB5J58Az4trwYLDD6IzAUS.Or6vxrmfUWlHeN6NatYBAo1a2NQpD6zRpsHJ01w2J81IE1LS61aGOQ5TRa2NMfjuWIIYacSdaAajESj6kWWZDeW8qzbVfiksjaofvOjfgGVYmlKqqHgIQbqLE5JqHU2iOYwvDgsd.W6tNbsGxturjre6AbuGP5fK.BZFXj6DF8taHzKAM5EmB8lBJEgBktmCJ8wr7hlxF1A8fwm6yVQyFY1V.jSznhyXYty+8CYKnCiPyNlpPOTYS3AeHhtU73avkZm3q+zU4Q11xZcrhYgrOWWWsJZ.RIZhX39Jo0QVCESQWPpL.eNqnq8c0abvyJUn4KJeP0hkZ7Jb6VOoul7isDzrh0EILXziEELrhoa2dsMV6HMYbG4pVsPt57qELovxsqhdKAE7LDcJia0m7DtcyUoFWiRR8Esk00VETqrr4FHXxYpx8kbtyTGuYpgdeLorufFnrYFEli..v53UQssAvLUwfTP.jHQWyq80lXzMj6zcpCuQEnCBFF.fglxtMpBi1ioiAQW0PWCgoNmtCuFj1Zb8fzXrkQo00tLNcGdYHs035AwYYZ2Wivl4L06qIkH5v0W86VkC9wDY22TiaeA6twH8EcH2mykH95bOA98SW8UXQ0QFRfxOgyw0.4Jw3NVPoOxZUOtbLSTGvFDxrffhRKvpPT+EM5.7PWmyYIcXXXkDxL314So6yDY.ypcT2VI+BSvcLK1Byhv5vbOlycZ+btsh+TmA4vkvycz0rQCsWaCt0d7ZbOxitISv5vyqwIkeM2oGnPfAZoqfhYXhW10nznv.6gguZCtbVizDqoaK2VVT.SbXtquJ0BwCVwiRZLKJYEGI20SFMnIi.lWiqgw1flwNKhA3F0wigyYKGhqrKIDnDg2eiIYOUAx3cGdTCAMjhurF+.FiBMj.lRGuAh+oSr1fSmbJJQiOrb43kyjKU40eJV7jGXkcHzN0fsvJ6XGQNCOcpxIx6L7cMQHswUW2GAxkU8gGKDHLHPHPz9EZYEE6EEuIxg+st6rgrcz043EZiTFEZJTwy5dHW6Idv6zPTr.krFOMXcgIrnovUNnCWaScUt7511ver04ZpaLF2nARzN52.VzmXpeL8ZGz+IxR1cit9Fz89stJAuZc2Mz4LLTFMlXFVdf0CMBRLqUudQLYWJLYyeTMbUoJbv94OH+AmVhmx9EXqpkdd8gIloIL+QrlirfW.LWI3HO0kPSYtRN24JoybUD3Oi65YOASIQXdk1W.uKt7oXLiDqEdtJ0tMVZr1jihrETVSAyG8UtwwI4thXDxTWIpnG1rg6NdvJ7JSNcXU6b11lxs5aihNk9cvccS2og6wIvRV.GlKk6rqgfM91nlDQudxIwsN4.1L0MwqBVnNNQMWMiqmlRPQSXUeaaneJY9y0zaMaEPRuyP7R561lW3feaD3yYVL.WLa5DOMpgQdLkWMW4ufvT3ZoO7K7B8PTs0KTDZSw.DMQf29p5hBJU006kSSpLBBaDG4gyX88x44YH5ZRfIMOFN3rxiIEsyFb5st.3ENNww7aAXof1hI.KCk68PV44DAC6lbQsfrJ3Dr3.lkMvxa4Of0cgYbu.kKWJ8Vautaz.tlPw.fjvVREz5.Q5IrA2lqGdoOnuMQ55ttRBl8.qyVcgDf3ZCsHhYkfLZ8UuNeOtchYFScQ2fKgmuZXMaBN18VvtBZRJdKOwofCIaM4Bh4c3XBbdzeQgAL0nsg0LSHLKmhbGMjDd08mqM39FguI92BATj.b0H7MI9V7uS9sfSljjFR8sPKqo3DLMmOITzT2PBREhSvzT+Jtn8sfXz4vLcNr30gdV2O7stfnGOWDS4tNM0aCttvTtqhIdRPRDltyjZI+RzBw1wKaSSYG1sG83REcgvYSA+0i7fdHMsQn+.zHITf5Uva7VmXO00HBdomXKg69g0ep+3RNmwg2GVovA03CmrPcHycjMN05qKmgfQENMfV1ZNcMSf8GwX4bXMnyTWZGS.7Guaz01J9NwzZt0yyTHwn7u7xhwNs7y15n7aO3ppwjprmLeU9Boz1Ke7bMSOrvEGe51Mab9Qwz2qh0iNnE+lGTX6g6d.ZP5b0EicQ4Xmeb5sunVgSz61QQ94mWoZOypkO+j5mwuYomkV6.4NiTR8xcrsskpH2oiV6sO94c50d3wm13k1GLnPt7wFxeN+l8FVo19Za2qdE9h4Z9bit4K7L97sd1yezKs6e4kEx+7XBBxaFue45wx2quYupGVLSN9ZwxKWWOV9Lmr6gcJUsd2c2rRMqxc103zFE2s1os2smUNzg6d4g0D3uDcVJCypZ6wexoGVtPgNWToapL6cTb9DWlqxo8Ktsjoow.ssFbR+c0ub+gmwedwbhXiiw1LexCRkQp24sN5rizA0YcYwsyzrhP8cs6dIhu04CNsZMzKsM0ZpiFdxNR1CO57yNslw95F16bTtmWtWe08MzeV0iN3J8L6EaO6jYN5jZHCDRXT83GsovVaJbhFp546T6jmkbXiVWsy9RMyHp0PcyMS1+py1obxz5RY5Icw1hmu8VaUU7xz7p7pcSK2n+NUsyHr8oMyX0TcTZ0Z0NJi09CKodfzYZaKcw4F6um4t6egN7uKa0L9QGUSNYgxMKtiwvmUX2bkhE6BPBjBDHmleGsNwPhloZNT8py1rFJ9UCSelQSXgDLdYI09Gq2by1k0qkLyYcGURAkH0wI5aWEs4vLVUktHiZCC9CQacgb59CqD25jM60CvVqV6bYyFWs8UWdBRnfLudgz781AF7i14v96zre5dGteBc9KONgY98ZeVLYQkbmmBYd9wGdXsAGJpTbqxBc5ra6RsGDKYtNurm5nD10OQJ1yKeZtNkTNu3o00xKVp8IGcRUoBVGMTemp4Kl9kubPiSZjLW8Aw0yeQilOJ1Y8RKumcF0l1GN3R015wNI0yezkmVTXSiAcsqYdQesQMRE+7lwH6vBsYclo+.Y+r52sxpqPaWy4OVwtpqrM18+JNFswaECsYMHfeh0l7X2MVQiutiKlWMVoEDZ2zD7IX.Fk0rWHW8gAYFd7ap2Ar0lm3oZpd8CSaXuMs5342B68ckY3g1K9fM3RSJVEld7sgMUSrgwWu7XIieZlZmuY1YDymOVbsw8I21Meetu7KAABzxJ9SrSV8CbJaHv0rMww4ApAuB92XfF+5AssfhEQIwE3YFqHk8+oGu33j05OkhlqoaiNPKJgxf7G4Fuq1smZetSkBtbcSoabgkMuN.ip0WsExjluhGHSj6EthrrythrzELVzgyPMPcsJZx1GXfzlUYjYbYmLLQdfKVAC0lT61+F2Z2xqHKgLYjkXh7KXIwcyPP3fhlykkYgAN4X.+CsWBfSM9J+vk.3ziCb7WOSfc1xS.dEVmGlfp+oudY.eb5lwk4uffmZIV8In7MGG3ZKAaaqk.wm.3sCA7uuc6+yk.sy71rx6DB3+3e3O7uuPq766ngG+sB5ITU929pIf9AtP6EXMA96y5GO9BHumyTLgF26mk4nJEErEvmUi6FevXfAxzVFamIRQz.YQjyI2rBaQjUOacClHelugVfBcV5OzcoqnJzA4R5j+eBlgzxqQAO7UYuBW4N+Fd8+T1tjLjBZwLK3rz8j1VichSqwDmr7laxEM05wLz5vnnK1ibvQ2ggBCe3bsdQggEyNhdWQXLjox3XHzhEXdEmZIleGIxcwORpcZcci9F30HWK8AHFvzNuMr9VAT2KvTmpEtUG1Vje2DzXO.AIzlstthsLLg+8r6A4HdYeYwdJivYQZfODTreDjVGXVr3DZiKzpcWn8t5JRbxVbhl5jyTSUWBVl2ikbFmpBTD9YYgncL3gTOo0ws52tsLLJVVNUKFUYIHm855VxX+VzLAU+ybk.lDpsPeEmhJGLrOMqrUck9cj0pKfEc.VhkUFgaxQZ+9rNkEhgVR9qmqqj.B5G9l24kjkmojTR1xSXdUWjFmkbGMAENIXuoEWKjB.lu3c1xzr+qiKSIlMVHYZ1umRlRjcSWllNqgWzCUjvm37jE3iwvSzVg3+pARAIXAFIVXkg.Xn0F9UyM1.J0as240FxisS6qAHnBYHXiqiCfWH2CtwBBhWU2DwA43QF3.DsZCiZ3a9Pn82eUVJ49WjfYZ61WRQ4ufsA9fIVBAoGDzhwOYtQoEPE+dq24EiEYI24.79VyPRGNKaASaKPjBaeCjndivQv5rQ2cKM1iqnLrcOrfs1qCIXYXligao7yzvcxWujh76y1z2tyhK1oghVz+gKPL1ATJmIkvOKZBY83wS.tzvU5Ee4gpMRw87yXFWlNYXEN0g9EZXXBKa+R1bRRVbCj0rAX8Ec5lbWIXpZ2kSPC71pgqwfEHZIGaGmkBFMUFwrzrZBVSP5kgUG.0xwpocdB7xaFq9CYy0GRT00Z8375+tYwqE.fByp+B1xD1Bm6bwI02DWocE89Rb3KHD143F.ykrWxsSvUJxdY4yNnrmCloxTCOjoJLVNdMsqoW24FxquOadSY6oqUOSNcK.jvb5ulMuttksm5ZqQboh+YbWIiUmCbyfWJYqt3iEBesQ3D6BTuHl3WR18pDrlfzSkWS0+bYz+54lla.a9Ge46rtNHRy6vFHRxwtGfKOFqliOZI71.bPgdGeOmnroXePzaqCaOj5KhvtTdLBL9XzW0.1I35.49rkMQW1GoINJrKjzYCEm32Ou3D26kyxEBmR1kNpA9B6UuLyLLewW3EkIj77E++p4Vnh.Z7u78uyG4PVuMh3P93Z6J4fDwAWJTBeCAXmI9vBkPOFu4Dr6gHWSiv4yEcp4yMq.A9s9QGdOVHdgkTj9Ar6UtjpQWAKYqkvW0pr9.sL4qu8LCHT6cQw5WxlWA1ZZwAwJ7XIm68ABGlfQeaGyrdwQfjdRP+58sgAvL8rtB1bdW1O6ZRKeo2ZRP0kJfdGHt9RI3UsJeQ7GO2B8MjtdvuqKhKwVQsky0LGxN29J7cwyfHNFfdhFpifMISsQhJHb7+NmAkEGjmfFG3GUUWSVzJLO7uLysp+4kMMsGvVTF5Nm0HUnMyQKUzjAPQK+9kysVqypPLuSJ+JDjehadaRXNFmnhrA1cJHTAdSPpaeImkNoFaV9WNOlwp.V3TzxNKg4OsrByO1QXFbq.WBo4GvRA1hIN8q98rJQp16l4fWgXcsC99v1B0V2WhFHvv6CcJetEmj+swCLKaiz.oznvaGe3Lkfu+309bo8cRDnEMASDLyvFqSmyMdn2Kbo3I2qUWony8WcVgC+5ViKE+zwkh+fP1kYoZPsTO3UuUK0mL+CWYVg4sPJm9ZMoXKKiqxpimWNERYbv9lAEBGUFmBqSWwskof1G33Q+ZqsS5v01Ic1adscXX9YZa2Rqv6vHHumVzB5UBqSUUnkuNE4+mXVEn.7vDVN+CGNgbNcVjjrs.4TxibWmTt7Oig1fg.GozCXCeYBWJDLTETN6V.ACp68sDFFptCl2BXHck8tkvQ5589ZkaAbzqny2R3GcQEx982B3GUZP2RnHchu+wQWGJxzbAEy7E3bSK+VBG2dVaV3LuYrwPQ2bKgjYlkImaJR54K+VB+niyNK5V.+nC3+sEGWw0rc7YYz4lyDcR571BASLqcz2TDz2W+Bhg2218000ACKqnKfe0OaJq3bUJ9HV5ll8MpfgYd2nBPI18ddzzMpplNg+3DAm2cUDF+6kISl2fgP1FoFz5adyaREt0j3l8V+fqou6f+ObujN9z5pK3scYHsMp.Z7G66T5R1H2aBxk4eXJjqe3c3Lm7Cy2o9x.M.A872xVnZob0V8jbM1e0b6taiR77UNtzp6kqQwwn9u9e4idy3DzJK3cugJH0KlJAc2Eifbw5Gx1Xe9UqWJ2yWE+llUoVohqFjADjyueACm3rfVcdaHBEHCs+iexdb+GxSIh5I2P7grM2qBeSLm8fFjcEgpNzOjM6auAQmWD1Y44ahsxPZrStU1KrqGGOVbbr0SfoLQCQcKCpQmRD2+3aMpQiFSCMYl8czJHasOhMz81lITpGTmJU+4igEyRa7.14Oc6ALyX6yTNrr6y5eGce6PLKgAnJdyDvtlJh5sy42whuurOYOHKS2aSMWdS8qrfHetFoc.K89Arz2B6z+Q6rgs7.s8loa2kz7.ua.LaD7i3ay23GG4B5cI40f0NW0bZGWTDaH+JeDqSqdrNZVNLQ+WS5X4O8le7MWiiExsT7N+y2gE+xSuFVDwCRU2Kh+WPtR4a30SogFf4CvzmUNKXp5qhGA4li6ODx2RCyoCN9FdaMwbBa2bFdntBZ9f1sw217u.+BW4ATNIoouDMPZfsto2WQHkO6YzWYgA5l.Gh7FQQ0mKlUAnZITdcSf1BQx05q5vHvHeRRSNOSd2oIoGAc7MjWqr3wRM1OarjsCM+sj0nJ3vMmIRvm23tBaLs+3CkCl0P+p5BRRfV4hBGORvTradASmWMDLXNcrutoK+b7dBzgFuGON8D8t5qVjMu3WLwo4JaxOHJOfE7O2WQvN72mEb0Qb6.mOC8GEkJ9knjpLx2ZezVVTT7iYqKaK1c533clBNBVk9eCbz8ScyGx57tpGff2is7o+L7cs4gNq+mDT2KNmBewAKOFOlZEwnwqZH6qzM6gGYyfuoQds5VhJpWsBuZBQc.YNE3fpZ0AUkg5kaf9RrPIV7uuETpSdut8zmgwXmhD0LPUAapxTN9AUDpK5W+c5oh5fjoZM3NMQ+gchjDH0KR.UcEotn8N21.pi9OxcWX8fDWuZn+mnGaSR8XAyr7fiKQDnEpg+nRf8GeGb7NNOG2y+LOf4jGfvOdiamIvOGwsyDdcRqp+abT0tO6IfYKx2nAhB1mPdtstoJ2tHMjIdeZhq4Sh0edQ+jXYrveRrNPzFPAmWGMcKHCUpYlGoJ2DhWvJTqiAQxoBQnVAUx9ZgmZmlBMJLqnLvJRPqo30XR5isABYKzjAOGZl1WNTfPkzvQayi.JW5.KQfwHDZ+wO8006CtaINTSPeNtAMmjtYrQAPFJFx.4cutOLXItgeXvdu249vf8WAtACYieEObjWV0PAURa.RQGZAii+RHSaxUzvq0va81WWS2nK9.9oEzM.Knxc5fBo+LUBZby+ObBy+LeZ1pxZPrOiaebI3EIV5uiaSUd8acOPENr8Bt+5M7k69+qCeYw28Al.e2VJ9aXASwI4HhRt+uQV9yQL.+brFpBhl5uv6JQ.bn2mzBP2ZtuCN6ielKwjuClpfKiWHJFdpl.vj2T.ScSAL8MEvMuo.t0MEvsuo.lY9.h8niC8W08h+vre8RjxoDIhSPMjsIL+O.Oth7oC
      
      posted in General Questions
      M
      Mighty23
    • RE: Knob Web Studio

      @tsempire I fell asleep thinking about this last night, and now it exists. Thank you. 😰

      posted in General Questions
      M
      Mighty23
    • RE: Faust Gate

      @resonant said in Faust Gate:

      Is there a possibility to add modulation to this like below?

      From FAUST documentation: https://faustdoc.grame.fr/manual/syntax/index.html#faust-syntax
      "The vbargraph primitive implements a vertical bargraph (typically a meter displaying the level of a signal)."

      I'm not absolutely sure, I would try with a FAUST vbargraph primitive to "visualize the effect" and then connect it to a scriptnode node; like in:
      https://forum.hise.audio/topic/10619/gain-reduction-meter-on-a-faust-compressor?_=1754048833174

      posted in Faust Development
      M
      Mighty23
    • RE: Free Reverse Delay built in RNBO

      @JulesV
      the delay value (0-1 range) refers to delay time as a fraction of one second.

      • delay_base ranges from 0.02 to 1.0

      • This gets multiplied by current_sr (sample rate), so:
        at 44.1kHz: 0.5 = 22.050 samples = 500ms, 1.0 = 44.100 samples = 1 second

      To do this in milliseconds, I can modify the implementation (I just need to remember). If I don't remember or am unmotivated to do it, feel free to message me and send a reminder :).

      To switch from ms to tempo sync, there's a node for this:
      https://docs.hise.dev/scriptnode/list/control/tempo_sync.html

      posted in Blog Entries
      M
      Mighty23
    • RE: Faust Gate

      @resonant I haven't tried your script yet, but if you want, I'll leave you my gate in Faust in the meantime. It's still under development, but maybe it could help you put a temporary "patch" on it.

      //-----------------------------------------------
      // High-Gain Guitar Noise Gate (Zuul-inspired)
      // Designed for metal and djent applications
      //-----------------------------------------------
      
      declare name        "Zuul-like Gate";
      declare version     "0.1";
      declare description "High-gain guitar noise gate with sidechain input";
      
      import("stdfaust.lib");
      
      // UI section with all requested parameters
      //-----------------------------------------------
      threshold_db = hslider("threshold[unit:dB]", -40, -80, 0, 0.1) : si.smoo;
      attack_ms = hslider("attack[unit:ms]", 0.1, 0.01, 10, 0.01) : si.smoo;
      hold_ms = hslider("hold[unit:ms]", 50, 0, 500, 1) : si.smoo;
      release_ms = hslider("release[unit:ms]", 100, 10, 1000, 1) : si.smoo;
      hysteresis_db = hslider("hysteresis[unit:dB][tooltip:Amount below threshold before gate closes]", 6, 0, 12, 0.1) : si.smoo;
      key_switch = checkbox("key_input [tooltip:Use right channel as sidechain when ON]") : si.smoo;
      
      // Simple hysteresis implementation
      hysteresis(lower, upper, x) = y
      letrec {
          'y = (x > upper) | (y & (x > lower));
      };
      
      // Process section - main function implementation
      //-----------------------------------------------
      process(audio_left, audio_right) = audio_left * gate_env, audio_right * gate_env
      with {
          // Convert time parameters to seconds
          attack = attack_ms * 0.001;
          release = release_ms * 0.001;
          hold_time = hold_ms * 0.001;
          
          // Threshold conversion from dB to linear scale
          threshold = ba.db2linear(threshold_db);
          lower_threshold = ba.db2linear(threshold_db - hysteresis_db);
          
          // Select between main input (audio_left) and sidechain input (audio_right)
          // When key_switch is off, use audio_left for detection
          // When key_switch is on, use audio_right as sidechain input
          detection_input = select2(key_switch, audio_left, audio_right);
          
          // Envelope detection for detection input
          env = abs(detection_input) : si.smooth(ba.tau2pole(0.001));
          
          // Gate triggering with hysteresis
          gate = hysteresis(lower_threshold, threshold, env);
          
          // Hold circuit using peakholder
          hold_samples = int(hold_time * ma.SR);
          gate_with_hold = gate : ba.peakholder(hold_samples);
          
          // Create envelope for smooth transitions
          gate_env = gate_with_hold : en.asr(attack, 1.0, release);
      };
      
      posted in Faust Development
      M
      Mighty23
    • RE: Non-compliant values ​​between sliderpack (range -/+ 12) and cable_pack node
      HiseSnippet 4152.3oc0Z0DbiibcFTiflgXl01q85qoZqpRUfTPT.j5mQTd1g52YkizrLC0pZRs0Xtf.MDgEH.L.jD4rd1Ct7Aey45V4P1pxobKW8IuGiu5TU1C4PrujqYOFewNuW23WRpe20aUlyHPz+752qeuu2OMAnCintlTytgt199zHAgR2qcfmAMLzKPnjzQi7oBkdjXmQtQ82tutsqv96HT5AhsCngvz2ZjudXH0TnTo68LbzRkmUf84Ke5V5N5tFzrtDDN1y1fdf8.6nrda25uy1wYOcS5Q1CxM6kasugm61dNdmARx8DUE70MNU+D5y0woMinv6oG1WnTUw0WYEMcSq0rzZnsdOSKCZi0TWc40pquxisrVSUa4FlqYsLHjysqocjWPmH8HZnPoY2xybTm9dW3xYvw1g18bnXCMgN.m4cummiItEwdE1tusiYpJJDTXylSgcOtB6cDOz1zNs+LE22gM.Iih7JvRyTT7tWAwSKu3olS7lhHUJmHMKWjdawNFA19QYifxyCE22MhFXoC1o7hBetBy72Oq31dvLbipMP+T5dAPiTJjWUUUg.WprgjDXqBiHmqGP5z9fM2i7DRBgFATX+bfmgtyAddmtoq4dTpiLPTNZbrMoAsACrVNJOgFss2.eOWng774ly7HGY7oV.8D6PPf16LWiHaOW44MCzu3.aWpd.mh4UHVICdhBwq2OohzGKIUF4qNvMniZ5fLtAuqyi65bcmynO2KXfti8qol.CKeRsPThPDor5v0ZnVeyFa1.jEXDjqumWf8qAYG1n.+k0+vFuhrDotBQ+CUeEds9qPAuL7eaKh74j28IDsJRk+Xoxk0+PsWAbl80BjDRIUIxZ0TIKRNGYSYV+OIa3EYD.i7lxkkJScBoisZ74cYjlwj5.SpxYxah2nOKP2zFz76Atmxen5vc2lueUHZfYG++KWaucWWswNqy6RSU8UbkgEPxKnFQx5X6wTbuLYgxTbuv6LLJDRht6INT4DaBiOZ3DWZo3ohKa1v3XRuAtjCcfLaB3FCsTDndjN3Mc43M9vLnF+VbcY201y+L+T.WJ3ZnBYDBsH3mDnj7HPSqVgYHQk9hZ0q.JcYMd2KfcrAiBNcAznyBbIxGpG0uV.pWjGVEzr3Tmm72NO6qeFA+N2TNmObXz7w5iDgh349buH566JiRVYo2HQFeHKqoNFpTB7bbnAScXLXcvUQnr6YC5QCTHLGozIBAjJFkS7xixkOHrA2Fkahdt66ZG899T2KKzrPrgEypEKU.6iXwC+twwCyvMB1Pnu2RLGPRfI54SfYpGoKTRUrQ8Zvm1a9SO6Gs61Gril4tmeb+c2cgg58Or1Nu9nZ+n1a2430qEd5wd6rCWPXb+dbt+ch4N.254sk2PFukDMFz6HJ..Gmwe4SEFW9eq3UfAHYj+.QNL8xj5OPbU0ZE+b966usu85qsM9OV6id1QKrdtwe1QOq8B3sqyGGtXsPtwED9f82AWdHqQr1Fr.9zfHaz3VZG54PJedJnxh6PCOMxyG1Do9YPNnagAYX95CFk0vs0f7EeH+4CzyMU4VWXaFA0JHVRcFAg9T6S5Ggs94vf9I.l8MYU5vDBxduTSvjZoelSzwb0IBBCYhxlC.etbUvPZIja6HUz9bfdOpSr8gc+ktIZ8SZQAOCl8DRACocNwc.aImSzgZEIDQGFg5o11QF8IG5YdliN5yIjt69Lg76t+FnkEXS5.4uxXY8BR6CuY3wLQl7yxq22oESQKV56AMhEijw9wsRDkjdd2V1QzA.rvTTirkdfj1R02Auf+cDbYYr0x3eXqGisdL9G1Ra0cXWYWvNZvnsQc1EriUYju5xrKGIXG114rSrcaqG.ULBkHvCS3WrSd0j2WjuOi77bhr8y5Hut59Wqm2kXY+ng2M.nvjkwAEPxs6EqpDq8NGfHeobX4Ztg1QixGNY7RMm8lUpYVkvSqryap391bD7zk2Ylh7BAW95pzXgIKV+sD20xBppHS.mUbuW9MPk4yw4uTrIG3Ix7BHf7BwyOa.Clg4LKUB1JPGYwFS6Mtz8R+Rwrjx9ATendoi7Z6nORNTefuC8EvVQgzywy3TL.wjYxiwkagyP1nutqKTe4cIg+b2Xkm1Ua6fxDircOAp6IvFi5fJ.njRC51wRGpClAy6yaqhsQ3SG3PtrF+Y3S7fZoJLXPsjAyJYP34znK7BNkY0huGhAv825z2d.T+SR2GSCBQbLD1PsF7OgMcb7t.CcXGivA6Gqu1dNi7664ZafcwmQh3mjWguGfS2djtsC5Rz4rPnJGy22sCLY1QpQH4y8LwHW6oa.J2Qs0w3KusHVmDfioA0LxEeXL4MCVgZZdHvIlDt9IG+lqFAwkmPBN7MZ.SChhY5mAPn.En55dbQaNj2RhC7L4hRAI8cxIooyXZxUtE3pknL9Kli+kECsOoNrDEY+2Rb.V8bxXE7yXrMitqgqyjqdGH7RlJAc1yR8L2g1tGOdgYGpO73wqzqSD0uXFa.hdJ8Bt3mel3169h7EXhkVHmN3QhQXxrtgibMllU.bdqkaFSyJTXItN6PVj8izCfCUEFWcnK0f6LvvtX5t4DAEjelVimBrMMv1yj8yAUTgN6zUnhnWWNk4bh0WC5HSSJJBGhVfqu340mPes4YQd.jfmCRHGeDyyGsw3i1pWBedj3gmgUR3XCqQAxEtY6A9jm1RWVbWWLOf4sXSbEL5AhvoKUKvq2AlB1I9Qa40U0zVUiw5uk3G3hH.J23bc7OuiQN3XrQu.P7g.PLfViMvzvewzbMHuYu4Hu2Rz.Uhc40aW..l3Swp8ygNL47M6XG5C4O25LnbAt+cgdf166ZRGh0Orn1XH26McD0T0z2MaSA2lbFB1Qiyw8YuNLG+2E7.OOeHicPzTBsbaWs4f5Sini6FbInihFlBfjueZzp7SYxX2EWhqCyTPPt4.nGHBmNLLRabrSXea3rZiichqbK4NArNWFVgKQ6BUNYBkVyldoUDarZ1gzSO486UagW97Cd1ZicR73wuhbO2+a3bOECCTHYLjPsNjXcpIiSFaZIiSF6uRSFmWRJf7YGH.aMBgDL238COFG0P2IYgJpDSAdEzgOhG.kMzTzfoDcc4tKHbyLlvUVbaGXg2OK0SRQio6pjo9swpyyssSb9KMg9nz8uBKym8oe5u9oiYY9HKq+mwsLs9Cu9W7zK2x7PQSaKqyXEoOl042+TguFPFWC+KKZFLZoKnEilN6W7ub64Nr6+OukbWRzhRM6g+jZ4WoeLtRWE6gkMZbkeKou3+cb1+6OrW6qf8ORruEwDReCmcSXh0+a.s+ivvGI+VCWo4eJQJk+7IE.4ViI.LX5UEXfmUH+xP9m9ze6SuIErksTSJHOXJBx+5UHHyAmp40SDf5AsD5bA9SxjlyqXPaG7I1BRUg.NeWQyQt5CrMBqkL9zBbmL1W0rv25hwxRvhmquXB13y5WHJj3Uq8+GlBLPP3FAC97S9299s33vi5GPC622yoXw6+6+w+7+8u416Hzx6lgC+nk+G+udJO0wlQQiGFXhZ59KDyKK9BpCUOr.76yWqQisZcGP9stYb+y9O9S+tXWvWf.pB67YDD9+tKweDZMYcAe4Ul8oisIk+aXb00FT3bByk+.q2LIaiagjMwlJegtWdcuE9k.Fq123ey7w2COjOPGjh6dkW2v8wW9zup6irCXOwNYNQ1wqtYNH+pBFCHfy+7kmkHkTXZPmuyWYiwXGU+NUz4VddmNPm8SfdmdLeei7C1NP2Hvqa7ACwM2CX8.tRtwofNDaSlxyEcfsocWCihK0DDV+tRXi6JgKeWIbk6JgqdWIbs6JgO95IDeUohKPBQ8fKV6c44uKk3fBEZHPiSsyevGHVMsGW5v8riO2skM6X23WbI46wORzRwmfolYnexaYfvLewCEsAGqfH44G.Gav.pwoG9tUjzIrLfi138RYOHojdkVZo3GMRHba6NjDPJYQRHPhiskM0jD4Asv25ERVUpD+DeYobc9DRe9SfFDpzdmWgnVaE9KJCdqJ9JwrzRjcnA1mCKe5JERrB7FjiIRT2yoNfWLrvp0zHKjW.pRpWa8MHDXkFn6GRTWTCkTXdK1PJzGNOwzoZcFUjoRnlpjI0OpOPYFM7Ym+y3TtnljQTfSW1Ngw0UljHFYV1CA4ROhXPwWRMhkW.oG+0PzjLvdnDqL775QVGyyzdKpUWgr.dAj0Jafq2N1Af8jDRgZX8boIFPbpnjASFzzufdNMnWpwUBqvt.Kf1yyLNv+avLQq.lnzCjByMaxo8lZVqwrpqkZZSNJWAxR5juSv+WqwJojz2pa7wuxKWYGJiwKU0Ux805qG2hildliGnGIRvoX6BmhM+xDev1oBCQO.cWROJQ2jAzQWCIvP.DBWq.qS2prWEJrkR2pvWMe2tLBiylEXajnZcvGtng2fd1tvQl.mlSb0chQ0oPYKO7wrA1dcWShWngsC6oOCDlJHzLQwnKLeb5PBDncPhe1paH4mx+tY7GkZkTl0MRA3N8mpPXvZb6HCZztIxfb1Dqzra0oxLneFwJfrJiKVkpfdrYWk39qzLSc0r6BH1OmZcf24Y6F3aOoWhBAPckeXS4efBbixO.LDd9Vx5L4q6BnFeQ8JeRKYsJU0AfNtdjNrGJLI.0r1vImvG3H3DA6L3LUoOs2PoAgcif5MXyNTdPHtn1tQvcfyOCv.e24E.O0cbviC1ENYY+tVr0Q1LRq6fPECOpkhYTc7d3Keuvt7UBkbxOrIQtpLNG.RzbglsjKxT9hToRy3Ec7QwkshxD8FykJU.W8JjOgzk.7ATQYhJLKThr5Mln.cbIBxksfINJc4FOCkgpJiTUFpoLRCW7PpSRm.0wsXCJUF0WjOlHUtb43ATFwDHsEMpTcHDv0n5nMvwIuA3zls2aqD8pUOMPedNWsdNeCmnms5Um4u07JrKSi9JMyzNoKD2CkkQKLR2MJL0+BeQANgiIgi7Dfm2ivSKFCk.etX8GHM0UW9wa.8LzR2jBwveBQSs9xavWbLEIE+IBXNJnqu+nEAIIBVdlSOK+MIfBBJ9BFLB0jTRsknC4LXIe7G0nKKFOOAuTTftaHLeJQ9BEB3KCRNDHoBvZoxbkgFrSUv9pZMv1U1bogJZ3qWY1nKbAebvhjaJfoC1AwlOz5YiaGH1lu2ExPVkvkzpydIdKioNsQvxBvkEjunB7kEjQDfbWTggj1fsVrOnMN9UwPNFI.e0DgmMkJCe8R3FY7tpIYA.WbH9ey2kAMzZTa0pXNHEHKR0z7KJZPhE3upxXfGsJKnUYo5JvjWOcxqjM6JMwHHY4Q.LO60U8xX5xqVqwzVmw3ZsUh46xqM84OIekJWo4Kq7IE2vMMMXuHKTH7k7iUgIMgu55OFRpWAzXL4akF0TuVkBLTr3sRN0xx4ktw4xpv9.3RJJSNErqDCxUJyeQekG1b5YXxJ0IKQC.dvJtRxy.4LXXZLzysUOno93ZpYJh5KeSPGvlhqHpuRs52HEwZPhpqUQTFA4vFXzWKpBvyA1uEC7F2BBg1UYDFYVP3+WikqcE
      

      This snippet shows how the modulation is correct if I replace a sliderpack with a table.

      posted in General Questions
      M
      Mighty23