• Pipe Organ sampleset player project.

    1
    0 Votes
    1 Posts
    41 Views
    No one has replied
  • Drive Modulation on PolyshaperFX impossible

    1
    0 Votes
    1 Posts
    23 Views
    No one has replied
  • Optimal CPU usage?

    7
  • One Hour Until HISE 101 Intro Zoom

    1
    2 Votes
    1 Posts
    49 Views
    No one has replied
  • Windows installation

    12
    0 Votes
    12 Posts
    103 Views
    tsempireT

    @d-healey said in Windows installation:

    convolution

    no I don't use convolution, but I'm testing an export with HISE, bug

  • Delaying the Audio Signal in Audio Samples

    Solved
    14
    0 Votes
    14 Posts
    363 Views
    griffinboyG

    @clevername27

    Ahh he is right! That is a detail I missed sorry. So yes, the sample number will always correspond to the original zero crossing sample. But there is a chance this sample will not be an exact zero crossing anymore if sample playback doesn't start from this exact sample.

  • Weird behaviour on my CS-80 inspired synth. Help me improve it

    1
    0 Votes
    1 Posts
    50 Views
    No one has replied
  • Crash when pressing compile

    4
    0 Votes
    4 Posts
    65 Views
    T

    @ulrik That's strange, every time I press compile, the program crashes—sometimes after pressing it twice, sometimes right after pressing it once.

  • Knobs controlling Lottie animations and parameters with different values?

    10
    0 Votes
    10 Posts
    274 Views
    ulrikU

    @andersnaessss Great UI, I love it!

  • What is this modulator icon about?

    5
    0 Votes
    5 Posts
    165 Views
    MorphoiceM

    @aaronventure appeared for me too today, good to know :)

  • copy a directory folder

    2
    0 Votes
    2 Posts
    216 Views
    d.healeyD

    @deniskorg A bit late but I just added copyDirectory https://github.com/christophhart/HISE/pull/655

  • 0 Votes
    12 Posts
    253 Views
    d.healeyD

    @andersnaessss I have an old video about crossfading dynamics which might be helpful - https://youtu.be/0cn1l8231n4

  • Weird LAF behavior on vertical Sliders

    14
    0 Votes
    14 Posts
    209 Views
    d.healeyD

    @Morphoice Cool! You should put the namespace into an external file, then you can reuse it easily in any other project.

  • Wavefrom Generator Params not assigning correctly

    8
    0 Votes
    8 Posts
    144 Views
    LindonL

    @Lindon yeah - it was the HISE version on the Mac --- grrrr.....the latest seem to fix this.

  • Drawing a line grid into a panel with LAF

    5
    0 Votes
    5 Posts
    108 Views
    MorphoiceM

    @d-healey brilliant! again without you and your videos I'd be nothing!

    this is what I came up with in the end:

    const var Grid1 = Content.getComponent("Grid1"); Grid1.setPaintRoutine(function(g) { drawPandelGrid(); }); inline function drawPandelGrid() { local a = this.getLocalBounds(0); local spacer = a[3]/10; //g.fillAll(this.get("bgColour")); g.setColour(Colours.withAlpha(Colours.white, 0.1)); for (i=0;i<=10;i++) { local y = i * spacer; g.fillRect([0,y,a[2],2]); } }

    and it gives a nice panel of lines to go behind my faders

    Screenshot 2025-01-05 at 15.28.21.png

  • Best Practice for Getting RMS/Peak on an audio buffer

    5
    1 Votes
    5 Posts
    321 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)); } } }; }
  • My old mac can't run the latest version of xcode...

    29
    0 Votes
    29 Posts
    659 Views
    d.healeyD

    @George said in My old mac can't run the latest version of xcode...:

    i just found a terminal window.

    I'm not sure what you mean by that.

  • Round Corners for Floating Tiles? (FilterDisplay)

    Unsolved
    20
    0 Votes
    20 Posts
    372 Views
    Darkmax204D

    @Straticah said in Round Corners for Floating Tiles? (FilterDisplay):

    @Darkmax204 @d-healey i was wondering about this for a while, since i use panels for cropping sometimes.

    Is there a way to crop/cut the radius aswell since panels when used as a container usually crop stuff to a box anyway like a mask would do.

    @Straticah I actually encountered this problem, but in my case, I'm only using a filter with this type of coloring, so it only happened on the lower parts of the border. It's inconvenient, but it might look good if I go back to Photoshop and make only the lower edges square again. Would make a cool design choice, I think.
    issue.png

  • Gain Reduction Meter on a Faust compressor

    Unsolved
    15
    0 Votes
    15 Posts
    501 Views
    T

    Thanks, @sletz, I am aware of the attach primitive. The problem is that no metering signals are available in HISE when the dsp network is compiled.

  • Choke Group Processor

    Solved
    3
    0 Votes
    3 Posts
    77 Views
    clevername27C

    @dane-zone The Choke Group i meant to work between two different Samplers, not within the same sampler.

12

Online

1.6k

Users

11.1k

Topics

97.0k

Posts