71 for (
unsigned i = 0; i <
mSources.size(); i++) {
78 throw RunTimeError(
"Error removing mixer input: not found.");
83 for (
unsigned i = 0; i <
mSources.size(); i++) {
90 throw RunTimeError(
"Error removing mixer input: not found.");
103 for (
unsigned i = 0; i <
mSources.size(); i++) {
109 logMsg(
"Mixer scaleInput -- input not found");
115 for (
unsigned i = 0; i <
mSources.size(); i++) {
134 for (
unsigned i = 0; i <
mSources.size(); i++)
152 unsigned numIns = mSources.size();
153 unsigned numFrames = outputBuffer.mNumFrames;
158 mOpBuffer.copyHeaderFrom(outputBuffer);
159 outputBuffer.zeroBuffers();
161 for (
int i = 0; i < numIns; i++) {
167 float scal = mScaleValues[i];
168 mOpBuffer.mNumChannels = ich;
169 mOpBuffer.mSequence = outputBuffer.mSequence;
170 mOpBuffer.zeroBuffers();
174 if (ich == mNumChannels) {
175 for (j = 0; j < ich; j++) {
176 out1 = outputBuffer.buffer(j);
177 opp = mOpBuffer.buffer(j);
181 for (k = 0; k < numFrames; k++)
184 for (k = 0; k < numFrames; k++)
185 *out1++ += (*opp++ * scal);
189 else if ((ich == 1) && (mNumChannels == 2)) {
190 out1 = outputBuffer.buffer(0);
191 out2 = outputBuffer.buffer(1);
192 opp = mOpBuffer.buffer(0);
194 for (k = 0; k < numFrames; k++) {
199 for (k = 0; k < numFrames; k++) {
200 *out1++ += *opp * scal;
201 *out2++ += *opp++ * scal;
204 logMsg(
kLogError,
"Error in mix: in = %d ch, out = %d ch\n", ich, mNumChannels);
208 #ifdef DO_MIX_AS_SCALABLE // not defined at present
212 for (j = 0; j < mNumChannels; j++) {
213 out1 = outputBuffer.buffer(j];
214 for (k = 0; k < numFrames; k++) {
216 samp = (samp * scaleValue) + offsetValue;
220 scalePort->resetPtr();
221 offsetPort->resetPtr();
222 scaleValue = scalePort->nextValue();
223 offsetValue = offsetPort->nextValue();
226 mOpBuffer.mAreBuffersZero =
false;
233 fprintf(stderr,
"Mixer -- %d inputs: ", (
int)
mSources.size());
234 for (
unsigned i = 0; i <
mSources.size(); i++) {
236 fprintf(stderr,
"\n");
290 if (outputBuffer.mNumChannels != 2)
294 unsigned numFrames = outputBuffer.mNumFrames;
297 if (checkFanOut(outputBuffer))
return;
308 float posValue = posPort->
nextValue() * 0.5;
310 for (
unsigned i = 0; i < numFrames; i++) {
311 *out1++ = (*inpp) * (0.5 - posValue) * scaleValue;
312 *out2++ = (*inpp++) * (posValue + 0.5) * scaleValue;
316 handleFanOut(outputBuffer);
331 unsigned in_c,
unsigned out_c)
342 unsigned in_c,
unsigned out_c,
float spr)
353 unsigned in_c,
unsigned out_c,
float spr)
376 unsigned numFrames = outputBuffer.mNumFrames;
377 float a_scale, dist, l_samp, r_samp, o_samp;
382 float l_weights[mOutCh], r_weights[mOutCh];
397 l_pos.
set(posXValue, posYValue);
398 r_pos.
set(posXValue, posYValue);
401 for (
unsigned j = 0; j < mOutCh; j++) {
402 dist = mSpeakers[j]->distance(& l_pos);
403 if (dist < 1.0) dist = 1.0;
404 l_weights[j] = 1.0 / dist;
406 dist = mSpeakers[j]->distance(& r_pos);
407 if (dist < 1.0) dist = 1.0;
408 r_weights[j] = 1.0 / dist;
426 inR = mInputs[
CSL_INPUT]->mBuffer->buffer(1);
428 for (
unsigned i = 0; i < numFrames; i++) {
432 for (
unsigned j = 0; j < mOutCh; j++) {
433 o_samp = l_samp * a_scale * l_weights[j];
435 o_samp += r_samp * a_scale * r_weights[j];
436 outputBuffer.setBuffer(j, i, o_samp);
454 printf(
"ERROR: unknown # of channels in NtoM_Panner: %d\n",
mOutCh);
461 float coord = dist * 0.7071;
470 float coord = dist * 0.7071;
516 float panL = sqrt(2*(1.0 - mPan));
517 float panR = sqrt(2*(mPan));
519 float widthFactor = mWidth;
520 if ((fabs(1.0 - panL) < 0.0001) && (fabs(1.0 - panR) < 0.0001) && (fabs(widthFactor) < 0.0001) && (fabs(1.0 - gain) < 0.0001)) {
525 static int count = 0;
527 printf(
"Pan L/R %f/%f \tWidth Factor/Gain %f\n", panL, panR, widthFactor);
531 unsigned numFrames = outputBuffer.mNumFrames;
533 for (
unsigned i = 0; i < numFrames; i++) {
534 newL = *outL + (*outR * widthFactor);
535 newR = *outR + (*outL * widthFactor);
536 *outL++ = newL * panL * gain;
537 *outR++ = newR * panR * gain;