Categories

  • General questions and announcements about HISE

    8k Topics
    71k Posts
    P

    I have a question. Can a user load their own IRs for a convolution reverb thru the user interface while the plugin is running, instead of the developer having load them at build time? I have it working where the user selects the IRs using a combo box, thanks to David H's video. So i thought I would explore this route. I looked in the forum and in the snippets but didn't see anything.

    If it can be done, how would I go about it? Thx

  • Scripting related questions and answers

    2k Topics
    16k Posts
    dannytaurusD

    @resonant I find Claude very useful when coding. I use it every day in the Cursor IDE when I'm building web applications in Ruby on Rails. I'm about 5-10x more productive with Claude.

    I'm on the $20/mo plan with additional OnDemand pricing for extra requests. Given that I use it every single day, often for hours at a time, $20/mo is a bargain.

    If you open the HISE source in Cursor, you can ask Claude questions about code locations/definitions, workflows, how to write scripts in HISE, etc.

  • To share HiseSnippets, Interface Elements, GUI, UI/UX, Panel LAF etc..

    195 Topics
    2k Posts
    B

    @the-red_1

    thats really great - awesome work! Thank you very much

  • All about ScriptNode DSP nodes, patches, SNEX and recipes.

    347 Topics
    2k Posts
    F

    @David-Healey thank you soooo muchhh 🙏

  • A subforum for discussing Faust development within HISE

    113 Topics
    896 Posts
    S

    Claude code speaking to Faust MCP: https://drive.google.com/file/d/1SX5-JXjnb3vIMeiEMTfn1VYezMt6P5Fk/view

    Using WIP project: https://github.com/sletz/faust-mcp

    And a bit of ChatGPT: ChatGPT + Faust mcp(2).jpg

  • If you need a certain feature, post it here.
    620 Topics
    5k Posts
    David HealeyD

    @Christoph-Hart I've fixed the PRs.

    https://github.com/christophhart/HISE/pull/821
    https://github.com/christophhart/HISE/pull/822

    Let me know if you have a better idea regarding handling expansions with the same names.

  • Develop better software through collaboration and shared knowledge. Not just about coding —> covering the entire journey, from development to launching and promoting plugins or software.

    131 Topics
    1k Posts
    David HealeyD

    @cemeterychips You need to recompile HISE using the version of the source that you have

  • If you encounter any bug, post it here.
    2k Topics
    12k Posts
    Oli UllmannO

    @Christoph-Hart
    Okay, this variant works at least with the test project. However, I had to use a timer instead of the panel loading callback.

    Please note: You must set the default values using ScriptModulationMatrix.setMatrixModulationProperties(var newProperties), otherwise the modulation will be loaded as undefined for the mode if no user preset is loaded. I did that in the snippet as well.

    Here is the snippet for anyone who wants to use the new modulation system in their plug-in:

    HiseSnippet 2921.3oc6Zz0baabDTRHwT1wwtIoIsOggSefNQgCAHonTxzX9knLiEknDosiblNom.NRhHf6X..kkRFOSl9T+AzW6uj9P8OgNSlIOmeB8eP6d2ABbfjxlVwenjI3Aad6d6c6t2t29woNdTSruO0SI0p8NaDVI00T6dFIXX8gHahRqFJotgpK0ZrCJvlR5g8CTpc1HjuO1RIUpk2lMqToWQg+8eucMjChXhiAonbepsIdGaW6fXncpbWaGmlHKbOaWoYWrRKSJoN0gNF3nkUyqLBYdLZ.dWDaZKopbGj+PkTenZ9hlnML5WpPgM2rbIqivl80wGU1DkuDpeID.sHpXI8hJodisrrCndcCPAXekTqTiZcV2gzGQDav8s8sOxAyFnqzE1YA3lTGKlHxfpTensiUmIpJeEXQ6Dq3VVn3dW011V1QvkUfLDZwTHq.SsTR1a4DrmtL6kWh8lCKkRhkVQvR2Tsqom8nfXLL94ppsHAXu9H3bRlUDyUYoeTUsNElAIHmK5XbSOXPDEYWOe90zf+4Ve5pqBmU9AZttZ+YssHCrI3bldXPNZGYvzFE3YeZ1La2tdFfBW2b93.X0IXSF55HGmifS3rfI1rPi2BKbezXGlbLB6EXi8gc76VMcltXGfDDnf5BVLfLl4SzB7FiWCv0PPSKhcv8QNiY3VMMPT5L0GGP62GXxLeBab5LvOw.kYpYOh5f7xrFGJSlI91AmAnzykODn+tTOWji82hsB2L.9iYHgcLXLAOm0sqIxAeAV0U4KblCPjA3XYGlvzhg.PKxnwA7IGBIcFWaB7ai7S1HWzo7wvWzdSNAVW991G43iEP8Cvi5BrC.ElYjHt23fo1ivsHb4B2fPAatq84sztgJqld3uYLlXdFWgk4d9Xv8oCETYfoQU+Gh8nSVtPczpOFLTDlVB6sX6uXsV1YrghMuFQb.RZfBPfc0Da+ALCU2QTBLHal3ojQxxmZsCEYwtCyaZe.Nv8N5qA6yrLKeooxXT9OjM+ivJY86gGLYOvVvFje50I.4IVork3NjqZSb.VPq+XB2SRat9UY84NKqoAjCR4ZZOB4W0B1hasJbh5PAqUMWthLTk7crCGtrCmOY.sc5Xz4bizbvQP.sFxGudQlHmNVmwjXtSX1XBgY734ywynJxxYL69YiTF2R3JGLz1GzBzQBk.aSS6AdgdjOkYWjlSjsObU.rGVYkXnASXnaMQ.tErloAQnuG0MTHd5y+SYqu7wiNShhDDJYWZ.dOhf4ALZSipe+4hiY.5QcbXBzbPGJpmOgYIicOB6sl1ILFNZhPTgjgZTO+PMxQBME9CRSjRXWpt2HL47hOpD5DAgkVNjqfeEvCJc8vfRccrsvdJ1PrmqnJtKSgywQoC72+gJJKD0hKdmhZkP1Pl52ZR.QDA6vI9ZpwGxSVf+k5m2cucSXzqanmiza86tQ8ZGu0t4xM7nBa8vbGNpUmN1ec+AaWs3GswNMOpQuG9vFCys2Ya2Uu2v6rQc8lkKTtDZ8cN09vb09h8o8a2nSmxGYe7weM9L68u+le9dOHeuusgd+sc+nC12hR9lS6Mp01U+bfNO792kdmSJ16vuozgiZFb1t9z520S2oS0d4fupzcyYTtemiMqcX610yk4wJJ2qEWTf.5gmAwW3AvZfOAxFSjcPZPu4eL37.lBQ2zAZjfvzYDpplNT3lTxfd1foASi81pxfzUNMVieXkyjG7Haqfgw.NqxPr8fgRoAZWIjGELzMfUFeZ06zn6Aa6gFMT4nASRE7Zp5EyuowFqqWrnhc.1cBhqpVrjwlaTbiB5RvMXTXnudQi0yuw5ETBvmFHmUIWEk5en9cqpokIxvskEO9CvCZbl.tP+DrCn8zgPQvDaQrvrnaerNeHjhnC8QOf5crOjkJNNFGfq9XuSvcn1fnQAGYVNw73tbjPHs8H3FfeLjH.kzvCMXRP+GyrYiNJt5y1i47z9Eq3JmYNLDcpri0nXgVI06nJhapEF3j5oCId6A4bCY8wlvapxu7SQb6cOdXCF7qpFkDRhSE33prQ4M2nbYcCkv.u2eN91KjjF5cGy9ZdSKoVVN3IoHDi4mtcBcvgOQVG.pqD5f2S8AnSv8gzvz1FSfirY0BoCYE84nGhx8aV8Poxk1znfw7NYWPmLC4iYvQJZve0eJmrm72l1ICTVIbxda0NdXHbbMO5i7AcrrOVQ8hE1rrQgRFSIEEM1n75aZT1XJmrHeok9wkDNSrvDcAEYswAATRT53gX15zQHtMueUeXQF6RR30vlBuvKu4SNKpo+LqIDTSL8DnhACwYA4kkUZ9Hhfzcl+Vb.l.G3yGWCnZifyAWWLxybXMn3AIDMQmP8.EFqn1HtHlIjQmfrwNNcPACmf2OgRJTVaA5QKbMpGnsRfe2wtBUKiLwMUhwOfYob.KsX.wWBv0f7uKL02ZOmvAv+E9drisePUHy2H4LbGVad+WDUBN6.5i5frr.q8EktH0cM5XhESR+RAh1TuvSnowDaUNMlI54YvN00wu4BkDw43pBeSEO7ylId3mUwGXxVDgGZXxUyVV+MTitmVtKCrdwDW4ShR6iJ5TtWMuvZ8vhxh2Tsicf4v4yiKMGdDxh4kAOF1vl2Rcq98gJihYvUTa9Eub5Ni71eEw1+GU21gdDxIVQAWSCbBVzkFU0saW+ozqs+yh1qsQKbu1lt.gUVrBDdFsJakKcsJaQsWemvSn3zh7eE5UkZII17lB17pwYHy4veu57xVMAS1lRniFRI1lxFJGfgDXFL.r0jadqn8WmqnUMH.JFODx2+j+oWk6.G8xKaCrIJQI.cG6Gjvr8mt8APTTn753TV7pv5S1razNXPdlELO0Z4Ejuoy.MbalA9yw4i9yqK8pp2GNALYpM1oy6EMTNw5moEjzw.ToPODmah0wS5o1T5c6ivNI0iOW2dp+x+F9k+08M7GPGyxWWTIEb+MjGlnozvtSfLEXcbI0RrlRHFmmMloA5hIV7A+O3KDoNabpPj5SPpzNp6YgE3G1YOH2j3hQtt5AXeJgEafUOhvnPv9L1gWEqP3jNPTU0ykWo53SCQ+FpebD.oIkGfEa.x0DRp82NwSHssGc7HtV+cE.v91PEGZb35uHdFoEOz1VDlaTy1xqXcjmmMTYmPfi17+cjc8LXtGwFTrTNqT0ExSLPloCwFVtpzFEhn6HH8XKYJXbeWLvpV7kzOQbjkeYDL9M+Eav3Wi42l3o0ROgG6Z6NxAOIna30egO5TDzKXj3mc3W36cqLcnTk+TkcfDHQdSGP8EVff48Jiy835CTErqFyyT6Wtkk7q6fVyyx92o1g5blvPsosSPX8HoUECdZWbqnD83cxM5a+vAUJT3GtcRSyOnx9iQNIztee0vDf94p4eFVxqrflGPN1SDJsKMW+bS0DuzYzK6G2NV4Rq+4dyScHKdp6zM7clF510kRCFx6Yobz3VUlNV1EOOT9dxe9YloP7CdC4l7z62cbRKoVdxCPKqL5weg.wj3OqPrkrhzidO89nnjnmxL82Seel2yYyl6heYEyk6x8Ep+A0POXMlR7xMudc08ubyfWK7oEzl1o9xB6IRq80H689S5MB6Ab3EZDV887dPmWoMTaOy.fE54gH9in9Xc4UtK10tGkf8S.cJJLlKEFIK8W7jTy.JwrXphlfpPZdWoxDfFx.6fHIVLXbhUpschFbKJrRTDyd9lfhgGMR5LuyXGeL+sGzk6CSLXCYv2A4YAmgIBT8xoTn232JE52xo905oX63Wb+x4o36qBtzFZ7iRsWOmkuJ5p1uV1CWjoG8qLE+MOwth6JbHftkv+ymNMTz.LVSe1+Robgq29JSyjK0LDZbQIrvEkvhWTBKcQIb8KJgkunDtwylPVzmpPgWtB+OHJbmsD+MLkRD.l6Jp7+Ioeo2O
  • Post your example snippets that you want to add to the official HISE snippet database here. We'll revise it, upload it to the repo and delete the post when finished.

    22 Topics
    135 Posts
  • Everything related to the documentation (corrections, additions etc.) can be posted here
    70 Topics
    475 Posts
    David HealeyD

    @weezycarter make a minimal test plugin with 4 channels. Then we'll have a baseline.

  • Collection of Blog Entries

    81 Topics
    770 Posts
    David HealeyD

    Another one you might be interested in is Floe: https://floe.audio/

  • The nerdy place for discussing the C++ framework
    175 Topics
    1k Posts
    OrvillainO
    #pragma once #include <JuceHeader.h> namespace project { using namespace juce; using namespace hise; using namespace scriptnode; using namespace snex; /** Smallest possible BPM listener example. Demonstrates: - TempoListener registration - tempoChanged() callback - BPM flowing into the audio graph */ struct MinimalBPMListener : public data::base, public hise::TempoListener { SNEX_NODE(MinimalBPMListener); struct MetadataClass { SN_NODE_ID("MinimalBPMListener"); }; static constexpr bool isModNode() { return true; } static constexpr bool isPolyphonic() { return false; } static constexpr bool hasTail() { return false; } static constexpr bool isSuspendedOnSilence() { return false; } static constexpr int getFixChannelAmount() { return 1; } // --- Tempo sync --- hise::DllBoundaryTempoSyncer* tempoSyncer = nullptr; double bpm = 120.0; // Exposed modulation value double lastOut = 120.0; // --- TempoListener --- void tempoChanged(double newTempo) override { bpm = newTempo; lastOut = bpm; // make it observable } // --- Lifecycle --- void prepare(PrepareSpecs specs) { if (tempoSyncer == nullptr && specs.voiceIndex != nullptr) { tempoSyncer = specs.voiceIndex->getTempoSyncer(); if (tempoSyncer != nullptr) tempoSyncer->registerItem(this); } // Initialize output lastOut = bpm; } void reset() {} ~MinimalBPMListener() override { if (tempoSyncer != nullptr) { tempoSyncer->deregisterItem(this); tempoSyncer = nullptr; } } // --- Processing --- template <typename T> void process(T& data) { static constexpr int NumChannels = getFixChannelAmount(); auto& fixData = data.template as<ProcessData<NumChannels>>(); auto fd = fixData.toFrameData(); while (fd.next()) fd.toSpan()[0] = (float)lastOut; } int handleModulation(double& value) { value = lastOut; return 1; } void setExternalData(const ExternalData&, int) {} }; }

    This is a minimal example of how to get your custom C++ node to listen to the host BPM. Code above doesn't actually DO anything with the BPM information. But it proves the concept.

28

Online

2.1k

Users

13.2k

Topics

113.9k

Posts