int main() { Plucked pluck(440.0); // A4 note pluck.noteOn(0.7); // 70% amplitude
dac.openStream(¶ms, NULL, RTAUDIO_FLOAT64, 44100, 256, &tick, (void *)&pluck); dac.startStream(); stk library
RtAudio dac; RtAudio::StreamParameters params; params.deviceId = dac.getDefaultOutputDevice(); params.nChannels = 2; int main() { Plucked pluck(440
For the aspiring audio programmer, spending a week with STK is a rite of passage. You will learn why delays become echoes, why filters become vowels, and why a single line of feedback can transform noise into a clarinet. For the professional, STK remains a trusted reference implementation—when you forget how a formant filter works, you check the FormSwitching.cpp file. #include "Plucked
#include "Plucked.h" #include "RtAudio.h" #include <iostream> // Audio callback function int tick(void *outputBuffer, void *inputBuffer, unsigned int nBufferFrames, double streamTime, RtAudioStreamStatus status, void *userData) { Plucked *pluck = (Plucked *)userData; double *out = (double *)outputBuffer; for (unsigned int i = 0; i < nBufferFrames; i++) { *out++ = pluck->tick(); // Left channel *out++ = pluck->tick(); // Right channel } return 0; }
Compilation: g++ -o pluck pluck.cpp -lstk -lrt -lpthread -lasound (Linux) The Synthesis ToolKit is not the fastest, the prettiest, or the most modern audio library. But it is arguably the most honest . In an era of black-box AI synthesis and monolithic DAWs, STK offers a return to first principles. It is the "K&R C" of sound synthesis—a concise, powerful, and deeply educational artifact.