Audio-C4Stream-Mixer

 view release on metacpan or  search on metacpan

Mixer.xs  view on Meta::CPAN

	chin = (struct crossfade_channels_s *) in;
	chresult = (struct crossfade_channels_s *) result;
	
	spout = crossfade->spline_out;
	spin = crossfade->spline_in;
	
	while (r < crossfade->len) {
		dout = ((double) *spout) / MAX_AMPL;
		din = ((double) *spin) / MAX_AMPL;
		
		chresult->left = (double) chout->left * dout + (double) chin->left * din;
		chresult->right = (double) chout->right * dout + (double) chin->right * din;
		
		chout++;
		chin++;
		chresult++;
		spout++;
		spin++;
		
		r += sizeof (struct crossfade_channels_s);
	}
}

void CROSSFADE_ease_in_out_quad (int crossfade, SV *out, SV *in, SV *result) {
	crossfade_ease_in_out_quad ((struct crossfade_s *) crossfade, SvPVX(out), SvPVX(in), SvPVX(result));
}


MODULE = Audio::C4Stream::Mixer	PACKAGE = Audio::C4Stream::Mixer

PROTOTYPES: DISABLE


int
crossfade_ease_in_out_quad_func (t, b, c, d)
	float	t
	float	b
	float	c
	float	d

char *
crossfade_build_easeout_quad_spline (d)
	int	d

char *
crossfade_build_easein_quad_spline (d)
	int	d

unsigned int
CROSSFADE_init (duration)
	int	duration

void
CROSSFADE_ease_in_out_quad (crossfade, out, in, result)
	int	crossfade
	SV *	out
	SV *	in
	SV *	result
	PREINIT:
	I32* temp;
	PPCODE:
	temp = PL_markstack_ptr++;
	CROSSFADE_ease_in_out_quad(crossfade, out, in, result);
	if (PL_markstack_ptr != temp) {
          /* truly void, because dXSARGS not invoked */
	  PL_markstack_ptr = temp;
	  XSRETURN_EMPTY; /* return empty stack */
        }
        /* must have used dXSARGS; list context implied */
	return; /* assume stack size is correct */



( run in 2.320 seconds using v1.01-cache-2.11-cpan-71847e10f99 )