Beispiel #1
0
// DSP Method
void fade_dsp(t_fade *x, t_signal **sp, short *count)
{
	short		i, j, k, l=0;
	void		**audioVectors = NULL;
	TTUInt8		numChannels = 0;
	TTUInt16	vs = 0;
	
	if(count[x->numChannels * 2])			// SIGNAL RATE CROSSFADE CONNECTED
		audioVectors = (void**)sysmem_newptr(sizeof(void*) * ((x->numChannels * 3) + 2));
	else									// CONTROL RATE CROSSFADE
		audioVectors = (void**)sysmem_newptr(sizeof(void*) * ((x->numChannels * 3) + 1));
	audioVectors[l] = x;
	l++;
	
	// audioVectors[] passed to balance_perform() as {x, audioInL[0], audioInR[0], audioOut[0], audioInL[1], audioInR[1], audioOut[1],...}
	for(i=0; i < x->numChannels; i++){
		j = x->numChannels + i;
		k = x->numChannels*2 + i + 1;	// + 1 to account for the position input
		if(count[i] && count[j] && count[k]){
			numChannels++;
			if(sp[i]->s_n > vs)
				vs = sp[i]->s_n;
			
			audioVectors[l] = sp[i]->s_vec;
			l++;
			audioVectors[l] = sp[j]->s_vec;
			l++;
			audioVectors[l] = sp[k]->s_vec;
			l++;
		}
	}
	
	if(count[x->numChannels * 2]){		// SIGNAL RATE CROSSFADE CONNECTED
		audioVectors[l] = sp[x->numChannels*2]->s_vec;
		l++;
	}
	
	x->audioIn1->setNumChannels(numChannels);
	x->audioIn2->setNumChannels(numChannels);
	x->audioOut->setNumChannels(numChannels);
	x->audioIn1->setVectorSizeWithInt(vs);
	x->audioIn2->setVectorSizeWithInt(vs);
	x->audioOut->setVectorSizeWithInt(vs);
	//audioIn will be set in the perform method
	x->audioOut->alloc();	
	
	x->xfade->setAttributeValue(kTTSym_sampleRate, sp[0]->s_sr);
	
	if(count[x->numChannels * 2])		// SIGNAL RATE CROSSFADE CONNECTED
		dsp_addv(fade_perform2, l, audioVectors);
	else
		dsp_addv(fade_perform1, l, audioVectors);
	
	sysmem_freeptr(audioVectors);
}
Beispiel #2
0
void HoaEncode_dsp(t_HoaEncode *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
	x->f_ambiEncoder->setVectorSize(sp[0]->s_n);
	x->f_inputNumber = x->f_ambiEncoder->getNumberOfInputs();
	x->f_outputNumber = x->f_ambiEncoder->getNumberOfOutputs();
	if(x->f_ambiEncoder->getMode() == "split")
	{
		pointer_count = x->f_outputNumber + 2 + x->f_inputNumber;
		
		sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
		for(i = 0; i < pointer_count; i++)
			sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
		
		sigvec[0] = (t_int *)x;
		sigvec[1] = (t_int *)sp[0]->s_n;
		for(i = 2; i < pointer_count; i++)
			sigvec[i] = (t_int *)sp[i - 2]->s_vec;
		if(count[x->f_inputNumber-1])
			dsp_addv(HoaEncode_performVec, pointer_count, (void **)sigvec);
		else
			dsp_addv(HoaEncode_performOffsetVec, pointer_count, (void **)sigvec);
		
		free(sigvec);
	}
	else
	{
		pointer_count = x->f_outputNumber + 2 + x->f_inputNumber;
		
		sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
		for(i = 0; i < pointer_count; i++)
			sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
		
		sigvec[0] = (t_int *)x;
		sigvec[1] = (t_int *)sp[0]->s_n;
		for(i = 2; i < pointer_count; i++)
			sigvec[i] = (t_int *)sp[i - 2]->s_vec;
		if(count[x->f_inputNumber - 1])
			dsp_addv(HoaEncode_perform, pointer_count, (void **)sigvec);
		else
			dsp_addv(HoaEncode_performOffset, pointer_count, (void **)sigvec);
		
		free(sigvec);
	}
}
Beispiel #3
0
void stereoWidth_dsp(t_stereoWidth *x, t_signal **sp, short *count)
{
	x->f_stereoWidth->setVectorSize(sp[0]->s_n);
	long numberOfinlets = 0;
	for(int i = 0; i < 3; i++)
	{
		if (count[i])
			numberOfinlets++;
	}
	
	int i;
	int pointer_count;
	t_int **sigvec;
	
	pointer_count = 7;
		
	sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
	for(i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
		
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)numberOfinlets;
	for(i = 2; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 2]->s_vec;
	
	dsp_addv(stereoWidth_perform, pointer_count, (void **)sigvec);
	free(sigvec);
}
Beispiel #4
0
static void udpsend_tilde_dsp(t_udpsend_tilde *x, t_signal **sp)
{
    int i;

    pthread_mutex_lock(&x->x_mutex);

    x->x_myvec[0] = (t_int*)x;
    x->x_myvec[1] = (t_int*)sp[0]->s_n;

    x->x_samplerate = sp[0]->s_sr;

    for (i = 0; i < x->x_ninlets; i++)
    {
        x->x_myvec[2 + i] = (t_int*)sp[i]->s_vec;
    }

    pthread_mutex_unlock(&x->x_mutex);

    if (DEFAULT_AUDIO_BUFFER_SIZE % sp[0]->s_n)
    {
        error("udpsend~: signal vector size too large (needs to be even divisor of %d)", DEFAULT_AUDIO_BUFFER_SIZE);
    }
    else
    {
        dsp_addv(udpsend_tilde_perform, x->x_ninlets + 2, (t_int*)x->x_myvec);
    }
}
Beispiel #5
0
// DSP Method
void in_dsp(TTPtr self, t_signal **sp, short *count)
{
	WrappedModularInstancePtr	x = (WrappedModularInstancePtr)self;
	TTInputPtr					anInput = (TTInputPtr)x->wrappedObject;
	void**						audioVectors = NULL;
	TTUInt16					vectorSize = 0;
	
	if (anInput) {
		
		audioVectors = (void**)sysmem_newptr(sizeof(void*) * 3);
		audioVectors[0] = x;

		if (count[0] || count[1]) {
			if (sp[0]->s_n > vectorSize)
				vectorSize = sp[0]->s_n;
			
			audioVectors[1] = sp[0]->s_vec;
			audioVectors[2] = sp[1]->s_vec;
		}
		
		// set signal numChannels and vectorSize
		anInput->mSignalIn->setAttributeValue(kTTSym_numChannels, 1);
		anInput->mSignalOut->setAttributeValue(kTTSym_numChannels, 1);
		anInput->mSignalIn->setAttributeValue(kTTSym_vectorSize, vectorSize);
		anInput->mSignalOut->setAttributeValue(kTTSym_vectorSize, vectorSize);
		
		// anInput->mSignalIn will be set in the perform method
		anInput->mSignalOut->sendMessage(kTTSym_alloc);
		
		dsp_addv(in_perform, 3, audioVectors);
		sysmem_freeptr(audioVectors);
	}
}
Beispiel #6
0
void Huygens_dsp(t_Huygens *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
	x->f_n	= (int)sp[0]->s_n;
	x->f_sr	= (int)sp[0]->s_sr;
	
	pointer_count = x->f_outputNumber + 5;
	
	sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
	for(i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
	
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)sp[0]->s_n;
	for(i = 2; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 2]->s_vec;
	
	x->f_count[0] = count[1];
	x->f_count[1] = count[2];
	dsp_addv(Huygens_perform, pointer_count, (void **)sigvec);
	free(sigvec);
}
Beispiel #7
0
// DSP Method
void PackDsp(PackPtr self, t_signal** sp, short* count)
{
	TTUInt16	i, k=0;
	void		**audioVectors = NULL;
	TTUInt16	highestIndexForConnectedSignal = 0;
	
	self->vectorSize = sp[0]->s_n;
			
	// Setup the perform method
	audioVectors = (void**)sysmem_newptr(sizeof(void*) * (self->maxNumChannels + 1));
	audioVectors[k] = self;
	k++;
	
	self->numChannels = 0;
	for (i=0; i < self->maxNumChannels; i++) {
		self->numChannels++;
		audioVectors[k] = sp[i]->s_vec;
		k++;
		if (count[i])
			highestIndexForConnectedSignal = i;
	}
	
	self->audioGraphObject->setOutputNumChannels(0, highestIndexForConnectedSignal+1);
	self->audioGraphObject->getUnitGenerator()->setAttributeValue(kTTSym_vectorSize, (uint)self->vectorSize);
	self->audioGraphObject->getUnitGenerator()->setAttributeValue(kTTSym_maxNumChannels, (uint)self->maxNumChannels);
	self->audioGraphObject->getUnitGenerator()->setAttributeValue(kTTSym_sampleRate, (uint)sp[0]->s_sr);
	
	dsp_addv(PackPerform, k, audioVectors);
	sysmem_freeptr(audioVectors);
}
Beispiel #8
0
static void plugin_tilde_dsp (Pd_Plugin_Tilde* x, t_signal** sp)
{
  unsigned i = 0;
  unsigned long num_samples;

  num_samples = sp[0]->s_n;

  /* Pack vector of parameters for DSP routine */
  x->dsp_vec[0] = (t_int)x;
  x->dsp_vec[1] = (t_int)num_samples;
  /* Inputs are before outputs; ignore the first "null" input */
  for (i = 2; i < x->dsp_vec_length; i++) {
    x->dsp_vec[i] = (t_int)(sp[i - 1]->s_vec);
  }

  /* Connect audio ports with buffers (this is only done when DSP
     processing begins) */
  plugin_tilde_connect_audio (x,
                              (float**)(&x->dsp_vec[2]),
                              (float**)(&x->dsp_vec[2 + x->num_audio_inputs]),
                              num_samples);

  /* add DSP routine to Pd's DSP chain */
  dsp_addv (plugin_tilde_perform, x->dsp_vec_length, x->dsp_vec);
}
void epluribus_dsp(t_epluribus *x, t_signal **sp)
{
	long i;
	t_int **sigvec;
	int pointer_count;

	
	if( x->incount < 2 || x->incount > 256 ){
		post("bad vector count");
		return;
	}
	pointer_count = x->incount + 4; // all metros, plus 2 outlets, plus the object pointer, plus N

	sigvec  = (t_int **) calloc(pointer_count, sizeof(t_int *));	
	for(i = 0; i < pointer_count; i++){
		sigvec[i] = (t_int *) calloc(sizeof(t_int),1);
	}
	sigvec[0] = (t_int *)x; // first pointer is to the object
	
	sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N)
	
	for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets
		sigvec[i] = (t_int *)sp[i-1]->s_vec;
	}

	dsp_addv(epluribus_perform, pointer_count, (t_int *) sigvec); 
	free(sigvec);
	
}
Beispiel #10
0
// DSP Method
void out_dsp(t_out *x, t_signal **sp, short *count)
{
	short		i, j, k=0;
	void**		audioVectors = NULL;
	TTUInt8		numChannels = 0;
	TTUInt16	vs = sp[0]->s_n;
	int			sr = sp[0]->s_sr;

	x->ramp_gain->setAttributeValue(TT("sr"), sr);	// convert midi to db for tap_gain
	x->ramp_xfade->setAttributeValue(TT("sr"), sr);	// convert midi to db for tap_gain

	audioVectors = (void**)sysmem_newptr(sizeof(void*) * ((x->numOutputs * 2) + 1));
	audioVectors[k] = x;
	k++;
	
	for(i=0; i < x->numOutputs; i++){
		j = x->numOutputs + i;
		if(count[i] || count[j]){
			numChannels++;
			if(sp[i]->s_n > vs)
				vs = sp[i]->s_n;
				
			audioVectors[k] = sp[i]->s_vec;
			k++;
			audioVectors[k] = sp[j]->s_vec;
			k++;
		}
	}
	
	x->numChannels = numChannels;
	x->audioIn->setAttributeValue(TT("numChannels"), numChannels);
	x->audioOut->setAttributeValue(TT("numChannels"), numChannels);
	x->audioTemp->setAttributeValue(TT("numChannels"), numChannels);
	x->zeroSignal->setAttributeValue(TT("numChannels"), numChannels);
	
	x->vectorSize = vs;
	x->audioIn->setAttributeValue(TT("vectorSize"), vs);
	x->audioOut->setAttributeValue(TT("vectorSize"), vs);
	x->audioTemp->setAttributeValue(TT("vectorSize"), vs);
	x->zeroSignal->setAttributeValue(TT("vectorSize"), vs);
	
	//audioIn will be set in the perform method
	x->audioOut->sendMessage(TT("alloc"));
	x->audioTemp->sendMessage(TT("alloc"));
	x->zeroSignal->sendMessage(TT("alloc"));
	x->zeroSignal->sendMessage(TT("clear"));
		
	dsp_addv(out_perform, k, audioVectors);
	sysmem_freeptr(audioVectors);

	// start the meters
	if(x->num_meter_objects){
		for(i=0; i<MAX_NUM_CHANNELS; i++)
			x->peakamp[i] = 0;
		clock_delay(x->clock, kPollIntervalDefault); 			// start the clock
	}
}
Beispiel #11
0
void samm_dsp(t_samm *x, t_signal **sp, short *count)
{
	long i;
t_int **sigvec;
int pointer_count;

pointer_count = x->metro_count + 3; // all metros, plus 1 inlet, plus the object pointer, plus N
	
	if(x->vs != sp[0]->s_n){
		x->vs = sp[0]->s_n;
		samm_init(x,1);
	}
	if(x->sr != sp[0]->s_sr) {
		x->sr = sp[0]->s_sr;
		x->onebeat_samps = (60.0/x->tempo) * x->sr;
		for(i = 0; i < x->metro_count; i++){
			x->metro_samps[i] = x->metro_beatdurs[i] * x->onebeat_samps;
			x->metro[i] = 0;
		}		
	}
	sigvec  = (t_int **) calloc(pointer_count, sizeof(t_int *));	
	for(i = 0; i < pointer_count; i++){
		sigvec[i] = (t_int *) calloc(sizeof(t_int),1);
	}
	sigvec[0] = (t_int *)x; // first pointer is to the object

	sigvec[pointer_count - 1] = (t_int *)sp[0]->s_n; // last pointer is to vector size (N)
	
	for(i = 1; i < pointer_count - 1; i++){ // now attach the inlet and all outlets
		sigvec[i] = (t_int *)sp[i-1]->s_vec;
	}
//	post("attached %d pointers",pointer_count);
#if MSP
	dsp_addv(samm_perform, pointer_count, (void **) sigvec); 
#endif
#if PD
	dsp_addv(samm_perform, pointer_count, (t_int *) sigvec); 
#endif


	free(sigvec);

}
Beispiel #12
0
void emd_dsp(t_emd *x, t_signal **sp, short *count) {
    int i;
    int before = x->emd.size;
    int after = sp[0]->s_n;
    if(before != after)
        emdResize(&(x->emd), after);
    x->addv[0] = x;
    for(i = 0; i < 1 + x->emd.order; i++)
        x->addv[i + 1] = sp[i]->s_vec;
    dsp_addv(emd_perform, x->addvSize, x->addv);
    //post("emd_dsp");
}
Beispiel #13
0
static void 
shmsrc_tilde_dsp(t_shmsrc_tilde *x, t_signal **sp)
{
  x->x_myvec[0] = (t_int*)x;
  x->x_myvec[1] = (t_int*)sp[0]->s_n;
  x->x_pd_samplerate = (long)sp[0]->s_sr;
  int i;
  for (i = 0; i < x->x_num_outlets; i++)
    x->x_myvec[2 + i] = (t_int*)sp[i+1]->s_vec;

  dsp_addv(shmsrc_tilde_perform, x->x_num_outlets + 2, (t_int *)x->x_myvec);
}
Beispiel #14
0
void grans_dsp(t_grans *x, t_signal **sp)
{
    int num = x->numinlets + x->numoutlets;
    t_int **w = x->w;
    w[0] = (t_int *)x;
    w[1] = (t_int *)sp[0]->s_n;
    
    int i;
    for (i = 0; i < num; i++) {
        w[i+2] = (t_int *)sp[i]->s_vec;
    }
    
	dsp_addv(grans_perform, num+2, (t_int *)w);
}
Beispiel #15
0
// DSP Method
void gain_dsp(t_gain *x, t_signal **sp, short *count)
{
	short		i, j, k, l=0;
	void**		audioVectors = NULL;
	TTUInt16	numChannels = 0;
	TTUInt16	vs = 0;
	
	audioVectors = (void**)sysmem_newptr(sizeof(void*) * ((x->numChannels * 3) + 1));
	audioVectors[l] = x;
	l++;
	
	// audioVectors[] passed to gain_perform() as:
	//	{x, audioInL[0], audioInR[0], audioOut[0], audioInL[1], audioInR[1], audioOut[1],...}
	for(i=0; i < x->numChannels; i++){
		j = x->numChannels + i;
		k = x->numChannels*2 + i;
		if(count[i] && count[j] && count[k]){
			numChannels++;
			if(sp[i]->s_n > vs)
				vs = sp[i]->s_n;
			
			audioVectors[l] = sp[i]->s_vec;
			l++;
			audioVectors[l] = sp[j]->s_vec;
			l++;
			audioVectors[l] = sp[k]->s_vec;
			l++;
		}
	}
	
	x->signalIn->setNumChannels(TTUInt16(numChannels*2));
	x->signalOut->setNumChannels(numChannels);
	x->signalTemp->setNumChannels(numChannels);
	
	x->signalIn->setVectorSizeWithInt(vs);
	x->signalOut->setVectorSizeWithInt(vs);
	x->signalTemp->setVectorSizeWithInt(vs);

	//signalIn will be set in the perform method
	x->signalOut->alloc();
	x->signalTemp->alloc();
	
	x->xfade->setAttributeValue(kTTSym_sampleRate, sp[0]->s_sr);
	x->gain->setAttributeValue(kTTSym_sampleRate, sp[0]->s_sr);
	x->gain->setAttributeValue(TT("interpolated"), true);
	
	dsp_addv(gain_perform, l, audioVectors);
	sysmem_freeptr(audioVectors);
}
Beispiel #16
0
static void streamout13_dsp(t_streamout13 *x, t_signal **sp)
{
/*
    dsp_add(streamout13_perform, 3, x, sp[0]->s_vec, sp[0]->s_n);
*/
  int i;
  t_int** myvec = getbytes(sizeof(t_int)*(x->x_n + 3));
   
  myvec[0] = (t_int*)x;
  myvec[1] = (t_int*)sp[0]->s_n;
  for (i=0;i < x->x_n/*+1*/;i++)
    myvec[2 + i] = (t_int*)sp[i]->s_vec;
  dsp_addv(streamout13_perform, x->x_n + 3, (t_int*)myvec);
  freebytes(myvec,sizeof(t_int)*(x->x_n + 3));
}
Beispiel #17
0
void HoaStereo_dsp(t_HoaStereo *x, t_signal **sp, short *count)
{
	x->f_AmbisonicStereo->setVectorSize(sp[0]->s_n);
	int pointer_count = x->f_AmbisonicStereo->getNumberOfInputs() + x->f_AmbisonicStereo->getNumberOfOutputs() + 3;
	
	t_int** sigvec  = (t_int **)malloc(pointer_count * sizeof(t_int *));
	for(int i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)malloc(sizeof(t_int));
	
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)x->f_AmbisonicStereo->getNumberOfInputs();
	sigvec[2] = (t_int *)x->f_AmbisonicStereo->getNumberOfOutputs();
	for(int i = 3; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 3]->s_vec;
	
	dsp_addv(HoaStereo_perform, pointer_count, (void **)sigvec);
	
	free(sigvec);
}
Beispiel #18
0
void arsic_dsp(t_arsic *x, t_signal **sp, t_perfroutine perf, int complain)
{
    t_int *ap = x->s_perfargs;
    if (ap)
    {
	int i, nsigs = x->s_nperfargs - 2;
	x->s_ksr = sp[0]->s_sr * 0.001;
	arsic_validate(x, complain);
	arsic_check(x);

	/* LATER consider glist traversing, and, if we have no feeders,
	   choosing an optimized version of perform routine */

	*ap++ = (t_int)x;
	*ap++ = (t_int)sp[0]->s_n;
	for (i = 0; i < nsigs; i++) *ap++ = (t_int)sp[i]->s_vec;
	dsp_addv(perf, x->s_nperfargs, x->s_perfargs);
    }
    else loudbug_bug("arsic_dsp");
}
Beispiel #19
0
// DSP Method: Adds our perform method to the DSP call chain
void balance_dsp(t_balance *x, t_signal **sp, short *count)
{
	short		i, j, k, l=0;
	void		**audioVectors = NULL;
	
	audioVectors = (void**)sysmem_newptr(sizeof(void*) * ((x->maxNumChannels * 3) + 1));
	audioVectors[l] = x;
	l++;
	
	// audioVectors[] passed to balance_perform() as {x, audioInL[0], audioInR[0], audioOut[0], audioInL[1], audioInR[1], audioOut[1],...}
	x->numChannels = 0;
	x->vs = 0;
	for(i=0; i < x->maxNumChannels; i++){
		j = x->maxNumChannels + i;
		k = x->maxNumChannels*2 + i;
		if(count[i] && count[j] && count[k]){
			x->numChannels++;
			if(sp[i]->s_n > x->vs)
				x->vs = sp[i]->s_n;

			audioVectors[l] = sp[i]->s_vec;
			l++;
			audioVectors[l] = sp[j]->s_vec;
			l++;
			audioVectors[l] = sp[k]->s_vec;
			l++;
		}
	}
	
	x->audioOut->setAttributeValue(TT("NumChannels"), x->numChannels*2);
	x->audioOut->setAttributeValue(TT("NumChannels"), x->numChannels);
	x->audioIn->setAttributeValue(TT("VectorSize"), x->vs);
	x->audioOut->setAttributeValue(TT("VectorSize"), x->vs);
	//audioIn will be set in the perform method
	x->audioOut->sendMessage(TT("alloc"));
	
	x->balance->setAttributeValue(TT("SampleRate"), sp[0]->s_sr);
	
	dsp_addv(balance_perform, l, audioVectors);
	sysmem_freeptr(audioVectors);
}
Beispiel #20
0
// dsp setup
void firbank_dsp(t_firbank *x, t_signal **sp, short *connect) {
    
    int i;
    
    x->v = sp[0]->s_n;
    
    if(x->v != x->framesize / 2) {
        object_post((t_object *)x, "firbank~: vector size (%d) is not equal to framesize / 2 (%d)", x->v, x->framesize / 2);
    }
    
    // setup args
    x->w[0] = (t_int*)x;
    x->w[1] = (t_int*)(sp[0]->s_n);
    
    for(i = 0; i < (x->n + x->m); i++) {
        x->w[i+2] = (t_int*)(sp[i]->s_vec);
    }
    
	dsp_addv(firbank_perform, 2 + x->n + x->m, (void**)(x->w)); // not sure if this is right for number of inlets, outlets
    
}
Beispiel #21
0
void HoaConvolve_dsp(t_HoaConvolve *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
	x->f_ambiConvolve->setVectorSize(sp[0]->s_n);
	pointer_count = x->f_ambiConvolve->getNumberOfInputs() + x->f_ambiConvolve->getNumberOfOutputs() + 2;
	
	sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
	for(i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
	
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)sp[0]->s_n;
	for(i = 2; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 2]->s_vec;

	dsp_addv(HoaConvolve_perform, pointer_count, (void **)sigvec);
	free(sigvec);
}
Beispiel #22
0
void scope_dsp(t_scope *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
	pointer_count = (x->f_order * 2 + 1) + 2;
	
	sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
	for(i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
	
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)sp[0]->s_n;
	for(i = 2; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 2]->s_vec;
	
	dsp_addv(scope_perform, pointer_count, (void **)sigvec);
	
	free(sigvec);
	x->f_startclock = 1;
}
Beispiel #23
0
void leeloo_dsp(t_leeloo *x, t_signal **sp)
{
    size_t i;
    t_int* vec;
    if(x->l_vsize && x->l_vtemp)
    {
        freebytes(x->l_vtemp, x->l_vsize);
        x->l_vtemp = NULL;
        x->l_vsize = 0;
    }
    x->l_vsize = sizeof(t_sample) * x->l_nios * (size_t)sp[0]->s_n;
    x->l_vtemp = (t_sample *)getbytes(x->l_vsize);
    if(x->l_vtemp)
    {
        vec = (t_int *)getbytes((x->l_nios * 2 + 3) * sizeof(t_int));
        if(vec)
        {
            vec[0] = (t_int)x->l_nios;
            vec[1] = (t_int)sp[0]->s_n;
            vec[2] = (t_int)x->l_vtemp;
            for(i = 0; i < x->l_nios * 2; ++i)
            {
                vec[i+3] = (t_int)sp[i]->s_vec;
            }
            dsp_addv(leeloo_perform, (x->l_nios * 2 + 3), vec);
            freebytes(vec, (x->l_nios * 2 + 2) * sizeof(t_int));
        }
        else
        {
            pd_error(x, "can't allocate temporary vectors.");
        }
    }
    else
    {
        pd_error(x, "can't allocate temporary vectors.");
    }
    
}
Beispiel #24
0
void HoaBinaural_dsp(t_HoaBinaural *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
    x->f_ambiBinaural->setVectorSize(sp[0]->s_n);
	x->f_ambiBinaural->setSamplingRate(sp[0]->s_sr);
	pointer_count = x->f_ambiBinaural->getNumberOfOutputs() + x->f_ambiBinaural->getNumberOfInputs() + 2;
	sigvec  = (t_int **)malloc(pointer_count * sizeof(t_int *));
	for(i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)malloc(sizeof(t_int));
	
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)sp[0]->s_n;
	for(i = 2; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 2]->s_vec;
	
	dsp_addv(HoaBinaural_perform, pointer_count, (void **)sigvec);

	free(sigvec);
	
}
Beispiel #25
0
void HoaFilter_dsp(t_HoaFilter *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
	x->f_ambiFilter->setVectorSize(sp[0]->s_n);
	x->f_inputNumber = x->f_ambiFilter->getNumberOfInputs();
	x->f_outputNumber = x->f_ambiFilter->getNumberOfOutputs();
    pointer_count = x->f_outputNumber + 2 + x->f_inputNumber;
		
    sigvec  = (t_int **)calloc(pointer_count, sizeof(t_int *));
    for(i = 0; i < pointer_count; i++)
        sigvec[i] = (t_int *)calloc(1, sizeof(t_int));
		
    sigvec[0] = (t_int *)x;
    sigvec[1] = (t_int *)sp[0]->s_n;
    for(i = 2; i < pointer_count; i++)
        sigvec[i] = (t_int *)sp[i - 2]->s_vec;
    if(count[x->f_inputNumber - 1])
        dsp_addv(HoaFilter_perform, pointer_count, (void **)sigvec);		
    free(sigvec);
}
Beispiel #26
0
/* The “dsp”-method has two arguments, the pointer to the class-data space, and
a pointer to an array of signals. */
void conv_tilde_dsp(t_conv_tilde *x, t_signal **sp)
{
    int i;

	/* PD's system for passing the signal to the dsp method as int pointers is	*/
	/* a bit unclear. Passing the frame length as an t_int pointer especially 	*/
	/* seems like chewing gum solution but hey, it works. 						*/

	/* Add struct pointer. */
	x->x_myvec[0] = (t_int*)x;

	/* Add the audio buffer length second. */
	x->x_myvec[1] = (t_int*)(sp[0]->s_n);

	/* Add each input and output channel */
	for (i = 0; i < x->all_channels; i++)
	{
		x->x_myvec[2 + i] = (t_int*)sp[i]->s_vec;
	}

	/* Add the pointers to the DSP tree as a vector. */
    dsp_addv(conv_tilde_perform, x->all_channels + 2, (t_int*)x->x_myvec);
}
Beispiel #27
0
// DSP Method
void op_dsp(t_op *x, t_signal **sp, short *count)
{
	short		i, j, k=0;
	void		**audioVectors = NULL;

	audioVectors = (void**)sysmem_newptr(sizeof(void*) * ((x->maxNumChannels * 2) + 1));
	audioVectors[k] = x;
	k++;
	
	x->numChannels = 0;
	x->vs = 0;
	for(i=0; i < x->maxNumChannels; i++){
		j = x->maxNumChannels + i;
		if(count[i] && count[j]){
			x->numChannels++;
			if(sp[i]->s_n > x->vs)
				x->vs = sp[i]->s_n;
				
			audioVectors[k] = sp[i]->s_vec;
			k++;
			audioVectors[k] = sp[j]->s_vec;
			k++;
		}
	}
	
	x->audioIn->setAttributeValue(kTTSym_numChannels, x->maxNumChannels);
	x->audioOut->setAttributeValue(kTTSym_numChannels, x->maxNumChannels);
	x->audioIn->setAttributeValue(kTTSym_vectorSize, x->vs);
	x->audioOut->setAttributeValue(kTTSym_vectorSize, x->vs);
	//audioIn will be set in the perform method
	x->audioOut->sendMessage(TT("alloc"));
	
	x->op->setAttributeValue(kTTSym_sampleRate, sp[0]->s_sr);
	
	dsp_addv(op_perform, k, audioVectors);
	sysmem_freeptr(audioVectors);
}
Beispiel #28
0
void vdb_dsp(t_vdb *x, t_signal **sp, short *count)
{
int i;
int vector_count;
t_int **sigvec;

	vector_count = x->inlet_count+x->outlet_count + 2;
	

	for(i = 0; i < vector_count - 2; i++){
		x->connections[i] = count[i];
//		post("connection %d: %d",i,count[i]);
	}
//	post("vector count %d",vector_count);
	vdb_attach_buffer(x);
/*	
	post("delay inlet status: %d",count[x->delay_inlet]);
  post("feedback inlet status: %d",count[x->feedback_inlet]); */
	sigvec  = (t_int **) calloc(vector_count, sizeof(t_int *));	
	for(i = 0; i < vector_count; i++)
		sigvec[i] = (t_int *) calloc(sizeof(t_int),1);
		
	sigvec[0] = (t_int *)x;

	sigvec[vector_count - 1] = (t_int *)sp[0]->s_n;

	for(i = 1; i < vector_count - 1; i++){
		sigvec[i] = (t_int *)sp[i-1]->s_vec;
	}

	dsp_addv(vdb_perform, vector_count, (void **)sigvec);

	free(sigvec);

  
}
Beispiel #29
0
void HoaSevenDotOne_dsp(t_HoaSevenDotOne *x, t_signal **sp, short *count)
{
	int i;
	int pointer_count;
	t_int **sigvec;
	
	x->f_ninputs = x->f_AmbisonicSixDotOne->getNumberOfInputs();
	x->f_noutputs = x->f_AmbisonicSixDotOne->getNumberOfOutputs();
	x->f_AmbisonicSixDotOne->setVectorSize(sp[0]->s_n);
	pointer_count = x->f_AmbisonicSixDotOne->getNumberOfInputs() + x->f_AmbisonicSixDotOne->getNumberOfOutputs() + 2;
	
	sigvec  = (t_int **)malloc(pointer_count * sizeof(t_int *));
	for(i = 0; i < pointer_count; i++)
		sigvec[i] = (t_int *)malloc(sizeof(t_int));
	
	sigvec[0] = (t_int *)x;
	sigvec[1] = (t_int *)sp[0]->s_n;
	for(i = 2; i < pointer_count; i++)
		sigvec[i] = (t_int *)sp[i - 2]->s_vec;
	
	dsp_addv(HoaSevenDotOne_perform, pointer_count, (void **)sigvec);
	
	free(sigvec);
}
Beispiel #30
0
void eobj_dsp(void *x, t_signal **sp)
{
    int i;
    short* count;
    t_int* temp;
    t_float **tempout, *tempreal;
    t_linetraverser t;
    t_outconnect    *oc;
    t_eclass* c = eobj_getclass(x);
    t_edsp* dsp = eobj_getdsp(x);
    int nouts = obj_nsigoutlets((t_object *)x);
    int nins  = obj_nsiginlets((t_object *)x);
    int samplesize;
    if(c && c->c_widget.w_dsp && dsp && (nins || nouts) && sp && sp[0])
    {
        samplesize = sp[0]->s_n;
        dsp->d_perform_method = NULL;
        if(dsp->d_misc == E_NO_INPLACE)
        {
            if(dsp->d_sigs_out)
            {
                tempout = (t_float **)realloc(dsp->d_sigs_out, (size_t)nouts * sizeof(t_float *));
            }
            else
            {
                tempout = (t_float **)malloc((size_t)nouts * sizeof(t_float *));
            }
            if(!tempout)
            {
                if(dsp->d_sigs_out)
                {
                    free(dsp->d_sigs_out);
                    dsp->d_sigs_out = NULL;
                }
                pd_error(dsp, "can't allocate memory for ni inpace processing.");
                return;
            }
            dsp->d_sigs_out = tempout;

            if(dsp->d_sigs_real)
            {
                tempreal = (t_float *)realloc(dsp->d_sigs_real, (size_t)(nouts * samplesize) * sizeof(t_float));
            }
            else
            {
                tempreal = (t_float *)malloc((size_t)(nouts * samplesize) * sizeof(t_float));
            }
            if(!tempreal)
            {
                if(dsp->d_sigs_real)
                {
                    free(dsp->d_sigs_real);
                    dsp->d_sigs_real = NULL;
                }
                free(dsp->d_sigs_out);
                dsp->d_sigs_out = NULL;
                pd_error(dsp, "can't allocate memory for ni inpace processing.");
                return;
            }
            dsp->d_sigs_real = tempreal;
            for(i = 0; i < nouts; i++)
            {
                dsp->d_sigs_out[i] = dsp->d_sigs_real+i*samplesize;
            }
        }
        if(dsp->d_vectors)
        {
            temp = (t_int *)realloc(dsp->d_vectors, (size_t)(nins + nouts + 7) * sizeof(t_int));
        }
        else
        {
            temp = (t_int *)malloc((size_t)(nins + nouts + 7) * sizeof(t_int));
        }
        if(!temp)
        {
            if(dsp->d_vectors)
            {
                free(dsp->d_vectors);
                dsp->d_vectors = NULL;
            }
            free(dsp->d_sigs_real);
            dsp->d_sigs_real = NULL;
            free(dsp->d_sigs_out);
            dsp->d_sigs_out = NULL;
            dsp->d_size = 0;
            pd_error(x, "can't allocate memory for dsp vector.");
            return;
        }
        dsp->d_vectors = temp;
        dsp->d_size = nins + nouts + 7;
        count = (short*)malloc((size_t)(nins + nouts) * sizeof(short));
        if(count)
        {
            for(i = 0; i < (nins + nouts); i++)
            {
                count[i] = 0;
            }
            linetraverser_start(&t, eobj_getcanvas(x));
            while((oc = linetraverser_next(&t)))
            {
                if(t.tr_ob2 == x && obj_issignaloutlet(t.tr_ob, t.tr_outno))
                {
                    count[t.tr_inno] = 1;
                }
            }

            dsp->d_vectors[0] = (t_int)x;
            dsp->d_vectors[1] = (t_int)dsp;
            dsp->d_vectors[2] = (t_int)sp[0]->s_n;
            dsp->d_vectors[3] = (t_int)dsp->d_flags;
            dsp->d_vectors[4] = (t_int)dsp->d_user_param;
            dsp->d_vectors[5] = (t_int)nins;
            dsp->d_vectors[6] = (t_int)nouts;

            for(i = 7; i < dsp->d_size; i++)
            {
                if(sp[i - 7] && sp[i - 7]->s_vec)
                {
                    dsp->d_vectors[i] = (t_int)(sp[i - 7]->s_vec);
                }
                else
                {
                    free(count);
                    free(dsp->d_vectors);
                    dsp->d_vectors = NULL;
                    free(dsp->d_sigs_real);
                    dsp->d_sigs_real = NULL;
                    free(dsp->d_sigs_out);
                    dsp->d_sigs_out = NULL;
                    dsp->d_size = 0;
                    pd_error(x, "one of the signal isn't allocated.");
                    return;
                }
            }

            c->c_widget.w_dsp(x, x, count, sp[0]->s_sr, sp[0]->s_n, 0);
            if(dsp->d_perform_method != NULL && dsp->d_misc == E_INPLACE)
            {
                dsp_addv(eobj_perform_inplace, (int)dsp->d_size, dsp->d_vectors);
            }
            else if(dsp->d_perform_method != NULL && dsp->d_misc == E_NO_INPLACE)
            {
                dsp_addv(eobj_perform_noinplace, (int)dsp->d_size, dsp->d_vectors);
            }

            free(count);
            return;
        }
        else
        {
            free(dsp->d_vectors);
            dsp->d_vectors = NULL;
            free(dsp->d_sigs_real);
            dsp->d_sigs_real = NULL;
            free(dsp->d_sigs_out);
            dsp->d_sigs_out = NULL;
            dsp->d_size = 0;
            pd_error(x, "can't allocate memory for dsp chain counter.");
        }
    }
}