Lines Matching defs:psf

46 static	int	nist_close	(SF_PRIVATE *psf) ;
47 static int nist_write_header (SF_PRIVATE *psf, int calc_length) ;
48 static int nist_read_header (SF_PRIVATE *psf) ;
54 nist_open (SF_PRIVATE *psf)
57 if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
58 { if ((error = nist_read_header (psf)))
62 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
63 { if (psf->is_pipe)
66 if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_NIST)
69 psf->endian = SF_ENDIAN (psf->sf.format) ;
70 if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)
71 psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
73 psf->blockwidth = psf->bytewidth * psf->sf.channels ;
74 psf->sf.frames = 0 ;
76 if ((error = nist_write_header (psf, SF_FALSE)))
79 psf->write_header = nist_write_header ;
82 psf->container_close = nist_close ;
84 switch (SF_CODEC (psf->sf.format))
86 error = pcm_init (psf) ;
92 error = pcm_init (psf) ;
96 error = ulaw_init (psf) ;
100 error = alaw_init (psf) ;
120 nist_read_header (SF_PRIVATE *psf)
128 psf_binheader_readf (psf, "pb", 0, psf_header, NIST_HEADER_LENGTH) ;
144 { psf_log_printf (psf, "Not a NIST file.\n") ;
149 psf->dataoffset = count ;
151 { psf_log_printf (psf, "*** Suspicious header length.\n") ;
152 psf->dataoffset = NIST_HEADER_LENGTH ;
169 { psf_log_printf (psf, "*** Unknown encoding : %s\n", str) ;
175 sscanf (cptr, "channel_count -i %d", &(psf->sf.channels)) ;
178 sscanf (cptr, "sample_rate -i %d", &(psf->sf.samplerate)) ;
182 psf->sf.frames = samples ;
186 sscanf (cptr, "sample_n_bytes -i %d", &(psf->bytewidth)) ;
189 psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
196 psf_log_printf (psf, "Weird sample_byte_format : strlen '%s' != %d\n", str, bytes) ;
199 { if (psf->bytewidth == 0)
200 psf->bytewidth = bytes ;
201 else if (psf->bytewidth - bytes != 0)
202 { psf_log_printf (psf, "psf->bytewidth (%d) != bytes (%d)\n", psf->bytewidth, bytes) ;
207 psf->endian = SF_ENDIAN_LITTLE ;
209 psf->endian = SF_ENDIAN_BIG ;
211 { psf_log_printf (psf, "Weird endian-ness : %s\n", str) ;
216 psf->sf.format |= psf->endian ;
223 { psf_log_printf (psf, "Non-interleaved data unsupported.\n", str) ;
227 psf->blockwidth = psf->sf.channels * psf->bytewidth ;
228 psf->datalength = psf->filelength - psf->dataoffset ;
230 psf_fseek (psf, psf->dataoffset, SEEK_SET) ;
233 { switch (psf->bytewidth)
235 psf->sf.format |= SF_FORMAT_PCM_S8 ;
239 psf->sf.format |= SF_FORMAT_PCM_16 ;
243 psf->sf.format |= SF_FORMAT_PCM_24 ;
247 psf->sf.format |= SF_FORMAT_PCM_32 ;
254 psf->sf.format |= encoding ;
258 /* Sanitize psf->sf.format. */
259 switch (SF_CODEC (psf->sf.format))
264 psf->sf.format = SF_FORMAT_NIST | SF_CODEC (psf->sf.format) ;
275 nist_close (SF_PRIVATE *psf)
277 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
278 nist_write_header (psf, SF_TRUE) ;
287 nist_write_header (SF_PRIVATE *psf, int calc_length)
292 current = psf_ftell (psf) ;
295 { psf->filelength = psf_get_filelen (psf) ;
297 psf->datalength = psf->filelength - psf->dataoffset ;
299 if (psf->dataend)
300 psf->datalength -= psf->filelength - psf->dataend ;
302 if (psf->bytewidth > 0)
303 psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
306 if (psf->endian == SF_ENDIAN_BIG)
308 else if (psf->endian == SF_ENDIAN_LITTLE)
314 memset (psf->header.ptr, 0, psf->header.len) ;
315 psf->header.indx = 0 ;
317 psf_fseek (psf, 0, SEEK_SET) ;
319 psf_asciiheader_printf (psf, "NIST_1A\n 1024\n") ;
320 psf_asciiheader_printf (psf, "channel_count -i %d\n", psf->sf.channels) ;
321 psf_asciiheader_printf (psf, "sample_rate -i %d\n", psf->sf.samplerate) ;
323 switch (SF_CODEC (psf->sf.format))
325 psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n") ;
326 psf_asciiheader_printf (psf, "sample_n_bytes -i 1\n"
333 psf_asciiheader_printf (psf, "sample_n_bytes -i %d\n", psf->bytewidth) ;
334 psf_asciiheader_printf (psf, "sample_sig_bits -i %d\n", psf->bytewidth * 8) ;
335 psf_asciiheader_printf (psf, "sample_coding -s3 pcm\n"
336 "sample_byte_format -s%d %s\n", psf->bytewidth, end_str) ;
340 psf_asciiheader_printf (psf, "sample_coding -s4 alaw\n") ;
341 psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ;
345 psf_asciiheader_printf (psf, "sample_coding -s4 ulaw\n") ;
346 psf_asciiheader_printf (psf, "sample_n_bytes -s1 1\n") ;
352 psf->dataoffset = NIST_HEADER_LENGTH ;
355 samples = psf->sf.frames ;
356 psf_asciiheader_printf (psf, "sample_count -i %ld\n", samples) ;
357 psf_asciiheader_printf (psf, "end_head\n") ;
360 psf_binheader_writef (psf, "z", BHWz ((size_t) (NIST_HEADER_LENGTH - psf->header.indx))) ;
362 psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
364 if (psf->error)
365 return psf->error ;
368 psf_fseek (psf, current, SEEK_SET) ;
370 return psf->error ;