furnace/src/audio/taAudio.h

80 lines
1.8 KiB
C++

#ifndef _TAAUDIO_H
#define _TAAUDIO_H
#include "../ta-utils.h"
struct SampleRateChangeEvent {
double rate;
SampleRateChangeEvent(double r):
rate(r) {}
};
struct BufferSizeChangeEvent {
unsigned int bufsize;
BufferSizeChangeEvent(unsigned int bs):
bufsize(bs) {}
};
enum TAAudioFormat {
TA_AUDIO_FORMAT_F32=0,
TA_AUDIO_FORMAT_F64,
TA_AUDIO_FORMAT_U8,
TA_AUDIO_FORMAT_S8,
TA_AUDIO_FORMAT_U16,
TA_AUDIO_FORMAT_S16,
TA_AUDIO_FORMAT_U32,
TA_AUDIO_FORMAT_S32,
TA_AUDIO_FORMAT_U16BE,
TA_AUDIO_FORMAT_S16BE,
TA_AUDIO_FORMAT_U32BE,
TA_AUDIO_FORMAT_S32BE
};
struct TAAudioDesc {
String name;
double rate;
unsigned int bufsize, fragments;
unsigned char inChans, outChans;
TAAudioFormat outFormat;
TAAudioDesc():
rate(0.0),
bufsize(0),
fragments(0),
inChans(0),
outChans(0),
outFormat(TA_AUDIO_FORMAT_F32) {}
};
class TAAudio {
protected:
TAAudioDesc desc;
TAAudioFormat outFormat;
bool running, initialized;
float** inBufs;
float** outBufs;
void (*audioProcCallback)(float**,float**,int,int,unsigned int);
void (*sampleRateChanged)(SampleRateChangeEvent);
void (*bufferSizeChanged)(BufferSizeChangeEvent);
public:
void setSampleRateChangeCallback(void (*callback)(SampleRateChangeEvent));
void setBufferSizeChangeCallback(void (*callback)(BufferSizeChangeEvent));
void setCallback(void (*callback)(float**,float**,int,int,unsigned int));
virtual void* getContext();
virtual bool quit();
virtual bool setRun(bool run);
virtual bool init(TAAudioDesc& request, TAAudioDesc& response);
TAAudio():
outFormat(TA_AUDIO_FORMAT_F32),
running(false),
initialized(false),
inBufs(NULL),
outBufs(NULL),
audioProcCallback(NULL),
sampleRateChanged(NULL),
bufferSizeChanged(NULL) {}
};
#endif