00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __JackAudioAdapterInterface__
00021 #define __JackAudioAdapterInterface__
00022
00023 #include "ringbuffer.h"
00024 #include "jack.h"
00025 #include "JackError.h"
00026 #include "JackResampler.h"
00027 #include "JackFilters.h"
00028 #include <samplerate.h>
00029
00030 namespace Jack
00031 {
00032
00033 #ifdef JACK_MONITOR
00034
00035 #define TABLE_MAX 100000
00036
00037 struct Measure
00038 {
00039 int delta;
00040 int time1;
00041 int time2;
00042 float r1;
00043 float r2;
00044 int pos1;
00045 int pos2;
00046 };
00047
00048 struct MeasureTable
00049 {
00050
00051 Measure fTable[TABLE_MAX];
00052 int fCount;
00053
00054 MeasureTable() :fCount ( 0 )
00055 {}
00056
00057 void Write ( int time1, int time2, float r1, float r2, int pos1, int pos2 );
00058 void Save();
00059
00060 };
00061
00062 #endif
00063
00068 class JackAudioAdapterInterface
00069 {
00070
00071 protected:
00072
00073 #ifdef JACK_MONITOR
00074 MeasureTable fTable;
00075 #endif
00076
00077 int fCaptureChannels;
00078 int fPlaybackChannels;
00079
00080
00081 jack_nframes_t fHostBufferSize;
00082 jack_nframes_t fHostSampleRate;
00083
00084
00085 jack_nframes_t fAdaptedBufferSize;
00086 jack_nframes_t fAdaptedSampleRate;
00087
00088
00089 JackAtomicDelayLockedLoop fHostDLL;
00090 JackAtomicDelayLockedLoop fAdaptedDLL;
00091
00092 JackResampler** fCaptureRingBuffer;
00093 JackResampler** fPlaybackRingBuffer;
00094
00095 bool fRunning;
00096
00097 public:
00098
00099 JackAudioAdapterInterface ( jack_nframes_t buffer_size, jack_nframes_t sample_rate ) :
00100 fCaptureChannels ( 0 ),
00101 fPlaybackChannels ( 0 ),
00102 fHostBufferSize ( buffer_size ),
00103 fHostSampleRate ( sample_rate ),
00104 fAdaptedBufferSize ( buffer_size),
00105 fAdaptedSampleRate ( sample_rate ),
00106 fHostDLL ( buffer_size, sample_rate ),
00107 fAdaptedDLL ( buffer_size, sample_rate ),
00108 fRunning ( false )
00109 {}
00110
00111 virtual ~JackAudioAdapterInterface()
00112 {}
00113
00114 void SetRingBuffers ( JackResampler** input, JackResampler** output )
00115 {
00116 fCaptureRingBuffer = input;
00117 fPlaybackRingBuffer = output;
00118 }
00119
00120 bool IsRunning()
00121 {
00122 return fRunning;
00123 }
00124
00125 virtual void Reset()
00126 {
00127 fRunning = false;
00128 }
00129
00130 void ResetRingBuffers();
00131
00132 virtual int Open();
00133 virtual int Close();
00134
00135 virtual int SetHostBufferSize ( jack_nframes_t buffer_size )
00136 {
00137 fHostBufferSize = buffer_size;
00138 fHostDLL.Init ( fHostBufferSize, fHostSampleRate );
00139 return 0;
00140 }
00141
00142 virtual int SetAdaptedBufferSize ( jack_nframes_t buffer_size )
00143 {
00144 fAdaptedBufferSize = buffer_size;
00145 fAdaptedDLL.Init ( fAdaptedBufferSize, fAdaptedSampleRate );
00146 return 0;
00147 }
00148
00149 virtual int SetBufferSize ( jack_nframes_t buffer_size )
00150 {
00151 SetHostBufferSize ( buffer_size );
00152 SetAdaptedBufferSize ( buffer_size );
00153 return 0;
00154 }
00155
00156 virtual int SetHostSampleRate ( jack_nframes_t sample_rate )
00157 {
00158 fHostSampleRate = sample_rate;
00159 fHostDLL.Init ( fHostBufferSize, fHostSampleRate );
00160 return 0;
00161 }
00162
00163 virtual int SetAdaptedSampleRate ( jack_nframes_t sample_rate )
00164 {
00165 fAdaptedSampleRate = sample_rate;
00166 fAdaptedDLL.Init ( fAdaptedBufferSize, fAdaptedSampleRate );
00167 return 0;
00168 }
00169
00170 virtual int SetSampleRate ( jack_nframes_t sample_rate )
00171 {
00172 SetHostSampleRate ( sample_rate );
00173 SetAdaptedSampleRate ( sample_rate );
00174 return 0;
00175 }
00176
00177 virtual void SetCallbackTime ( jack_time_t callback_usec )
00178 {
00179 fHostDLL.IncFrame ( callback_usec );
00180 }
00181
00182 void ResampleFactor ( jack_nframes_t& frame1, jack_nframes_t& frame2 );
00183
00184 void SetInputs ( int inputs )
00185 {
00186 jack_log ( "JackAudioAdapterInterface::SetInputs %d", inputs );
00187 fCaptureChannels = inputs;
00188 }
00189
00190 void SetOutputs ( int outputs )
00191 {
00192 jack_log ( "JackAudioAdapterInterface::SetOutputs %d", outputs );
00193 fPlaybackChannels = outputs;
00194 }
00195
00196 int GetInputs()
00197 {
00198 jack_log ( "JackAudioAdapterInterface::GetInputs %d", fCaptureChannels );
00199 return fCaptureChannels;
00200 }
00201
00202 int GetOutputs()
00203 {
00204 jack_log ( "JackAudioAdapterInterface::GetOutputs %d", fPlaybackChannels );
00205 return fPlaybackChannels;
00206 }
00207
00208 };
00209
00210 }
00211
00212 #endif