45 lines
931 B
C++
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_;
|
|
|
|
};
|