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; }
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; }
static int write_header(sox_format_t * ft) { char buf[128]; uint64_t samples = (ft->olength ? ft->olength : ft->signal.length) / ft->signal.channels; lsx_writes(ft, "NIST_1A\n"); lsx_writes(ft, " 1024\n"); if (samples) { sprintf(buf, "sample_count -i %" PRIu64 "\n", samples); lsx_writes(ft, buf); } sprintf(buf, "sample_n_bytes -i %d\n", ft->encoding.bits_per_sample >> 3); lsx_writes(ft, buf); sprintf(buf, "channel_count -i %d\n", ft->signal.channels); lsx_writes(ft, buf); if (ft->encoding.bits_per_sample == 8) sprintf(buf, "sample_byte_format -s1 1\n"); else sprintf(buf, "sample_byte_format -s2 %s\n", ft->encoding.reverse_bytes != MACHINE_IS_BIGENDIAN ? "10" : "01"); lsx_writes(ft, buf); sprintf(buf, "sample_rate -i %u\n", (unsigned) (ft->signal.rate + .5)); lsx_writes(ft, buf); if (ft->encoding.encoding == SOX_ENCODING_ULAW) lsx_writes(ft, "sample_coding -s4 ulaw\n"); else lsx_writes(ft, "sample_coding -s3 pcm\n"); lsx_writes(ft, "end_head\n"); lsx_padbytes(ft, 1024 - (size_t)lsx_tell(ft)); return SOX_SUCCESS; }