Simultaneously play sine tones via textbuttons simultaneously?

I am building an ear training app and want sine tones to play asynchonously, how do I make this work safely with one audio callback?

Have N independent sine generator objects, run them in the audio callback and mix their results together into the callback output buffer. Mute/unmute the oscillators as needed based on the GUI state.

The future proof approach is to implement SynthesiserSound and SynthesiserVoice and optionally trigger from MidiKeyboardComponent.