a no - you need to create a third party c++ node template
--> 1.) Go to Tools -> create C++ third party node template
--> 2.) name it EXACTLY: chipTuner
--> 3.) this will create the chipTuner.h file. Open it with Visual Studio or even Notepad and clear everything
--> 4.) Copy the code below into the file, save and close it
--> 5.) back in HISE go to Export-> Compile DSP Networks as DLL
--> 6.) You can now go into the FX Section and load a Hardcoded Master Effect -> there you can choose the chiptuner effect
My advise, play with settings like Bit depth = 4 and SR Reduction = 8
#pragma once
#include <JuceHeader.h>
namespace project
{
using namespace juce;
using namespace hise;
using namespace scriptnode;
template <int NV> struct chipTuner : public data::base
{
SNEX_NODE(chipTuner);
struct MetadataClass { SN_NODE_ID("chipTuner"); };
static constexpr bool isModNode() { return false; }
static constexpr bool isPolyphonic() { return NV > 1; }
static constexpr bool hasTail() { return false; }
static constexpr bool isSuspendedOnSilence() { return true; }
static constexpr int getFixChannelAmount() { return 2; }
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;
// -------------------------------------------------------------------------
// Parameter State
// -------------------------------------------------------------------------
float bitDepth = 8.0f; // 1 – 16 Bit
float srDivider = 1.0f; // 1 – 32 (sample rate reduction factor)
// Sample-Hold state
float holdLeft = 0.0f;
float holdRight = 0.0f;
int holdCounter = 0;
// -------------------------------------------------------------------------
// Callbacks
// -------------------------------------------------------------------------
void prepare(PrepareSpecs ) { reset(); }
void reset()
{
holdLeft = 0.0f;
holdRight = 0.0f;
holdCounter = 0;
}
void handleHiseEvent(HiseEvent& ) {}
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())
processFrame(fd.toSpan());
}
template <typename T> void processFrame(T& data)
{
// --- Sample Rate Reduction (Sample & Hold) ---
int divider = jmax(1, (int)srDivider);
if (holdCounter <= 0)
{
holdLeft = data[0];
holdRight = data[1];
holdCounter = divider;
}
holdCounter--;
float outL = holdLeft;
float outR = holdRight;
// --- Bit Crusher ---
float steps = std::pow(2.0f, bitDepth) - 1.0f; // eg 8 Bit → 255 steps
steps = jmax(1.0f, steps);
outL = std::round(outL * steps) / steps;
outR = std::round(outR * steps) / steps;
data[0] = outL;
data[1] = outR;
}
int handleModulation(double& /*value*/) { return 0; }
void setExternalData(const ExternalData& /*data*/, int /*index*/) {}
template <int P> void setParameter(double v)
{
if constexpr (P == 0) // Bit Depth (1 – 16)
bitDepth = (float)jlimit(1.0, 16.0, v);
if constexpr (P == 1) // SR Divider (1 – 32)
srDivider = (float)jlimit(1.0, 32.0, v);
}
void createParameters(ParameterDataList& data)
{
// Bit Depth
{
parameter::data p("Bit Depth", { 1.0, 16.0, 1.0 });
registerCallback<0>(p);
p.setDefaultValue(8.0);
p.setParameterValueNames({});
data.add(std::move(p));
}
// Sample Rate Reduction
{
parameter::data p("SR Reduction", { 1.0, 32.0, 1.0 });
registerCallback<1>(p);
p.setDefaultValue(4.0);
data.add(std::move(p));
}
}
};
}

