Lines Matching defs:psf
72 static int voc_close (SF_PRIVATE *psf) ;
73 static int voc_write_header (SF_PRIVATE *psf, int calc_length) ;
74 static int voc_read_header (SF_PRIVATE *psf) ;
84 static int voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc) ;
86 static int voc_multi_read_uc2s (SF_PRIVATE *psf, short *ptr, int len) ;
87 static int voc_multi_read_les2s (SF_PRIVATE *psf, short *ptr, int len) ;
89 static int voc_multi_read_uc2i (SF_PRIVATE *psf, int *ptr, int len) ;
90 static int voc_multi_read_les2i (SF_PRIVATE *psf, int *ptr, int len) ;
92 static int voc_multi_read_uc2f (SF_PRIVATE *psf, float *ptr, int len) ;
93 static int voc_multi_read_les2f (SF_PRIVATE *psf, float *ptr, int len) ;
95 static int voc_multi_read_uc2d (SF_PRIVATE *psf, double *ptr, int len) ;
96 static int voc_multi_read_les2d (SF_PRIVATE *psf, double *ptr, int len) ;
104 voc_open (SF_PRIVATE *psf)
107 if (psf->is_pipe)
110 if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
111 { if ((error = voc_read_header (psf)))
115 subformat = SF_CODEC (psf->sf.format) ;
117 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
118 { if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_VOC)
121 psf->endian = SF_ENDIAN_LITTLE ;
123 if ((error = voc_write_header (psf, SF_FALSE)))
126 psf->write_header = voc_write_header ;
129 psf->blockwidth = psf->bytewidth * psf->sf.channels ;
131 psf->container_close = voc_close ;
136 error = pcm_init (psf) ;
140 error = alaw_init (psf) ;
144 error = ulaw_init (psf) ;
157 voc_read_header (SF_PRIVATE *psf)
165 offset = psf_binheader_readf (psf, "pb", 0, creative, SIGNED_SIZEOF (creative)) ;
176 psf_log_printf (psf, "%s\n", creative) ;
178 offset += psf_binheader_readf (psf, "e222", &dataoffset, &version, &checksum) ;
180 psf->dataoffset = dataoffset ;
182 psf_log_printf (psf, "dataoffset : %d\n"
184 "checksum : 0x%X\n", psf->dataoffset, version, checksum) ;
189 if (! (psf->codec_data = malloc (sizeof (VOC_DATA))))
192 pvoc = (VOC_DATA*) psf->codec_data ;
197 psf->sf.format = SF_FORMAT_VOC ; /* Major format */
199 psf->endian = SF_ENDIAN_LITTLE ;
207 offset += psf_binheader_readf (psf, "1", &block_type) ;
211 offset += psf_binheader_readf (psf, "e3", &size) ;
213 psf_log_printf (psf, " ASCII : %d\n", size) ;
216 { offset += psf_binheader_readf (psf, "b", header, size) ;
218 psf_log_printf (psf, " text : %s\n", header) ;
222 offset += psf_binheader_readf (psf, "j", size) ;
226 offset += psf_binheader_readf (psf, "e32", &size, &count) ;
227 psf_log_printf (psf, " Repeat : %d\n", count) ;
235 default : psf_log_printf (psf, "*** Weird block marker (%d)\n", block_type) ;
245 offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ;
247 psf->sf.samplerate = 1000000 / (256 - (rate_byte & 0xFF)) ;
249 psf_log_printf (psf, " Sound Data : %d\n sr : %d => %dHz\n comp : %d\n",
250 size, rate_byte, psf->sf.samplerate, compression) ;
252 if (offset + size - 1 > psf->filelength)
253 { psf_log_printf (psf, "Seems to be a truncated file.\n") ;
254 psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ;
257 else if (psf->filelength - offset - size > 4)
258 { psf_log_printf (psf, "Seems to be a multi-segment file (#1).\n") ;
259 psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ;
263 psf->dataoffset = offset ;
264 psf->dataend = psf->filelength - 1 ;
266 psf->sf.channels = 1 ;
267 psf->bytewidth = 1 ;
269 psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
279 offset += psf_binheader_readf (psf, "e3211", &size, &rate_short, &pack, &stereo) ;
281 psf_log_printf (psf, " Extended : %d\n", size) ;
283 psf_log_printf (psf, " size : 4\n") ;
285 psf_log_printf (psf, " size : %d (should be 4)\n", size) ;
287 psf_log_printf (psf, " pack : %d\n"
291 { psf->sf.channels = 2 ;
292 psf->sf.samplerate = 128000000 / (65536 - rate_short) ;
295 { psf->sf.channels = 1 ;
296 psf->sf.samplerate = 256000000 / (65536 - rate_short) ;
299 psf_log_printf (psf, " sr : %d => %dHz\n", (rate_short & 0xFFFF), psf->sf.samplerate) ;
301 offset += psf_binheader_readf (psf, "1", &block_type) ;
304 { psf_log_printf (psf, "*** Expecting VOC_SOUND_DATA section.\n") ;
308 offset += psf_binheader_readf (psf, "e311", &size, &rate_byte, &compression) ;
310 psf_log_printf (psf, " Sound Data : %d\n"
315 if (offset + size - 1 > psf->filelength)
316 { psf_log_printf (psf, "Seems to be a truncated file.\n") ;
317 psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ;
320 else if (offset + size - 1 < psf->filelength)
321 { psf_log_printf (psf, "Seems to be a multi-segment file (#2).\n") ;
322 psf_log_printf (psf, "offset: %d size: %d sum: %d filelength: %D\n", offset, size, offset + size, psf->filelength) ;
326 psf->dataoffset = offset ;
327 psf->dataend = psf->filelength - 1 ;
329 psf->bytewidth = 1 ;
331 psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
340 offset += psf_binheader_readf (psf, "e341124", &size, &psf->sf.samplerate,
343 if (size * 2 == psf->filelength - 39)
344 { int temp_size = psf->filelength - 31 ;
346 psf_log_printf (psf, " Extended II : %d (SoX bug: should be %d)\n", size, temp_size) ;
350 psf_log_printf (psf, " Extended II : %d\n", size) ;
352 psf_log_printf (psf, " sample rate : %d\n"
354 " channels : %d\n", psf->sf.samplerate, bitwidth, channels) ;
358 psf_log_printf (psf, " encoding : 0 (SoX bug: should be 4 for 16 bit signed PCM)\n") ;
361 psf_log_printf (psf, " encoding : %d => %s\n", encoding, voc_encoding2str (encoding)) ;
364 psf_log_printf (psf, " fourbytes : %X\n", fourbytes) ;
366 psf->sf.channels = channels ;
368 psf->dataoffset = offset ;
369 psf->dataend = psf->filelength - 1 ;
371 if (size + 31 == psf->filelength + 1)
375 psf_log_printf (psf, "Missing zero byte at end of file.\n") ;
376 size = psf->filelength - 30 ;
377 psf->dataend = 0 ;
379 else if (size + 31 > psf->filelength)
380 { psf_log_printf (psf, "Seems to be a truncated file.\n") ;
381 size = psf->filelength - 31 ;
383 else if (size + 31 < psf->filelength)
384 psf_log_printf (psf, "Seems to be a multi-segment file (#3).\n") ;
388 psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_U8 ;
389 psf->bytewidth = 1 ;
393 psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_PCM_16 ;
394 psf->bytewidth = 2 ;
398 psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ALAW ;
399 psf->bytewidth = 1 ;
403 psf->sf.format = SF_FORMAT_VOC | SF_FORMAT_ULAW ;
404 psf->bytewidth = 1 ;
421 voc_write_header (SF_PRIVATE *psf, int calc_length)
425 current = psf_ftell (psf) ;
428 { psf->filelength = psf_get_filelen (psf) ;
430 psf->datalength = psf->filelength - psf->dataoffset ;
431 if (psf->dataend)
432 psf->datalength -= psf->filelength - psf->dataend ;
434 psf->sf.frames = psf->datalength / (psf->bytewidth * psf->sf.channels) ;
437 subformat = SF_CODEC (psf->sf.format) ;
439 psf->header.ptr [0] = 0 ;
440 psf->header.indx = 0 ;
441 psf_fseek (psf, 0, SEEK_SET) ;
444 psf_binheader_writef (psf, "eb1", BHWv ("Creative Voice File"), BHWz (19), BHW1 (0x1A)) ;
447 psf_binheader_writef (psf, "e222", BHW2 (26), BHW2 (0x0114), BHW2 (0x111F)) ;
455 if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 1)
457 rate_const = 256 - 1000000 / psf->sf.samplerate ;
460 psf_binheader_writef (psf, "e1311", BHW1 (VOC_SOUND_DATA), BHW3 ((int) (psf->datalength + 1)), BHW1 (rate_const), BHW1 (0)) ;
462 else if (subformat == SF_FORMAT_PCM_U8 && psf->sf.channels == 2)
464 rate_const = 65536 - 128000000 / psf->sf.samplerate ;
469 psf_binheader_writef (psf, "e13211", BHW1 (VOC_EXTENDED), BHW3 (4), BHW2 (rate_const), BHW1 (0), BHW1 (1)) ;
472 rate_const = 256 - 1000000 / psf->sf.samplerate ;
477 psf_binheader_writef (psf, "e1311", BHW1 (VOC_SOUND_DATA), BHW3 ((int) (psf->datalength + 1)), BHW1 (rate_const), BHW1 (0)) ;
482 if (psf->sf.channels < 1 || psf->sf.channels > 2)
487 psf->bytewidth = 1 ;
488 length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
490 psf_binheader_writef (psf, "e1341124", BHW1 (VOC_EXTENDED_II), BHW3 (length), BHW4 (psf->sf.samplerate), BHW1 (16), BHW1 (psf->sf.channels), BHW2 (4), BHW4 (0)) ;
494 psf->bytewidth = 2 ;
495 length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
497 psf_binheader_writef (psf, "e1341124", BHW1 (VOC_EXTENDED_II), BHW3 (length), BHW4 (psf->sf.samplerate), BHW1 (16), BHW1 (psf->sf.channels), BHW2 (4), BHW4 (0)) ;
501 psf->bytewidth = 1 ;
502 length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
503 psf_binheader_writef (psf, "e1341124", BHW1 (VOC_EXTENDED_II), BHW3 (length), BHW4 (psf->sf.samplerate), BHW1 (8), BHW1 (psf->sf.channels), BHW2 (6), BHW4 (0)) ;
507 psf->bytewidth = 1 ;
508 length = psf->sf.frames * psf->sf.channels * psf->bytewidth + 12 ;
509 psf_binheader_writef (psf, "e1341124", BHW1 (VOC_EXTENDED_II), BHW3 (length), BHW4 (psf->sf.samplerate), BHW1 (8), BHW1 (psf->sf.channels), BHW2 (7), BHW4 (0)) ;
516 psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
518 if (psf->error)
519 return psf->error ;
521 psf->dataoffset = psf->header.indx ;
524 psf_fseek (psf, current, SEEK_SET) ;
526 return psf->error ;
530 voc_close (SF_PRIVATE *psf)
532 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
539 psf_fseek (psf, 0, SEEK_END) ;
542 psf_fwrite (&byte, 1, 1, psf) ;
544 voc_write_header (psf, SF_TRUE) ;
568 voc_multi_init (SF_PRIVATE *psf, VOC_DATA *pvoc)
570 psf->sf.frames = 0 ;
573 { psf->read_short = voc_multi_read_uc2s ;
574 psf->read_int = voc_multi_read_uc2i ;
575 psf->read_float = voc_multi_read_uc2f ;
576 psf->read_double = voc_multi_read_uc2d ;
581 { psf->read_short = voc_multi_read_les2s ;
582 psf->read_int = voc_multi_read_les2i ;
583 psf->read_float = voc_multi_read_les2f ;
584 psf->read_double = voc_multi_read_les2d ;
588 psf_log_printf (psf, "Error : bitwith != 8 && bitwidth != 16.\n") ;
597 voc_multi_read_uc2s (SF_PRIVATE *psf, short *ptr, int len)
604 voc_multi_read_les2s (SF_PRIVATE *psf, short *ptr, int len)
612 voc_multi_read_uc2i (SF_PRIVATE *psf, int *ptr, int len)
619 voc_multi_read_les2i (SF_PRIVATE *psf, int *ptr, int len)
627 voc_multi_read_uc2f (SF_PRIVATE *psf, float *ptr, int len)
634 voc_multi_read_les2f (SF_PRIVATE *psf, float *ptr, int len)
642 voc_multi_read_uc2d (SF_PRIVATE *psf, double *ptr, int len)
649 voc_multi_read_les2d (SF_PRIVATE *psf, double *ptr, int len)