示例#1
0
文件: avr.c 项目: Emisense/eTracks
static int stopwrite(sox_format_t * ft)
{
    priv_t * avr = (priv_t *)ft->priv;

    unsigned size = avr->size / ft->signal.channels;

    /* Fix size */
    lsx_seeki(ft, (off_t)26, SEEK_SET);
    lsx_writedw (ft, size);

    /* Fix lend */
    lsx_seeki(ft, (off_t)34, SEEK_SET);
    lsx_writedw (ft, size);

    return(SOX_SUCCESS);
}
示例#2
0
static int write_header(sox_format_t * ft)
{
  char * comments  = lsx_cat_comments(ft->oob.comments);
  size_t comments_len = strlen(comments);
  size_t comments_bytes = (comments_len + 7) & ~7u; /* Multiple of 8 bytes */
  uint64_t size   = ft->olength? ft->olength : ft->signal.length;
  sox_bool error  = sox_false
  ||lsx_writedw(ft, *(uint32_t *)&magic[MACHINE_IS_BIGENDIAN])
  ||lsx_writedw(ft, FIXED_HDR + (unsigned)comments_bytes)
  ||lsx_writeqw(ft, size)
  ||lsx_writedf(ft, ft->signal.rate)
  ||lsx_writedw(ft, ft->signal.channels)
  ||lsx_writedw(ft, (unsigned)comments_len)
  ||lsx_writechars(ft, comments, comments_len)
  ||lsx_padbytes(ft, comments_bytes - comments_len);
  free(comments);
  return error? SOX_EOF: SOX_SUCCESS;
}
示例#3
0
文件: sf.c 项目: CaptainHayashi/sox
static int write_header(sox_format_t * ft)
{
  char * comment  = lsx_cat_comments(ft->oob.comments);
  size_t len      = min(FIXED_HDR - 26, strlen(comment)) + 1; /* null-terminated */
  size_t info_len = max(4, (len + 3) & ~3u); /* Minimum & multiple of 4 bytes */
  int i = ft->encoding.reverse_bytes == MACHINE_IS_BIGENDIAN? 0 : 2;
  sox_bool error  = sox_false
  ||lsx_writechars(ft, id[i].str, sizeof(id[i].str))
  ||lsx_writef(ft, ft->signal.rate)
  ||lsx_writedw(ft, ft->signal.channels)
  ||lsx_writedw(ft, ft_enc(ft->encoding.bits_per_sample, ft->encoding.encoding))
  ||lsx_writew(ft, SF_COMMENT)
  ||lsx_writew(ft, (unsigned) info_len)
  ||lsx_writechars(ft, comment, len)
  ||lsx_padbytes(ft, FIXED_HDR - 20 - len);
  free(comment);
  return error? SOX_EOF: SOX_SUCCESS;
}
示例#4
0
文件: avr.c 项目: Emisense/eTracks
static int startwrite(sox_format_t * ft)
{
    priv_t * avr = (priv_t *)ft->priv;
    int rc;

    if (!ft->seekable) {
        lsx_fail_errno(ft,SOX_EOF,"AVR: file is not seekable");
        return(SOX_EOF);
    }

    rc = lsx_rawstartwrite (ft);
    if (rc)
        return rc;

    /* magic */
    lsx_writes(ft, AVR_MAGIC);

    /* name */
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);
    lsx_writeb(ft, 0);

    /* mono */
    if (ft->signal.channels == 1) {
        lsx_writew (ft, 0);
    }
    else if (ft->signal.channels == 2) {
        lsx_writew (ft, 0xffff);
    }
    else {
        lsx_fail_errno(ft,SOX_EFMT,"AVR: number of channels not supported");
        return(0);
    }

    /* rez */
    if (ft->encoding.bits_per_sample == 8) {
        lsx_writew (ft, 8);
    }
    else if (ft->encoding.bits_per_sample == 16) {
        lsx_writew (ft, 16);
    }
    else {
        lsx_fail_errno(ft,SOX_EFMT,"AVR: unsupported sample resolution");
        return(SOX_EOF);
    }

    /* sign */
    if (ft->encoding.encoding == SOX_ENCODING_SIGN2) {
        lsx_writew (ft, 0xffff);
    }
    else if (ft->encoding.encoding == SOX_ENCODING_UNSIGNED) {
        lsx_writew (ft, 0);
    }
    else {
        lsx_fail_errno(ft,SOX_EFMT,"AVR: unsupported encoding");
        return(SOX_EOF);
    }

    /* loop */
    lsx_writew (ft, 0xffff);

    /* midi */
    lsx_writew (ft, 0xffff);

    /* rate */
    lsx_writedw(ft, (unsigned)(ft->signal.rate + .5));

    /* size */
    /* Don't know the size yet. */
    lsx_writedw (ft, 0);

    /* lbeg */
    lsx_writedw (ft, 0);

    /* lend */
    /* Don't know the size yet, so we can't set lend, either. */
    lsx_writedw (ft, 0);

    /* res1 */
    lsx_writew (ft, 0);

    /* res2 */
    lsx_writew (ft, 0);

    /* res3 */
    lsx_writew (ft, 0);

    /* ext */
    lsx_writebuf(ft, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", sizeof(avr->ext));

    /* user */
    lsx_writebuf(ft,
                 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
                 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
                 "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
                 "\0\0\0\0", sizeof (avr->user));

    return(SOX_SUCCESS);
}
示例#5
0
文件: wve.c 项目: Amalerd/SoxPlayer
static int write_header(sox_format_t * ft)
{
  return lsx_writechars(ft, ID1, sizeof(ID1))
      || lsx_writedw(ft, (unsigned)(ft->olength? ft->olength:ft->signal.length))
      || lsx_writechars(ft, ID2, sizeof(ID2))? SOX_EOF:SOX_SUCCESS;
}