// The audio engine handles the RtAudio implementation of outputing samples to audio. the audio callback fills a buffer of audio samples and submits it for playback #pragma once #include #include "LoggerService.hpp" #if defined(_WIN32) #define AUDIO_API RtAudio::WINDOWS_WASAPI #else #define AUDIO_API RtAudio::LINUX_ALSA #endif class AudioEngine { public: AudioEngine(LoggerService* logger); ~AudioEngine(); bool start(); bool stop(); private: static int32_t audioCallback(void* outputBuffer, void* inputBuffer, uint32_t nFrames, double streamtime, RtAudioStreamStatus status, void* userData); int32_t process(float* out, size_t nFrames); RtAudio audioDevice_ { AUDIO_API }; // TODO: make these configurable uint32_t sampleRate_ = 44100; uint32_t bufferFrames_ = 512; uint32_t channels_ = 2; float phase_ = 0.0f; LoggerService* logger_; };