[CPP] API and Extensions

v0.5.0 Release

The forum was keen to remind me that it's been 9 months and asked me "Do you want to revive this thread?" Fair cop; yes I do.

I have been focusing primarily on the Physynth, so it has been a while, but the little bits of tinkering over the last 9 months have yielded quite a few new features and fixes, so without further ado:

New Features:

  • Vertical justification for wrapped font drawing
  • Various Rectangle improvements for placing/measuring shapes
  • Colors are now a C++ object. You may be able to get away with using an LCDColor in many places, but it's strongly recommended to use the pdcpp::Color class now. Also there are fun things you can do with colors with this helper class
  • Management of the context stack in InputContextHandler has improved: you can now remove internal contexts from the stack.
  • You can now use the Microphone
  • AudioSample now has the ability to load and save basic *.wav files. Like, real, real basic. Don't do anything with an extended format header or you're in for a world of pain.
  • AudioSamples can now own data

New Components:

  • RingMenu -- Ported in from the Physynth, I just thought this was such a useful component that I would totally see getting use elsewhere.
  • LevelMeter -- With live audio comes wanting to measure it.
  • WaveformView -- With recording audio comes wanting to look at it.
  • TextComponent -- I got sick of re-writing common code for managing colors/alignment on text that was just a label for something.

New Utils:

  • Visitor pattern! We use C++ 20, so why not add some common support for it like Overload for std::visit? Gets heavy usage in RingMenu.
  • General "Menu" functionality which can be used with like-minded Components like the RingMenu and GridView
  • functions for converting dB to gain coefficients and vice versa
  • integral/fractional separation function

General Updates:

  • Removing the graphics pointer from the draw functions since it's been rendered obsolete by pdcpp::Graphics
  • GridView now takes ownership of components. Had to do it to the people because leaks and/or crashes abounded when trying to update dynamic content.

Bug fixes:

  • memory leak in the Image move constructor
  • compiler error for SoundSources which didn't fully implement finished
  • order of operations in popContext of when using a ContextManager to allow you to safely modify the context stack from within contextExited if you're uber careful.
  • major bug in SyntheSizerVoiceContainer where nodeOn methods would crash applications at runtime due to setting the finished callback on a temporary this pointer.
  • cpppong works again
  • SynthesizerVoice objects now stop themselves before destruction just in case to prevent being called asynchronously in the audio callback.
  • Relatedly, fixing a shutdown crash in SynthesizerVoice if a custom generator is set.
1 Like