1 #ifndef __synthCore_h__ 2 #define __synthCore_h__ 7 #include "synthvoice.h" 30 struct SynthEngineParameters
32 SynthEngineParameters() {}
35 bool enableMIDINoteEvents =
true;
38 uint32_t synthModeIndex =
enumToInt(SynthMode::kMono);
41 double globalVolume_dB = 0.0;
44 unsigned int globalPitchBendSensCoarse = 7;
45 unsigned int globalPitchBendSensFine = 0;
49 int globalTuningCoarse = 0;
50 int globalTuningFine = 0;
53 double globalUnisonDetune_Cents = 0.0;
56 std::shared_ptr<SynthVoiceParameters> voiceParameters = std::make_shared<SynthVoiceParameters>();
87 virtual bool reset(
double _sampleRate);
88 virtual bool render(SynthProcessInfo& synthProcessInfo);
90 virtual bool initialize(
const char* dllPath =
nullptr);
93 void accumulateVoice(SynthProcessInfo& synthProcessInfo,
double scaling = 0.707);
97 void getParameters(std::shared_ptr<SynthEngineParameters>& _parameters) { _parameters = parameters; }
100 void setParameters(std::shared_ptr<SynthEngineParameters>& _parameters);
110 SynthProcessInfo voiceProcessInfo;
114 std::shared_ptr<SynthEngineParameters> parameters = std::make_shared<SynthEngineParameters>();
117 std::shared_ptr<MidiInputData> midiInputData = std::make_shared<MidiInputData>();
118 std::shared_ptr<MidiOutputData> midiOutputData = std::make_shared<MidiOutputData>();
121 std::unique_ptr<SynthVoice>
synthVoices[
MAX_VOICES] = { 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0 };
124 std::shared_ptr<WavetableDatabase> wavetableDatabase =
nullptr;
127 std::shared_ptr<PCMSampleDatabase> sampleDatabase =
nullptr;
#define enumToInt(ENUM)
macro helper to cast a typed enum to an int
Definition: synthfunctions.h:251
virtual bool reset(double _sampleRate)
Resets all voices and the audio delay object.
Definition: synthengine.cpp:82
void accumulateVoice(SynthProcessInfo &synthProcessInfo, double scaling=0.707)
Accumulates voice buffers into a single mix buffer for each channel.
Definition: synthengine.cpp:230
int getFreeVoiceIndex()
Helper function to find a free voice to use.
Definition: synthengine.cpp:451
int getActiveVoiceIndexInNoteOn(unsigned int midiNoteNumber)
Helper function to find the voice that is playing a certain MIDI note.
Definition: synthengine.cpp:500
std::unique_ptr< SynthVoice > synthVoices[MAX_VOICES]
array of voice objects for the engine
Definition: synthengine.h:129
SynthEngine(uint32_t blockSize=64)
Construction:
Definition: synthengine.cpp:31
virtual bool render(SynthProcessInfo &synthProcessInfo)
Render a buffer of output audio samples.
Definition: synthengine.cpp:131
Definition: addosccore.cpp:4
int getStealingVoiceIndexInNoteOn(unsigned int midiNoteNumber)
Helper function to find the voice that is playing a certain MIDI note and that will be stolen...
Definition: synthengine.cpp:520
int getVoiceIndexToSteal()
Helper function to find a free voice to steal based on some kind of heuristic.
Definition: synthengine.cpp:469
void setParameters(std::shared_ptr< SynthEngineParameters > &_parameters)
Function to update the engine and voice parameters.
Definition: synthengine.cpp:396
const uint32_t MAX_VOICES
Definition: synthconstants.h:35
virtual bool initialize(const char *dllPath=nullptr)
Initializes all voices with the DLL path.
Definition: synthengine.cpp:103
void applyGlobalVolume(SynthProcessInfo &synthProcessInfo)
Apply a single global volume control to output mix buffers.
Definition: synthengine.cpp:195
virtual ~SynthEngine()
Destruction:
Definition: synthengine.cpp:68
virtual bool processMIDIEvent(midiEvent &event)
The MIDI event handler function; for note on/off messages it finds the voices to turn on/off...
Definition: synthengine.cpp:255
hard-coded arrays of FIR filter coefficients for the sample rate conversion objects (Interpolator and...
See also Designing Software Synthesizers in C++ 2nd Ed. by Will Pirkle.