AudioEngine holds pointer to an ISynth. Exact Synth type determined at runtime
diff --git a/samples/MegaDrone/src/main/cpp/AudioEngine.cpp b/samples/MegaDrone/src/main/cpp/AudioEngine.cpp
index 0ab35ff..fe55f81 100644
--- a/samples/MegaDrone/src/main/cpp/AudioEngine.cpp
+++ b/samples/MegaDrone/src/main/cpp/AudioEngine.cpp
@@ -33,9 +33,9 @@
}
if (mStream->getFormat() == AudioFormat::Float){
- mSynthFloat = std::make_unique<Synth<float>>(mStream->getSampleRate(), mStream->getChannelCount());
+ mSynth = std::make_unique<Synth<float>>(mStream->getSampleRate(), mStream->getChannelCount());
} else {
- mSynthInt16 = std::make_unique<Synth<int16_t>>(mStream->getSampleRate(), mStream->getChannelCount());
+ mSynth = std::make_unique<Synth<int16_t>>(mStream->getSampleRate(), mStream->getChannelCount());
}
mStream->setBufferSizeInFrames(mStream->getFramesPerBurst() * 2);
@@ -51,23 +51,12 @@
}
void AudioEngine::tap(bool isOn) {
-
- if (mStream->getFormat() == AudioFormat::Float){
- mSynthFloat->setWaveOn(isOn);
- } else {
- mSynthInt16->setWaveOn(isOn);
- }
+ mSynth->setWaveOn(isOn);
}
DataCallbackResult
AudioEngine::onAudioReady(AudioStream *oboeStream, void *audioData, int32_t numFrames) {
-
- if (mStream->getFormat() == AudioFormat::Float){
- mSynthFloat->renderAudio(static_cast<float *>(audioData), numFrames);
- } else {
- mSynthInt16->renderAudio(static_cast<int16_t *>(audioData), numFrames);
- }
-
+ mSynth->renderAudio(audioData, numFrames);
return DataCallbackResult::Continue;
}
diff --git a/samples/MegaDrone/src/main/cpp/AudioEngine.h b/samples/MegaDrone/src/main/cpp/AudioEngine.h
index 8e7b960..029ad64 100644
--- a/samples/MegaDrone/src/main/cpp/AudioEngine.h
+++ b/samples/MegaDrone/src/main/cpp/AudioEngine.h
@@ -38,8 +38,7 @@
private:
AudioStream *mStream = nullptr;
- std::unique_ptr<Synth<float>> mSynthFloat;
- std::unique_ptr<Synth<int16_t>> mSynthInt16;
+ std::unique_ptr<ISynth> mSynth;
};
diff --git a/samples/MegaDrone/src/main/cpp/Synth.h b/samples/MegaDrone/src/main/cpp/Synth.h
index 48cb10c..43abb7c 100644
--- a/samples/MegaDrone/src/main/cpp/Synth.h
+++ b/samples/MegaDrone/src/main/cpp/Synth.h
@@ -29,8 +29,15 @@
constexpr float kOscDivisor = 33;
constexpr float kOscAmplitude = 0.009;
+class ISynth {
+public:
+ virtual void renderAudio(void *audioData, int32_t numFrames) = 0;
+ virtual void setWaveOn(bool isEnabled) = 0;
+};
+
+
template <typename T>
-class Synth : public RenderableAudio<T>{
+class Synth : public ISynth {
public:
Synth(int32_t sampleRate, int32_t channelCount) {
@@ -51,15 +58,17 @@
}
}
+ // From ISynth
void setWaveOn(bool isEnabled){
for (auto &osc : mOscs) osc.setWaveOn(isEnabled);
};
- // From RenderableAudio<T>
- void renderAudio(T *audioData, int32_t numFrames){
- mOutputStage->renderAudio(audioData, numFrames);
+ // From ISynth
+ void renderAudio(void *audioData, int32_t numFrames) override {
+ mOutputStage->renderAudio(static_cast<T*>(audioData), numFrames);
};
+
private:
// Rendering objects