Audio

 view release on metacpan or  search on metacpan

Data/Data.xs  view on Meta::CPAN

SV *
Audio_shorts(au)
Audio *	au;

void
Audio_silence(au, time = 0.1)
Audio *	au;
float	time;

void
Audio_tone(au,freq,dur = 0.1, amp = 0.5)
Audio *	au;
float	freq;
float	dur
float	amp

void
Audio_noise(au,dur = 0.1, amp = 0.5)
Audio *	au;
float	dur
float	amp

void
DESTROY(au)
Audio *	au
PPCODE:
 {
  if (au->comment)
   SvREFCNT_dec(au->comment);
  if (au->data)
   SvREFCNT_dec(au->data);
 }

Audio *
create(class)
char *	class
PREINIT:
  Audio x;
CODE:
 {
  Zero(&x,1,Audio);
  x.comment = newSV(0);
  x.data    = newSVpv("",0);
  RETVAL    = &x;
 }
OUTPUT:
  RETVAL

void
Audio_clone(Audio *au)
CODE:
{
 SV *result = Nullsv;
 Audio *rau = Audio_new(aTHX_ &result,au->rate,au->flags,0,AUDIO_CLASS(ST(0)));
 Audio_append_sv(aTHX_ rau, ST(0));
 ST(0) = result;
 XSRETURN(1);
}

void
Audio_timerange(Audio *au, float t0, float t1)
CODE:
{
 SV *result = Nullsv;
 UV samples = Audio_samples(au);
 UV start = au->rate*t0;
 UV end   = au->rate*t1+0.5;
 Audio *rau = Audio_new(aTHX_ &result,au->rate,au->flags,end-start,AUDIO_CLASS(ST(0)));
 if (start < samples)
  {
   float *d   = AUDIO_DATA(rau);
   float *s   = AUDIO_DATA(au)+start;
   if (end > samples)
    end = samples;
   Copy(s,d,(end-start)*AUDIO_WORDS(au),float);
  }
 ST(0) = result;
 XSRETURN(1);
}

void
Audio_bounds(Audio *au, float t0 = 0.0, float t1 = Audio_duration(au))
CODE:
{
 UV samples = Audio_samples(au);
 UV start = au->rate*t0;
 UV end   = au->rate*t1+0.5;
 if (start < samples)
  {
   float *s   = AUDIO_DATA(au)+start;
   float *e;
   float max = *s++;
   float min = max;
   if (end > samples)
    end = samples;
   e = AUDIO_DATA(au)+end;
   while (s < e)
    {
     float v = *s++;
     if (v > max) max = v;
     if (v < min) min = v;
    }
   ST(0) = sv_2mortal(newSVnv(max));
   ST(1) = sv_2mortal(newSVnv(min));
   XSRETURN(2);
  }
 XSRETURN(0);
}

SV *
Audio_comment(au,...)
Audio *		au
CODE:
 {
  if (items > 1)
   {
    if (!au->comment)
     au->comment = newSV(0);
    sv_setsv(au->comment,ST(1));
   }
  RETVAL = SvREFCNT_inc(au->comment);



( run in 0.871 second using v1.01-cache-2.11-cpan-3c2a17b8caa )