Audio-SoundFile

 view release on metacpan or  search on metacpan

Header/Header.xs  view on Meta::CPAN

MODULE = Audio::SoundFile::Header    PACKAGE = Audio::SoundFile::Header

SV *
format_check(self)
  SV *self
PROTOTYPE: $
PREINIT:
  SF_INFO *info;
  HV      *hash;
  SV      *head;
PPCODE:
{
  if (! (sv_isobject(self) && sv_derived_from(self, CLASSNAME)))
    XSRETURN_UNDEF;

  if (SvTYPE(hash = (HV *)SvRV(self)) != SVt_PVHV)
    XSRETURN_UNDEF;

  if ((info = Audio_SoundFile_Header_toSFinfo(aTHX_ self)) != NULL) {
    head = Audio_SoundFile_Header_toObject(aTHX_ hash, info);
    free(info);

Reader/Reader.xs  view on Meta::CPAN

  char *name
  char *path
  SV   *href
PROTOTYPE: $$$
PREINIT:
  SF_INFO  info;
  SNDFILE *file;
  SV      *self;
  HV      *hash;
  SV      *head;
PPCODE:
{
  if (! SvROK(href))
    XSRETURN_UNDEF;

  if ((file = sf_open(path, SFM_READ, &info)) == NULL)
    XSRETURN_UNDEF;

  if (! SvOK(head = Audio_SoundFile_Header_toObject(aTHX_ NULL, &info)))
    XSRETURN_UNDEF;

Reader/Reader.xs  view on Meta::CPAN

}

SV *
close(self)
  SV *self
PROTOTYPE: $
PREINIT:
  HV  *hash;
  SV **file;
  SV **head;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  XSRETURN_IV(sf_close((SNDFILE *)SvIV(*file)));
}

SV *
bseek(self, offset, whence)
  SV    *self
  off_t  offset
  int    whence
PROTOTYPE: $$$
PREINIT:
  SF_INFO *info;
  HV      *hash;
  SV     **file;
  SV     **head;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  info = Audio_SoundFile_Header_toSFinfo(aTHX_ *head);

  XSRETURN_IV(info->channels * sf_seek((SNDFILE *)SvIV(*file),
                                       info->channels * offset, whence));
}

SV *
fseek(self, offset, whence)
  SV    *self
  off_t  offset
  int    whence
PROTOTYPE: $$$
PREINIT:
  HV  *hash;
  SV **file;
  SV **head;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  XSRETURN_IV(sf_seek((SNDFILE *)SvIV(*file), offset, whence));
}

int
bread_raw(self, bref, blocks)
  SV     *self
  SV     *bref
  size_t  blocks
PROTOTYPE: $$$
PREINIT:
  HV    *hash;
  SV   **file;
  SV   **head;
  short *buff;
  size_t blen;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  buff = (short *)malloc(sizeof(short) * blocks);
  blen = sf_read_short((SNDFILE *)SvIV(*file), buff, blocks);

  if (blen > 0)
    sv_setpvn(SvRV(bref), (char *)buff, blen * sizeof(short) / sizeof(char));
  else
    sv_setsv(SvRV(bref), &PL_sv_undef);

Reader/Reader.xs  view on Meta::CPAN

  SV  *self
  SV  *bref
  int  blocks
PROTOTYPE: $$$
PREINIT:
  HV    *hash;
  SV   **file;
  SV   **head;
  pdl   *newp;
  size_t blen;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  newp = PDL->create(PDL_PERM);
  newp->datatype = PDL_S;
  PDL->setdims(newp, (PDL_Long *)&blocks, 1);
  PDL->allocdata(newp);

  blen = sf_read_short((SNDFILE *)SvIV(*file), newp->data, blocks);

Reader/Reader.xs  view on Meta::CPAN


  XSRETURN_IV(blen);
}

SV *
fread_raw(self, bref, frames)
  SV     *self
  SV     *bref
  size_t  frames
