Exemplo n.º 1
0
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;
}
Exemplo n.º 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;
}
Exemplo n.º 3
0
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;
}