Lines Matching +full:smp +full:- +full:offset
2 * Output is always in little-endian (80x86/VAX) order.
34 #define HEADERSIZE (sizeof(struct smpheader) - 1) /* -1 for name's \0 */
56 uint32_t SMPTEoffset; /* in subframes - huh? */
58 /* sampled sound -1 if unknown */
61 /* Private data for SMP file */
82 lsx_readdw(ft, &(trailer->loops[i].start)); in readtrailer()
83 ft->oob.loops[i].start = trailer->loops[i].start; in readtrailer()
84 lsx_readdw(ft, &(trailer->loops[i].end)); in readtrailer()
85 ft->oob.loops[i].length = in readtrailer()
86 trailer->loops[i].end - trailer->loops[i].start; in readtrailer()
87 lsx_readb(ft, &(trailer->loops[i].type)); in readtrailer()
88 ft->oob.loops[i].type = trailer->loops[i].type; in readtrailer()
89 lsx_readw(ft, &(trailer->loops[i].count)); in readtrailer()
90 ft->oob.loops[i].count = trailer->loops[i].count; in readtrailer()
93 if (lsx_readbuf(ft, trailer->markers[i].name, MARKERLEN) != MARKERLEN) in readtrailer()
95 lsx_fail_errno(ft,SOX_EHDR,"EOF in SMP"); in readtrailer()
98 trailer->markers[i].name[MARKERLEN] = 0; in readtrailer()
99 lsx_readdw(ft, &(trailer->markers[i].position)); in readtrailer()
101 lsx_readsb(ft, &(trailer->MIDInote)); in readtrailer()
102 lsx_readdw(ft, &(trailer->rate)); in readtrailer()
103 lsx_readdw(ft, &(trailer->SMPTEoffset)); in readtrailer()
104 lsx_readdw(ft, &(trailer->CycleSize)); in readtrailer()
109 * set the trailer data - loops and markers, to reasonably benign values
116 if (ft->oob.loops[i].type != 0) { in settrailer()
117 trailer->loops[i].start = ft->oob.loops[i].start > UINT_MAX in settrailer()
119 : ft->oob.loops[i].start; in settrailer()
121 trailer->loops[i].end = ft->oob.loops[i].start + ft->oob.loops[i].length > UINT_MAX in settrailer()
123 : ft->oob.loops[i].start + ft->oob.loops[i].length; in settrailer()
124 trailer->loops[i].type = ft->oob.loops[i].type; in settrailer()
125 trailer->loops[i].count = ft->oob.loops[i].count; in settrailer()
128 trailer->loops[i].start = ~0u; in settrailer()
130 trailer->loops[i].end = 0; in settrailer()
131 trailer->loops[i].type = 0; in settrailer()
132 trailer->loops[i].count = 0; in settrailer()
136 strcpy(trailer->markers[i].name, " "); in settrailer()
137 trailer->markers[i].position = ~0u; in settrailer()
139 trailer->MIDInote = MIDI_UNITY; /* Unity play back */ in settrailer()
140 trailer->rate = rate; in settrailer()
141 trailer->SMPTEoffset = 0; in settrailer()
142 trailer->CycleSize = ~0u; in settrailer()
155 lsx_writedw(ft, trailer->loops[i].start); in writetrailer()
156 lsx_writedw(ft, trailer->loops[i].end); in writetrailer()
157 lsx_writeb(ft, trailer->loops[i].type); in writetrailer()
158 lsx_writew(ft, trailer->loops[i].count); in writetrailer()
161 if (lsx_writes(ft, trailer->markers[i].name) == SOX_EOF) in writetrailer()
163 lsx_fail_errno(ft,SOX_EHDR,"EOF in SMP"); in writetrailer()
166 lsx_writedw(ft, trailer->markers[i].position); in writetrailer()
168 lsx_writeb(ft, (uint8_t)(trailer->MIDInote)); in writetrailer()
169 lsx_writedw(ft, trailer->rate); in writetrailer()
170 lsx_writedw(ft, trailer->SMPTEoffset); in writetrailer()
171 lsx_writedw(ft, trailer->CycleSize); in writetrailer()
175 static int sox_smpseek(sox_format_t * ft, uint64_t offset) in sox_smpseek() argument
179 priv_t * smp = (priv_t *) ft->priv; in sox_smpseek() local
181 new_offset = offset * (ft->encoding.bits_per_sample >> 3); in sox_smpseek()
183 channel_block = ft->signal.channels * (ft->encoding.bits_per_sample >> 3); in sox_smpseek()
190 new_offset += (channel_block - alignment); in sox_smpseek()
191 new_offset += smp->dataStart; in sox_smpseek()
193 ft->sox_errno = lsx_seeki(ft, (off_t)new_offset, SEEK_SET); in sox_smpseek()
195 if( ft->sox_errno == SOX_SUCCESS ) in sox_smpseek()
196 smp->NoOfSamps = ft->signal.length - (new_offset / (ft->encoding.bits_per_sample >> 3)); in sox_smpseek()
198 return(ft->sox_errno); in sox_smpseek()
209 priv_t * smp = (priv_t *) ft->priv; in sox_smpstartread() local
218 if (! ft->seekable) in sox_smpstartread()
220 lsx_fail_errno(ft,SOX_EOF,"SMP input file must be a file, not a pipe"); in sox_smpstartread()
227 lsx_fail_errno(ft,SOX_EHDR,"unexpected EOF in SMP header"); in sox_smpstartread()
232 lsx_fail_errno(ft,SOX_EHDR,"SMP header does not begin with magic word %s", SVmagic); in sox_smpstartread()
237 lsx_fail_errno(ft,SOX_EHDR,"SMP header is not version %s", SVvers); in sox_smpstartread()
244 for (namelen = NAMELEN-1; in sox_smpstartread()
245 namelen >= 0 && header.name[namelen] == ' '; namelen--) in sox_smpstartread()
247 for (commentlen = COMMENTLEN-1; in sox_smpstartread()
248 commentlen >= 0 && header.comments[commentlen] == ' '; commentlen--) in sox_smpstartread()
250 sprintf(smp->comment, "%.*s: %.*s", namelen+1, header.name, in sox_smpstartread()
252 sox_append_comments(&ft->oob.comments, smp->comment); in sox_smpstartread()
256 smp->NoOfSamps = dw; in sox_smpstartread()
262 if (lsx_seeki(ft, (off_t)(smp->NoOfSamps * 2), 1) == -1) in sox_smpstartread()
264 lsx_fail_errno(ft,errno,"SMP unable to seek to trailer"); in sox_smpstartread()
269 lsx_fail_errno(ft,SOX_EHDR,"unexpected EOF in SMP trailer"); in sox_smpstartread()
274 if (lsx_seeki(ft, (off_t)samplestart, 0) == -1) in sox_smpstartread()
276 lsx_fail_errno(ft,errno,"SMP unable to seek back to start of sample data"); in sox_smpstartread()
280 ft->signal.rate = (int) trailer.rate; in sox_smpstartread()
281 ft->encoding.bits_per_sample = 16; in sox_smpstartread()
282 ft->encoding.encoding = SOX_ENCODING_SIGN2; in sox_smpstartread()
283 ft->signal.channels = 1; in sox_smpstartread()
284 smp->dataStart = samplestart; in sox_smpstartread()
285 ft->signal.length = smp->NoOfSamps; in sox_smpstartread()
300 ft->oob.instr.nloops = 0; in sox_smpstartread()
303 ft->oob.instr.nloops++; in sox_smpstartread()
304 for(i = 0; i < ft->oob.instr.nloops; i++) { in sox_smpstartread()
305 ft->oob.loops[i].type = trailer.loops[i].type; in sox_smpstartread()
306 ft->oob.loops[i].count = trailer.loops[i].count; in sox_smpstartread()
307 ft->oob.loops[i].start = trailer.loops[i].start; in sox_smpstartread()
308 ft->oob.loops[i].length = trailer.loops[i].end in sox_smpstartread()
309 - trailer.loops[i].start; in sox_smpstartread()
311 ft->oob.instr.MIDIlow = ft->oob.instr.MIDIhi = in sox_smpstartread()
312 ft->oob.instr.MIDInote = trailer.MIDInote; in sox_smpstartread()
313 if (ft->oob.instr.nloops > 0) in sox_smpstartread()
314 ft->oob.instr.loopmode = SOX_LOOP_8; in sox_smpstartread()
316 ft->oob.instr.loopmode = SOX_LOOP_NONE; in sox_smpstartread()
329 priv_t * smp = (priv_t *) ft->priv; in sox_smpread() local
333 for(; done < len && smp->NoOfSamps; done++, smp->NoOfSamps--) { in sox_smpread()
343 priv_t * smp = (priv_t *) ft->priv; in sox_smpstartwrite() local
345 char * comment = lsx_cat_comments(ft->oob.comments); in sox_smpstartwrite()
348 if (! ft->seekable) in sox_smpstartwrite()
350 lsx_fail_errno(ft,SOX_EOF,"Output .smp file must be a file, not a pipe"); in sox_smpstartwrite()
356 sprintf(header.comments, "%-*s", COMMENTLEN - 1, "Converted using Sox."); in sox_smpstartwrite()
357 sprintf(header.name, "%-*.*s", NAMELEN, NAMELEN, comment); in sox_smpstartwrite()
363 lsx_fail_errno(ft,errno,"SMP: Can't write header completely"); in sox_smpstartwrite()
367 smp->NoOfSamps = 0; in sox_smpstartwrite()
374 priv_t * smp = (priv_t *) ft->priv; in sox_smpwrite() local
380 datum = (int) SOX_SAMPLE_TO_SIGNED_16BIT(*buf++, ft->clips); in sox_smpwrite()
382 smp->NoOfSamps++; in sox_smpwrite()
391 priv_t * smp = (priv_t *) ft->priv; in sox_smpstopwrite() local
395 settrailer(ft, &trailer, ft->signal.rate); in sox_smpstopwrite()
397 if (lsx_seeki(ft, (off_t)112, 0) == -1) in sox_smpstopwrite()
399 lsx_fail_errno(ft,errno,"SMP unable to seek back to save size"); in sox_smpstopwrite()
402 lsx_writedw(ft, smp->NoOfSamps > UINT_MAX ? UINT_MAX : (unsigned)smp->NoOfSamps); in sox_smpstopwrite()
407 LSX_FORMAT_HANDLER(smp) in LSX_FORMAT_HANDLER() argument
409 static char const * const names[] = {"smp", NULL}; in LSX_FORMAT_HANDLER()