2 #ifndef __RtAAudioDevice_hxx__
3 #define __RtAAudioDevice_hxx__
15 #ifdef __MACOSX_CORE__
16 #define MACOSX_WORKAROUND
19 #ifdef __MACOSX_CORE__
22 #define FACTOR2SRC_KLUDGE
28 #define FORMAT RtAudio::RTAUDIO_SINT16
36 Buffer(
int channels = 0,
int frames = 0)
39 Alloc(channels,frames);
44 void Alloc(
int channels = 0,
int frames = 0)
46 if (mData)
delete mData;
49 if (mChannels && mFrames)
51 mData =
new TData[mChannels*mFrames];
65 return mWriteIndex >= mReadIndex ?
66 mWriteIndex - mReadIndex :
67 mWriteIndex + mFrames - mReadIndex;
70 void CopyTo(
MY_TYPE* ptr,
int frames)
72 int cnt = frames*mChannels;
73 int limit = mFrames*mChannels;
74 int i = mReadIndex*mChannels;
77 printf(
"copyto: r=%d %d\n",mReadIndex,frames);
81 *ptr++ = (
MY_TYPE)(mData[i++]*32767.);
85 if (mReadIndex >= mFrames) mReadIndex -= mFrames;
89 #ifdef FACTOR2SRC_KLUDGE
90 void CopyToFactor2SRC(
MY_TYPE* ptr,
int frames)
92 int cnt = frames*mChannels;
93 int limit = mFrames*mChannels;
94 int i = mReadIndex*mChannels;
97 printf(
"copyto: r=%d %d\n",mReadIndex,frames);
101 *ptr++ = (
MY_TYPE)(mData[i]*32767.);
102 *ptr++ = (
MY_TYPE)(mData[i]*32767.);
106 mReadIndex += frames;
107 if (mReadIndex >= mFrames) mReadIndex -= mFrames;
112 void CopyFrom(
MY_TYPE* ptr,
int frames)
114 int cnt = frames*mChannels;
115 int limit = mFrames*mChannels;
116 int i = mWriteIndex*mChannels;
118 #ifdef DEBUG_RDWR_POS
119 printf(
"copyfrom: w=%d %d\n",mWriteIndex,frames);
123 mData[i++] =
TData(*ptr++)/32767.;
126 mWriteIndex += frames;
127 if (mWriteIndex >= mFrames) mWriteIndex -= mFrames;
130 #ifdef FACTOR2SRC_KLUDGE
131 void CopyFromDoFactor2SRC(
MY_TYPE* ptr,
int frames)
133 int cnt = frames*mChannels;
134 int limit = mFrames*mChannels;
135 int i = mWriteIndex*mChannels;
137 #ifdef DEBUG_RDWR_POS
138 printf(
"copyfrom: w=%d %d\n",mWriteIndex,frames);
148 mWriteIndex += frames;
149 if (mWriteIndex >= mFrames) mWriteIndex -= mFrames;
153 void ChannelCopyFrom(
TData* ptr,
int size,
int chnId)
155 int i = mWriteIndex*mChannels+chnId;
157 int limit = mChannels*mFrames;
159 #ifdef DEBUG_RDWR_POS
160 printf(
"ChannelCopyFrom: w=%d %d\n",mWriteIndex,size);
167 if (i>=limit) i = chnId;
170 if (mChannelsDone==mChannels)
173 if (mWriteIndex >= mFrames) mWriteIndex -= mFrames;
178 void ChannelCopyTo(
TData* ptr,
int size,
int chnId)
180 int i = mReadIndex*mChannels+chnId;
182 int limit = mChannels*mFrames;
184 #ifdef DEBUG_RDWR_POS
185 printf(
"ChannelCopyTo: r=%d %d\n",mReadIndex,size);
191 if (i>=limit) i = chnId;
194 if (mChannelsDone==mChannels)
197 if (mReadIndex >= mFrames) mReadIndex -= mFrames;
206 int mRtAudioBufferSize;
207 #ifdef MACOSX_WORKAROUND
208 int mInternalRtAudioBufferSize;
216 #ifdef FACTOR2SRC_KLUDGE
226 void Read(
Audio& audio,
const int channelID);
227 void Write(
const Audio& audio,
const int channelID);
238 std::vector< int > mDevIDs;
260 #endif // __RtAAudioDevice_hxx__