Usage
Copy the
knm_synthesizer.hppandknm_soundfont.hppfiles in a convenient place for your projectIn one C++ file, add the following code to create the implementation:
#define KNM_SYNTHESIZER_IMPLEMENTATION
#include <knm_synthesizer.hpp>
In other files, just use #include <knm_synthesizer.hpp>
Here is an example using the library to retrieve the data about key 60 (C4) at velocity 20 in bank 0, preset 0:
#define KNM_SYNTHESIZER_IMPLEMENTATION
#include <knm_synthesizer.hpp>
#include <iostream>
using namespace knm::synth;
int main(int argc, char** argv)
{
// Create the synthesizer
SynthesizerSettings settings(22050);
Synthesizer synthesizer(settings);
// Load the SoundFont file
if (!synthesizer.loadSoundFont("/path/to/sounfont/file.sf2"))
{
std::cerr << "Failed to load SoundFont file" << std::endl;
return 1;
}
synthesizer.setMasterVolume(6.0f);
// Create the output buffers
size_t duration = 1.0 * settings.sampleRate();
float* left = new float[duration];
float* right = new float[duration];
memset((char*) left, 0, duration * sizeof(float));
memset((char*) right, 0, duration * sizeof(float));
// Play the note for 0.5 second and then release the key
size_t note_duration = duration / 2;
synthesizer.noteOn(0, 60, 100);
synthesizer.render(left, right, note_duration);
synthesizer.noteOff(0, 60);
synthesizer.render(left + note_duration, right + note_duration, note_duration);
// Do something with the buffers
delete[] left;
delete[] right;
return 0;
}