PROTOTYPE: $$$
PPCODE:
{
  XSRETURN_UNDEF; /* FIXME: not yet implemented */
}

SV *
fread_pdl(self, bref, frames)
  SV     *self
  SV     *bref
  size_t  frames
PROTOTYPE: $$$
PPCODE:
{
  XSRETURN_UNDEF; /* FIXME: not yet implemented */
}

BOOT:
  PDL_addr = perl_get_sv("PDL::SHARE", FALSE);
  if (! PDL_addr)
     croak("This module requires use of PDL::Core first");
  PDL = (Core *)SvIV(PDL_addr);

Writer/Writer.xs  view on Meta::CPAN

SV *
new(name, path, href)
  char *name
  char *path
  SV   *href
PROTOTYPE: $$$
PREINIT:
  SF_INFO *info;
  SNDFILE *file;
  HV      *hash;
PPCODE:
{
  if ((info = Audio_SoundFile_Header_toSFinfo(aTHX_ href)) == NULL)
    XSRETURN_UNDEF;

  if ((file = sf_open(path, SFM_WRITE, info)) == NULL)
    XSRETURN_UNDEF;

  hash = newHV();
  hv_store(hash, "head", 4, href, 0);
  hv_store(hash, "file", 4, newSViv((IV)file), 0);

Writer/Writer.xs  view on Meta::CPAN

}

SV *
close(self)
  SV *self
PROTOTYPE: $
PREINIT:
  HV  *hash;
  SV **file;
  SV **head;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  XSRETURN_IV(sf_close((SNDFILE *)SvIV(*file)));
}

SV *
bseek(self, offset, whence)
  SV    *self
  off_t  offset
  int    whence
PROTOTYPE: $$$
PREINIT:
  SF_INFO *info;
  HV      *hash;
  SV     **file;
  SV     **head;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  info = Audio_SoundFile_Header_toSFinfo(aTHX_ *head);

  XSRETURN_IV(info->channels * sf_seek((SNDFILE *)SvIV(*file),
                                       info->channels * offset, whence));
}

SV *
fseek(self, offset, whence)
  SV    *self
  off_t  offset
  int    whence
PROTOTYPE: $$$
PREINIT:
  HV  *hash;
  SV **file;
  SV **head;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  XSRETURN_IV(sf_seek((SNDFILE *)SvIV(*file), offset, whence));
}

SV *
bwrite_raw(self, buff)
  SV *self
  SV *buff
PROTOTYPE: $$
PREINIT:
  HV    *hash;
  SV   **file;
  SV   **head;
  short *bptr;
  STRLEN blen;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  bptr = (short *)SvPV(buff, blen);
  blen = sf_write_short((SNDFILE *)SvIV(*file),
                        bptr, blen * sizeof(char) / sizeof(short));

  XSRETURN_IV(blen);
}

SV *
bwrite_pdl(self, buff)
  SV  *self
  pdl *buff
PROTOTYPE: $$
PREINIT:
  HV    *hash;
  SV   **file;
  SV   **head;
  size_t blen;
PPCODE:
{
  CHECK_AND_INIT(self, hash, file, head);

  blen = sf_write_short((SNDFILE *)SvIV(*file), buff->data, buff->nvals);

  XSRETURN_IV(blen);
}

SV *
fwrite_raw(self, buff)
  SV *self
  SV *buff
PROTOTYPE: $$
PPCODE:
{
  XSRETURN_UNDEF; /* FIXME: not yet implemented */
}

SV *
fwrite_pdl(self, buff)
  SV  *self
  pdl *buff
PROTOTYPE: $$
PPCODE:
{
  XSRETURN_UNDEF; /* FIXME: not yet implemented */
}

BOOT:
  PDL_addr = perl_get_sv("PDL::SHARE", FALSE);
  if (! PDL_addr)
     croak("This module requires use of PDL::Core first");
  PDL = (Core *)SvIV(PDL_addr);



( run in 0.450 second using v1.01-cache-2.11-cpan-71847e10f99 )