80 lines
1.8 KiB
C++
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
|