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; }
/* 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; }