static ALvoid ModulatorProcess( ALeffectState* effect, const ALeffectslot* Slot, ALuint SamplesToDo, const ALfloat* SamplesIn, ALfloat ( *SamplesOut )[OUTPUTCHANNELS] )
{
	ALmodulatorState* state = ( ALmodulatorState* )effect;
	const ALfloat gain = Slot->Gain * state->Scale;
	const ALuint step = state->step;
	ALuint index = state->index;
	ALfloat samp;
	ALuint i;

	switch ( state->Waveform )
	{
		case SINUSOID:
			for ( i = 0; i < SamplesToDo; i++ )
			{
#define FILTER_OUT(func) do {                                                 \
    samp = SamplesIn[i];                                                      \
                                                                              \
    index += step;                                                            \
    index &= WAVEFORM_FRACMASK;                                               \
    samp *= func(index);                                                      \
                                                                              \
    samp = hpFilter1P(&state->iirFilter, 0, samp);                            \
                                                                              \
    /* Apply slot gain */                                                     \
    samp *= gain;                                                             \
                                                                              \
    SamplesOut[i][FRONT_LEFT]   += samp;                                      \
    SamplesOut[i][FRONT_RIGHT]  += samp;                                      \
    SamplesOut[i][FRONT_CENTER] += samp;                                      \
    SamplesOut[i][SIDE_LEFT]    += samp;                                      \
    SamplesOut[i][SIDE_RIGHT]   += samp;                                      \
    SamplesOut[i][BACK_LEFT]    += samp;                                      \
    SamplesOut[i][BACK_RIGHT]   += samp;                                      \
    SamplesOut[i][BACK_CENTER]  += samp;                                      \
} while(0)
				FILTER_OUT( sin_func );
			}

			break;

		case SAWTOOTH:
			for ( i = 0; i < SamplesToDo; i++ )
			{
				FILTER_OUT( saw_func );
			}

			break;

		case SQUARE:
			for ( i = 0; i < SamplesToDo; i++ )
			{
				FILTER_OUT( square_func );
#undef FILTER_OUT
			}

			break;
	}

	state->index = index;
}
Пример #2
0
/* callback for dtrace iterator. optionally filters then dumps probe info */
static int
probeinfo(dtrace_hdl_t *dh, const dtrace_probedesc_t *desc, void *ud)
{
  probefilter_t *filter = ud;

  /* filter out (duplicated per) pid probes by default */
  if (!(filter->pidprobes)) {
    const char *provider = desc->dtpd_provider;
    int c = provider[strlen(provider) - 1];
    if (isdigit(c))
      return 0;
  }

#define FILTER_OUT(F, V) (F && fnmatch(F, V, 0))
  if (FILTER_OUT(filter->provider, desc->dtpd_provider)
    ||FILTER_OUT(filter->mod, desc->dtpd_mod)
    ||FILTER_OUT(filter->func, desc->dtpd_func)
    ||FILTER_OUT(filter->name, desc->dtpd_name)
  ) return 0;

  printf("%s\t%s\t%s\t%s\n", 
    desc->dtpd_provider,
    desc->dtpd_mod,
    desc->dtpd_func,
    desc->dtpd_name);

  (void)dh; // silence warnings - we don't  use this
  return 0;
}