Lines Matching defs:psf
76 static int mat5_close (SF_PRIVATE *psf) ;
78 static int mat5_write_header (SF_PRIVATE *psf, int calc_length) ;
79 static int mat5_read_header (SF_PRIVATE *psf) ;
86 mat5_open (SF_PRIVATE *psf)
89 if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
90 { if ((error = mat5_read_header (psf)))
94 if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_MAT5)
97 subformat = SF_CODEC (psf->sf.format) ;
99 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
100 { if (psf->is_pipe)
103 psf->endian = SF_ENDIAN (psf->sf.format) ;
104 if (CPU_IS_LITTLE_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
105 psf->endian = SF_ENDIAN_LITTLE ;
106 else if (CPU_IS_BIG_ENDIAN && (psf->endian == SF_ENDIAN_CPU || psf->endian == 0))
107 psf->endian = SF_ENDIAN_BIG ;
109 if ((error = mat5_write_header (psf, SF_FALSE)))
112 psf->write_header = mat5_write_header ;
115 psf->container_close = mat5_close ;
117 psf->blockwidth = psf->bytewidth * psf->sf.channels ;
123 error = pcm_init (psf) ;
127 error = float32_init (psf) ;
131 error = double64_init (psf) ;
144 mat5_close (SF_PRIVATE *psf)
146 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
147 mat5_write_header (psf, SF_TRUE) ;
156 mat5_write_header (SF_PRIVATE *psf, int calc_length)
164 current = psf_ftell (psf) ;
167 { psf_fseek (psf, 0, SEEK_END) ;
168 psf->filelength = psf_ftell (psf) ;
169 psf_fseek (psf, 0, SEEK_SET) ;
171 psf->datalength = psf->filelength - psf->dataoffset ;
172 if (psf->dataend)
173 psf->datalength -= psf->filelength - psf->dataend ;
175 psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
178 switch (SF_CODEC (psf->sf.format))
204 psf->header.ptr [0] = 0 ;
205 psf->header.indx = 0 ;
206 psf_fseek (psf, 0, SEEK_SET) ;
209 psf_binheader_writef (psf, "bb", BHWv (filename), BHWz (strlen (filename)), BHWv (buffer), BHWz (strlen (buffer) + 1)) ;
211 memset (buffer, ' ', 124 - psf->header.indx) ;
212 psf_binheader_writef (psf, "b", BHWv (buffer), BHWz (124 - psf->header.indx)) ;
214 psf->rwf_endian = psf->endian ;
216 if (psf->rwf_endian == SF_ENDIAN_BIG)
217 psf_binheader_writef (psf, "2b", BHW2 (0x0100), BHWv ("MI"), BHWz (2)) ;
219 psf_binheader_writef (psf, "2b", BHW2 (0x0100), BHWv ("IM"), BHWz (2)) ;
221 psf_binheader_writef (psf, "444444", BHW4 (MAT5_TYPE_ARRAY), BHW4 (64), BHW4 (MAT5_TYPE_UINT32), BHW4 (8), BHW4 (6), BHW4 (0)) ;
222 psf_binheader_writef (psf, "4444", BHW4 (MAT5_TYPE_INT32), BHW4 (8), BHW4 (1), BHW4 (1)) ;
223 psf_binheader_writef (psf, "44b", BHW4 (MAT5_TYPE_SCHAR), BHW4 (strlen (sr_name)), BHWv (sr_name), BHWz (16)) ;
225 if (psf->sf.samplerate > 0xFFFF)
226 psf_binheader_writef (psf, "44", BHW4 (MAT5_TYPE_COMP_UINT), BHW4 (psf->sf.samplerate)) ;
228 { unsigned short samplerate = psf->sf.samplerate ;
230 psf_binheader_writef (psf, "422", BHW4 (MAT5_TYPE_COMP_USHORT), BHW2 (samplerate), BHW2 (0)) ;
233 datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
235 psf_binheader_writef (psf, "t484444", BHW4 (MAT5_TYPE_ARRAY), BHW8 (datasize + 64), BHW4 (MAT5_TYPE_UINT32), BHW4 (8), BHW4 (6), BHW4 (0)) ;
236 psf_binheader_writef (psf, "t4448", BHW4 (MAT5_TYPE_INT32), BHW4 (8), BHW4 (psf->sf.channels), BHW8 (psf->sf.frames)) ;
237 psf_binheader_writef (psf, "44b", BHW4 (MAT5_TYPE_SCHAR), BHW4 (strlen (wd_name)), BHWv (wd_name), BHWz (strlen (wd_name))) ;
239 datasize = psf->sf.frames * psf->sf.channels * psf->bytewidth ;
243 psf_binheader_writef (psf, "t48", BHW4 (encoding), BHW8 (datasize)) ;
246 psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
248 if (psf->error)
249 return psf->error ;
251 psf->dataoffset = psf->header.indx ;
254 psf_fseek (psf, current, SEEK_SET) ;
256 return psf->error ;
260 mat5_read_header (SF_PRIVATE *psf)
267 psf_binheader_readf (psf, "pb", 0, buffer, 124) ;
275 psf_log_printf (psf, "%s\n", buffer) ;
278 psf_binheader_readf (psf, "E22", &version, &endian) ;
281 { psf->endian = psf->rwf_endian = SF_ENDIAN_BIG ;
285 { psf->endian = psf->rwf_endian = SF_ENDIAN_LITTLE ;
295 psf_log_printf (psf, "Version : 0x%04X\n", version) ;
296 psf_log_printf (psf, "Endian : 0x%04X => %s\n", endian,
297 (psf->endian == SF_ENDIAN_LITTLE) ? "Little" : "Big") ;
300 psf_binheader_readf (psf, "44", &type, &size) ;
301 psf_log_printf (psf, "Block\n Type : %X Size : %d\n", type, size) ;
306 psf_binheader_readf (psf, "44", &type, &size) ;
307 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
312 psf_binheader_readf (psf, "44", &flags1, &flags2) ;
313 psf_log_printf (psf, " Flg1 : %X Flg2 : %d\n", flags1, flags2) ;
315 psf_binheader_readf (psf, "44", &type, &size) ;
316 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
321 psf_binheader_readf (psf, "44", &rows, &cols) ;
322 psf_log_printf (psf, " Rows : %d Cols : %d\n", rows, cols) ;
325 { if (psf->sf.samplerate == 0)
326 psf->sf.samplerate = 44100 ;
329 psf_binheader_readf (psf, "4", &type) ;
332 { psf_binheader_readf (psf, "4", &size) ;
333 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
335 { psf_log_printf (psf, "Error : Bad name length.\n") ;
339 psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ;
345 { psf_log_printf (psf, "Error : Bad name length.\n") ;
349 psf_log_printf (psf, " Type : %X\n", type) ;
350 psf_binheader_readf (psf, "4", &name) ;
356 psf_log_printf (psf, " Name : %s\n", name) ;
360 psf_binheader_readf (psf, "44", &type, &size) ;
369 psf_binheader_readf (psf, "d", &samplerate) ;
371 psf_log_printf (psf, " Val : %s\n", name) ;
373 psf->sf.samplerate = psf_lrint (samplerate) ;
380 psf_binheader_readf (psf, "j2j", -4, &samplerate, 2) ;
381 psf_log_printf (psf, " Val : %u\n", samplerate) ;
382 psf->sf.samplerate = samplerate ;
387 psf_log_printf (psf, " Val : %u\n", size) ;
388 psf->sf.samplerate = size ;
392 psf_log_printf (psf, " Type : %X Size : %d ***\n", type, size) ;
399 psf_binheader_readf (psf, "44", &type, &size) ;
400 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
405 psf_binheader_readf (psf, "44", &type, &size) ;
406 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
411 psf_binheader_readf (psf, "44", &flags1, &flags2) ;
412 psf_log_printf (psf, " Flg1 : %X Flg2 : %d\n", flags1, flags2) ;
414 psf_binheader_readf (psf, "44", &type, &size) ;
415 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
420 psf_binheader_readf (psf, "44", &rows, &cols) ;
421 psf_log_printf (psf, " Rows : %X Cols : %d\n", rows, cols) ;
423 psf_binheader_readf (psf, "4", &type) ;
426 { psf_binheader_readf (psf, "4", &size) ;
427 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
429 { psf_log_printf (psf, "Error : Bad name length.\n") ;
433 psf_binheader_readf (psf, "bj", name, size, (8 - (size % 8)) % 8) ;
439 { psf_log_printf (psf, "Error : Bad name length.\n") ;
443 psf_log_printf (psf, " Type : %X\n", type) ;
444 psf_binheader_readf (psf, "4", &name) ;
450 psf_log_printf (psf, " Name : %s\n", name) ;
452 psf_binheader_readf (psf, "44", &type, &size) ;
453 psf_log_printf (psf, " Type : %X Size : %d\n", type, size) ;
459 { psf_log_printf (psf, "*** Error : zero channel count.\n") ;
463 psf->sf.channels = rows ;
464 psf->sf.frames = cols ;
466 psf->sf.format = psf->endian | SF_FORMAT_MAT5 ;
470 psf_log_printf (psf, "Data type : double\n") ;
471 psf->sf.format |= SF_FORMAT_DOUBLE ;
472 psf->bytewidth = 8 ;
476 psf_log_printf (psf, "Data type : float\n") ;
477 psf->sf.format |= SF_FORMAT_FLOAT ;
478 psf->bytewidth = 4 ;
482 psf_log_printf (psf, "Data type : 32 bit PCM\n") ;
483 psf->sf.format |= SF_FORMAT_PCM_32 ;
484 psf->bytewidth = 4 ;
488 psf_log_printf (psf, "Data type : 16 bit PCM\n") ;
489 psf->sf.format |= SF_FORMAT_PCM_16 ;
490 psf->bytewidth = 2 ;
494 psf_log_printf (psf, "Data type : unsigned 8 bit PCM\n") ;
495 psf->sf.format |= SF_FORMAT_PCM_U8 ;
496 psf->bytewidth = 1 ;
500 psf_log_printf (psf, "*** Error : Bad marker %08X\n", type) ;
504 psf->dataoffset = psf_ftell (psf) ;
505 psf->datalength = psf->filelength - psf->dataoffset ;