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

    Mighty23

    @Mighty23

    just a raver

    72
    Reputation
    68
    Profile views
    345
    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: I'm looking for help with a paintroutine

      @ustk a little oversight that was driving me crazy, thanks

      posted in General Questions
      M
      Mighty23
    • I'm looking for help with a paintroutine

      I'm trying to create a correlation meter in a panel. I can correctly display the positive side, but not the negative side.

      HiseSnippet 3019.3oc0Z80babaD+njO6XFq15LoM8QLZ5zbTVjljRx1wNpVxTRwZpkkFQYmzoSGMf2giGFc2gK2AJZ5L9s9P+Jj25q807QHu025GgzmZeLeCZ2E39KEirrpiaK8XSBfcw9C6tX2E.l8BIKzg4bbRHOJhIMLpM+AwBaVRhH1nV8ilDwLpcCy9SBkd87n7Pic2xn16YdPLKAH+QShnIILGiZ0l+yvQqc8qXn978O7QTeZnMqnKCimK31rmvC3xhdOXieK22eGpC6HdPIpWcicsEg8D9hQ.Rl2rsQD09D5P1SoHYyYZ7XZhmQskL+j0VqC0w8ttcVoymLvw0lsxcaemUuaW5Z2y08ts6r5JN20cU.jWcaGtTD2WRkrDXRejvYReOw3Ps.dNOgOvmgM5XzGjrtaiddbemb0RBnjLKojlWqj9Py83N779KTV+L0.jBNJqzpM24AoNuAPpVIHcEMjtoYe6XdjrXDDOuu4tgRVrKErMkghlVi49Gll8D.EgxVAzSX6DCMx4v5t2o8xjUWociGrP85291jdh3XlOUxEgj8X.UKTGLaIRxozXRb.Ycx1gC4grVCYxOyWLf5enXjjGNbOZHXLisvIpfinPe0r.7kABfwdhfHQHzvZwLBVD4aADAOKgQjdLB6ETaIY2sHSDiHComp6cnRlGaSAsHIT3vH7PhdohsJK6RKkdJxWGV.JwisrVb5wKAgHGv7ks9mltVwrg7DXndTe+AfSrk6nPakFy5Tp+HViEp+UKTm.ef4ZK1fQCIQw7PDUvnIDoffnT3yzT0S2nkhnJ359jEI2RylFbH4YprV.HosTCBKM02O.kXB3+wzsmhgXVDEEQiGPx+.LDybhoiIQzPl+B0e0xjMSlDZ+Tgj6xsU3.XHU07XQL+kfkj5CqgBWk.kQFmFvUXg54RDBpb.JRsSBKWSYMrPIMrkKDwXSeeq1uXmc5zF+SC0JAUtCiEiBcxV6ncMaEyS1h4BSpikzimTRazf7PxTcQtOo8CJOIigIPQC3O74bGomxwMaTuRi9XFenmrxvAbGffwjaS5lOo.bg3B9.dHVsKqaZjsJSPGeL7mZcp+jMqZcvgLao0uGl8kIvtxNKS79CMpf5AzXEXAouGU50hNHI0kirDhpbh4to9hjeCocJBRU2yBLqtZud24NZk9vXFKj3JfMuhDtjCa7JsZJOGmExJPEPegU2kywZirkAxzqzew7gM4EX7SuHXrWuUgOZLBdrJDFxFRuvHjz7GBeWPj+J72460EgvND19gVMp+U0ud8WUmL8PttybLLPXrv2GCVNigwzlwmGiVgiBFvhWNMtPFgPZhp4dt5EK2isNtbIBEg6Fxk6GwRauiv2Ayof+9rYpLRCrC+5Y6tEriCSdk1GPWDKVxQ3TaK1oP4B5TYW2bKVxIRQjh1zrA.jkpQWHKQGFQxfChttYVHEiWTTSwuaiI4M1fswXznAIyq8qmyvvSssEa0UUVxYxlB4wENi.elpI2wxdRG.z5UxnhYMCgsDSJWVzaPF+1maF+KJDuo4Abos2rw3by.if83GCLlVmzBla65BawJ.3UL24KtrEE09Mtnn5o9JfLQgeizljc9hNypbnZ+IyhsTQXBwX1QhC7oSrRnAQ9rCALBg.7E1mzm+R1Y2GFogviPJrr8ngfOZxkY65UeKUpnQdEXxXNr6v7oiB5CQMsY8RQGtKXNbmptcarM5WzGNrfpw+B9jNXGrcszA6jMXoM4OkIGKhOQYNR+sQsqg59qYp2gBoxEiwc07TGT85gEmnZbMy1sf+nI6.g+jHOQH2FMRZlxv8lAPpeYF3giGbDk6iN48Gk.Amb1OrOPr5LInS1Sg5+.s5NPYih3IGPwXA2zDCuAdlPsH14dnY.sv+.0r5ChjMFNaYmVQqs.vEnhRAmUo1733nNHSr540kNJQZTAB2.fPLqkdjYKQ8XuNIVJXJzSZKXe9bnnutYOeXl20w34naFdltd5EhwTT9SQ+iCnwTUMaIYzqBtWpaTDYsfk2d7vTBKBqrG8ES022+v9RVDtuoRemvFqUIk6Ue1kM8GBUTJ8BLNyzabNxei+9K+iObJ4+m+5u9uNs7+t8Fbv4H+OPc1ogw5hXUGXcpY7u7Pi9iw3sGQighAUd8k6HMYWHSsqOoZyTuCvnT6mXV9jKEKMbrqYpEpQIWoonuhG0uvLVuiuUEZlku0TSSYWraXtZ26sxZ2q6J26NmmmVso7etgYoEXp15CLm9PRS4KUqjszrvVdUylcfHAEFRSSrcgQ7pXrhNoaZ0zr4HoH.BYpR2YTjFL2.UQxFul0xtIOGG0l5msVfI8QBwIATULtKUMMkSS9Q5AeeyOGNBq5dWTqletpMTCa.4yXPzILGemy49W9aWz6eI5Be+K6aKAHbTLMLApzm0o7L2mEvOBJJKoRuSwQ2YxQkd2hIGEVcp0cUgJTUrCnJJQ2GtQVmcK2ITQXkICZWZ7s2XOdoxC+tGtcH5K1mAqbm8SrAECcpn.GLBNJhpZ+NkYrn6tk69wzXGvFZWo3p4qlG+JWr73UqyrD8ynrmq9i00SckKVkXulC.7+90VWovwqmgw9brfusCOk4CaoMzID1hAYi8kY8VcO4dhPQV0JEd.GxfBuFNjUM8xrVPaJkT6SJ6PeHymQSJsO8WswSfpUnw6oxEbozEu42r3LsW+RSMbU4EI+mX2dm5lctmOZ9Kz4idqi2K+YkdGuCEhe9+OV5OxDho2knL2j+6aueWbLr2ExHfZGKN1Ve5ULfw6o5AV2gpZJut4dXaRGiSmtj8.H0yw11UmpyvX2KKiqbYYb0KKiqcYY7NWVFu6kkw685YDqLHs7YbeBbBtC1VUcasZ5JkTaYLXACXNfmt9JSPW67dBYuXG3L2pzHtbbKxb3WZj7A5Cxd6doOOQRT1kKZL2+78LgrshXo0hIRGEcs74CVrwCvmcZ82peTui09Gd31OYyi1c+mR1a6i19PrS7uaRvmtgIHQdPd2Y7HFROpj.ayhFISHzzWaX.SNFuV7lcHzPGxs5fSEOzQ89HgCUOMkdBylsDOdTNa9LWohwX7RIIY2ZTKXVvI5VcHqSbG46OIGOLGhU.TsQCbbR67wcXkoXL2gktdTD1rXhngRdyxzBKIhvUixFu804n3KeXZIVzf5w3.jPr3gjDUY3IMHMIxIQ3QtHvIIFxHcZ2rS61AI04E7erh+0IdI9vZL1ZwoOn9hKSfiFtl5e6f+aW0Oa2Q6QQ5GP88K.fTf212ofuHwgeJGuIJxfIjWxhE0YQIben85jNL.IpWXXmMeV+iHftBbAxuSO7IGvmEhL.zk69wADeQh1tNVLx2g3yOgodcOne8yUppvDOYsF3Ma07iUn6IhwMwjTDX2C5zYC6JccItwrubDKzdBY.XkbH.K7ozo08ibOFoCgaq1jaSr5BesDIf15fcgumVIlpOdDMgaOC28pHrdIBNNH8kaOlrL726Wl4iAqmc8wboG4qTOOxziY4uLItAvre7w50Hrb.rl7kPH.+tE8sDItnUCxsHoViFposjDRejsdwhjjlkWG.mADqm.yzgMxorrXWmX4ixoArFb4s7EiQUuE30joKAcTFikkEFq7LhJAj029MJq9ge62TRhcOiD8uPRLtJiwWHn9pGT+UZC6lHqg5mAaJ2sQIXrojQA21gCEdFi2UJZ18DNm0PeL0WdNFab3yyfiimazs.YdbjXL39zjfxV2ngxCHenaUZnWigGYJgOTqXuEJjkfc6qUnDUyTNEMmAEExMEeH0KkMyWHKUI3ByQtHWJW5uQlszK9DhK5yva2qNMuq0I36gEOwZwbxVT8Lk5mENKF2dPkvU1RiFhzpf0ZP5TRY5s3HC4F8O89Dqy3VrLYldJ3JUOkcsxERJr5clfLJr7rcILs2YBXfbE30+mk67zQZBinRzattspYt+DEOHpG17GHNy8IdCnwPXuHuJ+Gn.zZMUJrF.YZzkVydQT8lYUDvCgb9KmWe.XAkdwhQC8z3urh1gmD4SmTO8wf.HpQ7CpaX7uAIq2q8.
      
      // Horizontal correlation meter drawing
      pnlMeter.setPaintRoutine(function(g)
      {
          g.fillAll(0xFF101010); // background
      
          var value = isDefined(this.data.value) ? this.data.value : 0;
      
          var w = this.getWidth();
          var h = this.getHeight();
          var mid = w / 2;
      
          // Midline (0 correlation)
          g.setColour(0xFFFFFFFF);
          g.fillRect([mid, 0, 1, h]);
      
          var barWidth = Math.abs(value) * mid;
      
          if (value > 0)
          {
              g.setColour(0xFF44CC66); // green for positive correlation
              g.fillRect([mid, 0, Math.max(2, barWidth), h]);
          }
          else if (value < 0)
          {
              g.setColour(0xFFCC4444); // red for negative correlation
              g.fillRect([mid - Math.max(2, barWidth), 0, Math.max(2, barWidth), h]);
          }
      });
      
      posted in General Questions
      M
      Mighty23
    • RE: Correlation

      @udalilprofile
      I tried to do it in FAUST, then the value in the UI must be made with a global_cable and draw its value in a panel.

      import("stdfaust.lib");
      
      //==============================================================================
      // CORRELATION METER
      // 
      // A stereo phase correlation meter that outputs a value between -1 and +1
      // indicating the phase relationship between left and right channels.
      //
      // +1 = fully correlated (mono)
      //  0 = fully decorrelated (wide stereo)
      // -1 = fully anti-correlated (out of phase)
      //==============================================================================
      
      // Integration time constant (in seconds) - typical range 10-100ms
      integration_time = hslider("Integration Time", 0.05, 0.01, 0.2, 0.001);
      
      // Small constant to prevent division by zero
      epsilon = 1e-10; // FAUST has a function for this but I'm lost and would like to close the implementation -.-'
      
      // Low-pass filter cutoff frequency based on integration time
      lpf_freq = 1.0 / (2.0 * ma.PI * integration_time);
      
      // Basic correlation meter implementation
      correlation_meter = _ , _ : correlation_calc
      with {
          correlation_calc(l, r) = lr_filtered / (sqrt(l2_filtered * r2_filtered) + epsilon)
          with {
              // Cross-correlation term (L * R)
              lr_filtered = (l * r) : fi.lowpass(1, lpf_freq);
              
              // Auto-correlation terms (L² and R²)
              l2_filtered = (l * l) : fi.lowpass(1, lpf_freq);
              r2_filtered = (r * r) : fi.lowpass(1, lpf_freq);
          };
      };
      
      // Alternative implementation using sum/difference method
      correlation_meter_alt = _ , _ : correlation_calc_alt
      with {
          correlation_calc_alt(l, r) = (sum_power - diff_power) / (sum_power + diff_power + epsilon)
          with {
              sum_sig = (l + r) * 0.5;
              diff_sig = (l - r) * 0.5;
              sum_power = (sum_sig * sum_sig) : fi.lowpass(1, lpf_freq);
              diff_power = (diff_sig * diff_sig) : fi.lowpass(1, lpf_freq);
          };
      };
      
      // Algorithm selector
      algorithm = nentry("Algorithm", 0, 0, 1, 1);
      
      // Main correlation calculation with algorithm selection
      correlation_calc = _ , _ <: (correlation_meter, correlation_meter_alt) : select2(algorithm);
      
      // Correlation meter with UI elements - following the vumeter pattern
      cmeter(l, r) = attach(l, correlation_calc(l, r) : hbargraph("Correlation", -1, 1)), r;
      
      // Process function - stereo input, stereo passthrough with correlation display
      process = cmeter;
      
      
      1. Two different correlation calculation:

        • Direct method using L*R / sqrt(L² * R²)
        • Sum/difference method using (S² - D²) / (S² + D²)
      2. Adjustable parameters:

        • Integration time (10ms to 200ms)
        • Algorithm selection
      3. Real-time display:

        • Horizontal bargraph showing correlation value

      As for the implementation in HISE (UI) you need to connect the hbargraph in a
      global_cable scriptnode and draw the "bar" in a panel - this is more complicated for me 😧

      Since I'm still a newbie, it would be a good idea to properly test the implementation before putting it "into production"

      posted in General Questions
      M
      Mighty23
    • RE: Modulating in Scriptnode with an Oscillator - what am I doing wrong?

      @Christoph-Hart
      6252a86c-bf97-41c8-9aa1-39fc9d0979fb-image.png

      Oh, rightly so, the frequency was too high. It works now—thanks.

      posted in General Questions
      M
      Mighty23
    • Modulating in Scriptnode with an Oscillator - what am I doing wrong?

      Immagine.png

      These are the nodes I'm using to create a modulation signal, but it's not happening. What am I doing wrong?

      posted in General Questions
      M
      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