Files
sonobulus/src/synth/AudioEngine.hpp

45 lines
931 B
C++

// 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 <RtAudio.h>
#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_;
};