HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Noahdeetz
    3. Topics
    N
    • Profile
    • Following 2
    • Followers 0
    • Topics 16
    • Posts 56
    • Groups 0

    Topics

    • N

      Best Practice for Creating a Draggable Filter Linked to Scriptnode

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      14
      0 Votes
      14 Posts
      494 Views
      DanHD

      @orange you can. Change the index. And I think you must make sure all the Global Modulators are in the same Global Mod container.

    • N

      Unable to Load Project After Rebuilding HISE With Modified NUM_MAX_CHANNELS in Macros.h

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      4
      0 Votes
      4 Posts
      226 Views
      A

      @Noahdeetz yeah the xml is basically a module loadout for the given project directory. Scripts are modules for the midi processor or includes.

    • N

      Any Update on Standalone Audio Fx Support?

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      1
      0 Votes
      1 Posts
      116 Views
      No one has replied
    • N

      How to connect different modulators together?

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      4
      0 Votes
      4 Posts
      228 Views
      N

      @Christoph-Hart @d-healey Very neat! Thanks for the response guys!

    • N

      Best Practices to Parse OSC information based on the address

      Watching Ignoring Scheduled Pinned Locked Moved Scripting
      1
      0 Votes
      1 Posts
      207 Views
      No one has replied
    • N

      Best Practices For Automatic Gain Compensation

      Watching Ignoring Scheduled Pinned Locked Moved ScriptNode
      4
      0 Votes
      4 Posts
      737 Views
      A

      @Noahdeetz said in Best Practices For Automatic Gain Compensation:

      What are generally considered the best practices for getting RMS in script node?

      Since scriptnode doesn't have a memory node that updates on each block, your options are SNEX or Faust. Default block size is 8, so if you want true peaks which means per-sample processing, wrap your stuff in a framex node.

    • N

      Current Status of Whether HISE builds plugin binaries in Xcode15

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      2
      0 Votes
      2 Posts
      250 Views
      ulrikU

      @Noahdeetz I still get the "Cycle inside...." issue with Xcode 15 and Sonoma
      I've also tried the latest Xcode 15.1 release candidate, still same problem.

    • N

      Error During AUi/VSTi Export

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      4
      0 Votes
      4 Posts
      381 Views
      N

      @Noahdeetz

      Hey @Christoph-Hart is this what you would recommend?

      Best,
      Noah Deetz

    • N

      Best Practice for Getting RMS/Peak on an audio buffer

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      5
      1 Votes
      5 Posts
      431 Views
      griffinboyG

      @mmprod

      Create a file called Griffin_Rms.h and paste the following code into it. Place the file in your Hise project under:
      DspNetworks > ThridParty

      Open your hise project and under export, choose 'compile dsp networks as dll' Upon completion you can restart hise and you will be able to use the node in scriptnode, find it under the 'projects' category when you open a new node in scriptnode.

      Feel free to experiment with the code, most of the functionality should be self explanatory, and if you give chat gpt the code, you can ask it to explain each part.

      #pragma once #include <JuceHeader.h> #include <cmath> namespace project { using namespace juce; using namespace hise; using namespace scriptnode; template <int NV> struct Griffin_Rms : public data::base { // Metadata Definitions ------------------------------------------------------------------------ SNEX_NODE(Griffin_Rms); struct MetadataClass { SN_NODE_ID("Griffin_Rms"); }; // Node Configuration ------------------------------------------------------------------------ static constexpr bool isModNode() { return true; } static constexpr bool isPolyphonic() { return NV > 1; } static constexpr bool hasTail() { return false; } static constexpr bool isSuspendedOnSilence() { return true; } static constexpr int getFixChannelAmount() { return NV; } static constexpr int NumTables = 0; static constexpr int NumSliderPacks = 0; static constexpr int NumAudioFiles = 0; static constexpr int NumFilters = 0; static constexpr int NumDisplayBuffers = 0; // Constants ------------------------------------------------------------------------------------ static constexpr double SILENCE_THRESHOLD_RMS = 1e-5; // Threshold for detecting silence static constexpr double MIN_RMS = 1e-8; // Minimum RMS value to prevent log(0) // External Parameters ----------------------------------------------------------------------- double blockDuration = 0.1; // Block size in seconds (RMS window duration) // Internal Variables ------------------------------------------------------------------------ double sampleRate = 44100.0; // Default sample rate double rmsFilterCoefficient = 0.0; // Filter coefficient for the smoothing filter double currentMeanSquare = 0.0; // The current mean square value ModValue modValue; // Modulation value handler // Preparation and Reset ---------------------------------------------------------------------- void prepare(PrepareSpecs prepareSpecs) { sampleRate = prepareSpecs.sampleRate; updateFilterCoefficient(); currentMeanSquare = 0.0; } void reset() { currentMeanSquare = 0.0; } // Helper Functions --------------------------------------------------------------------------- void updateFilterCoefficient() { if (blockDuration <= 0.0) blockDuration = 0.1; // Prevent invalid block duration rmsFilterCoefficient = std::exp(-1.0 / (sampleRate * blockDuration)); } // Processing --------------------------------------------------------------------------------- template <typename ProcessDataType> void process(ProcessDataType& data) { auto& fixData = data.as<ProcessData<getFixChannelAmount()>>(); auto audioBlock = fixData.toAudioBlock(); int numSamples = audioBlock.getNumSamples(); int numChannels = audioBlock.getNumChannels(); for (int i = 0; i < numSamples; ++i) { double sumSquares = 0.0; for (int ch = 0; ch < numChannels; ++ch) { double sample = static_cast<double>(audioBlock.getSample(ch, i)); sumSquares += sample * sample; } // Compute mean square for current sample across all channels double meanSquare = sumSquares / numChannels; // Update the EMA of the mean square (RMS squared) currentMeanSquare = rmsFilterCoefficient * currentMeanSquare + (1.0 - rmsFilterCoefficient) * meanSquare; // Compute RMS from mean square double rmsValue = std::sqrt(currentMeanSquare); // Silence detection bool isSilent = 0; // bool isSilent = rmsValue < SILENCE_THRESHOLD_RMS; // ^ uncomment this line to enable silence detection for rms // Use MIN_RMS to prevent log(0) double safeRMS = isSilent ? MIN_RMS : rmsValue; // Convert own RMS to dB double ownRMS_dB = 20.0 * std::log10(safeRMS); // Update modulation value with the RMS in dB modValue.setModValue(static_cast<float>(ownRMS_dB)); } } // Modulation Handling ------------------------------------------------------------------------ int handleModulation(double& value) { return modValue.getChangedValue(value); } // External Data and Events -------------------------------------------------------------------- void setExternalData(const ExternalData& data, int index) {} void handleHiseEvent(HiseEvent& e) {} // Frame Processing ---------------------------------------------------------------------------- template <typename T> void processFrame(T& data) noexcept {} // Parameter Setting --------------------------------------------------------------------------- template <int P> void setParameter(double v) { if (P == 0) { // Block Duration parameter blockDuration = v; updateFilterCoefficient(); reset(); } } // Create Parameters on the GUI ----------------------------------------------------------------- void createParameters(ParameterDataList& data) { { parameter::data p("Block Size (s)", { 0.01, 3.0, 0.01 }); registerCallback<0>(p); p.setDefaultValue(0.02); data.add(std::move(p)); } } }; }
    • N

      Realtime Pitch Detection in HISE

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      2
      0 Votes
      2 Posts
      315 Views
      d.healeyD

      @Noahdeetz Sorry just saw this post. Here is the example from Christoph - https://github.com/christophhart/hise_tutorial/blob/master/CustomSampleImport/Scripts/PitchDetector.js

    • N

      Send Effect - Best practices

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      3
      0 Votes
      3 Posts
      393 Views
      N

      Oh great thanks so much!

      Noah

    • N

      Absolute path not being able to be resolved from sample

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      9
      0 Votes
      9 Posts
      497 Views
      N

      @d-healey ahhh I see.

      Okay I resolved the path and it fixed the issue! Thanks for your help

    • N

      Current Version not Building in release configuration

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      9
      0 Votes
      9 Posts
      477 Views
      Christoph HartC

      just compile the AAX libraries, put them in the SDK folder and export as AAX plugin, then you're good.

    • N

      Quick question

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      16
      0 Votes
      16 Posts
      940 Views
      N

      @d-healey

      Oooh okay. Gotcha I will!

      Thanks so much for the help :)

      -Noah

    • N

      Help!! I’m a newbie

      Watching Ignoring Scheduled Pinned Locked Moved General Questions
      3
      0 Votes
      3 Posts
      291 Views
      d.healeyD

      Greetings.

      Check out my tutorial video for building HISE on Windows, it has the solution you need.

      Link Preview Image HISE

      favicon

      (hise.audio)