00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00038 #ifndef __AUDIOINTERFACE_H__
00039 #define __AUDIOINTERFACE_H__
00040
00041 #include "ProcessPlugin.h"
00042 #include "jacktrip_types.h"
00043
00044 #include <QVarLengthArray>
00045 #include <QVector>
00046
00047
00048
00049 class JackTrip;
00050
00051
00052 class AudioInterface
00053 {
00054 public:
00055
00057 enum audioBitResolutionT {
00058 BIT8 = 1,
00059 BIT16 = 2,
00060 BIT24 = 3,
00061 BIT32 = 4
00062 };
00063
00065 enum samplingRateT {
00066 SR22,
00067 SR32,
00068 SR44,
00069 SR48,
00070 SR88,
00071 SR96,
00072 SR192,
00073 UNDEF
00074 };
00075
00082 AudioInterface(JackTrip* jacktrip,
00083 int NumInChans, int NumOutChans,
00084 AudioInterface::audioBitResolutionT AudioBitResolution =
00085 AudioInterface::BIT16);
00086
00087 virtual ~AudioInterface();
00088
00094 virtual void setup() = 0;
00095 virtual void close() = 0;
00096 virtual int startProcess() const = 0;
00097 virtual int stopProcess() const = 0;
00098 virtual void appendProcessPlugin(ProcessPlugin* plugin);
00099 virtual void connectDefaultPorts() = 0;
00100
00101 virtual void callback(QVarLengthArray<sample_t*>& in_buffer,
00102 QVarLengthArray<sample_t*>& out_buffer,
00103 int8_t* input_packet,
00104 int8_t* output_packet,
00105 unsigned int n_frames,
00106 QVarLengthArray<sample_t*>& in_process_buffer,
00107 QVarLengthArray<sample_t*>& out_process_buffer);
00108
00116 static void fromSampleToBitConversion(const sample_t* const input,
00117 int8_t* output,
00118 const AudioInterface::audioBitResolutionT targetBitResolution);
00119
00127 static void fromBitToSampleConversion(const int8_t* const input,
00128 sample_t* output,
00129 const AudioInterface::audioBitResolutionT sourceBitResolution);
00130
00131
00132
00133 virtual void setNumInputChannels(int nchannels)
00134 { mNumInChans = nchannels; }
00135 virtual void setNumOutputChannels(int nchannels)
00136 { mNumOutChans = nchannels; }
00137 virtual void setSampleRate(uint32_t sample_rate)
00138 { mSampleRate = sample_rate; }
00139 virtual void setBufferSizeInSamples(uint32_t buf_size)
00140 { mBufferSizeInSamples = buf_size; }
00142 virtual void setClientName(const char* ClientName) = 0;
00143
00144
00145
00147 virtual int getNumInputChannels() const { return mNumInChans; }
00149 virtual int getNumOutputChannels() const { return mNumOutChans; }
00150 virtual uint32_t getBufferSizeInSamples() const
00151 { return mBufferSizeInSamples; }
00152 virtual size_t getSizeInBytesPerChannel() const;
00154 virtual uint32_t getSampleRate() const
00155 { return mSampleRate; }
00158 virtual samplingRateT getSampleRateType() const = 0;
00163 virtual int getAudioBitResolution() const { return mAudioBitResolution; }
00164
00165
00166 private:
00167 void computeProcessFromNetwork(QVarLengthArray<sample_t*>& in_buffer,
00168 QVarLengthArray<sample_t*>& out_buffer,
00169 int8_t* input_packet,
00170 int8_t* output_packet,
00171 unsigned int n_frames);
00172 void computeProcessToNetwork(QVarLengthArray<sample_t*>& in_buffer,
00173 QVarLengthArray<sample_t*>& out_buffer,
00174 int8_t* input_packet,
00175 int8_t* output_packet,
00176 unsigned int n_frames,
00177 QVarLengthArray<sample_t*>& in_process_buffer,
00178 QVarLengthArray<sample_t*>& out_process_buffer);
00179
00180 JackTrip* mJackTrip;
00181
00182 int mNumInChans;
00183 int mNumOutChans;
00184
00185 int mAudioBitResolution;
00186 AudioInterface::audioBitResolutionT mBitResolutionMode;
00187
00188 uint32_t mSampleRate;
00189 uint32_t mBufferSizeInSamples;
00190
00191
00192
00193 unsigned int mBufferSize;
00194 size_t mSizeInBytesPerChannel;
00195
00196 QVector<ProcessPlugin*> mProcessPlugins;
00197 };
00198
00199 #endif // __AUDIOINTERFACE_H__