Happy Easter!
A little delayed, but I hope it was great for everyone.
In the time since the last post, progress has been going well! The GranularEngine class is very nearly finished, and grains are being generated and playing back beautifully. I’ve added randomness to the UI which allows the user to randomize all of the parameters. I intend to expand on this a bit more in the future, but it is a wonderful start.
Furthermore, I have created the first implementation of an amplitude envelope which makes everything sound a lot better! The whole plugin is really coming together which is wonderful to see, and is nearly fully functional as a Granular Synth as of now.
Which is why, for the first time, I will show a little video of Reconstruct in its early days!
As you can see, the UI is in desperate need of a bit of an upgrade.
What is interesting to me is how far I thought I had come at the last post, only to realize that I had barely scratched the surface. Not to say that I didn’t make a lot of progress, it’s just while adding more and more you realize how often you did something wrong, or an implementation wasn’t quite right.
For starters, I did the calculation for the waveform wrong, then I accidentally skipped buffers by incrementing the playback position in the wrong loop, then I realized that as the grain speed was too high, grains stopped playing. That one had me for days. I ended up figuring out the issue almost randomly, as I looked at the calculation for the next sample to play, and realized I was multiplying by the grain start position rather than adding it. This of course meant that I was playing samples WAY past the end of the sample.
These little issues are the worst, as it feels like they could stem from anywhere. The big bugs that just make the entire program crash or not work at all, it feels like you almost always know where to look. But little bugs that are just enough to make the program semi-unusable, those could be anywhere.
I used a sine tone to test a lot of these things because often they were in relation to grain speed or similar, meaning that a sin tone could give me good feedback on performance.
In the end, though, most of these issues are solved and I have made a pretty functional VST. After being locked in for a week, it feels good to have reached a very nice MVP to build upon.
Here is the updated board:
See you in the next one!