Lines Matching defs:psf

51 	int (*reader) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
52 int (*writer) (SF_PRIVATE *psf, struct tag_SDS_PRIVATE *psds) ;
68 static int sds_close (SF_PRIVATE *psf) ;
70 static int sds_write_header (SF_PRIVATE *psf, int calc_length) ;
71 static int sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
73 static int sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
75 static sf_count_t sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len) ;
76 static sf_count_t sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len) ;
77 static sf_count_t sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len) ;
78 static sf_count_t sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len) ;
80 static sf_count_t sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len) ;
81 static sf_count_t sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len) ;
82 static sf_count_t sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len) ;
83 static sf_count_t sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len) ;
85 static sf_count_t sds_seek (SF_PRIVATE *psf, int mode, sf_count_t offset) ;
86 static int sds_byterate (SF_PRIVATE * psf) ;
88 static int sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
89 static int sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
90 static int sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
92 static int sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *iptr, int readcount) ;
94 static int sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
95 static int sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
96 static int sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds) ;
98 static int sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *iptr, int writecount) ;
105 sds_open (SF_PRIVATE *psf)
110 psf->sf.frames = 0 ;
114 psf->codec_data = psds ;
116 if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
117 { if ((error = sds_read_header (psf, psds)))
121 if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_SDS)
124 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
125 { if (sds_write_header (psf, SF_FALSE))
126 return psf->error ;
128 psf->write_header = sds_write_header ;
130 psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ;
133 if ((error = sds_init (psf, psds)) != 0)
136 psf->container_close = sds_close ;
137 psf->seek = sds_seek ;
138 psf->byterate = sds_byterate ;
140 psf->blockwidth = 0 ;
149 sds_close (SF_PRIVATE *psf)
151 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
154 if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
155 { psf_log_printf (psf, "*** Bad psf->codec_data ptr.\n") ;
161 psds->writer (psf, psds) ;
164 sds_write_header (psf, SF_TRUE) ;
171 sds_init (SF_PRIVATE *psf, SDS_PRIVATE *psds)
174 return (psf->error = SFE_SDS_BAD_BIT_WIDTH) ;
192 if (psf->file.mode == SFM_READ || psf->file.mode == SFM_RDWR)
193 { psf->read_short = sds_read_s ;
194 psf->read_int = sds_read_i ;
195 psf->read_float = sds_read_f ;
196 psf->read_double = sds_read_d ;
199 psds->reader (psf, psds) ;
202 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
203 { psf->write_short = sds_write_s ;
204 psf->write_int = sds_write_i ;
205 psf->write_float = sds_write_f ;
206 psf->write_double = sds_write_d ;
213 sds_read_header (SF_PRIVATE *psf, SDS_PRIVATE *psds)
220 bytesread = psf_binheader_readf (psf, "pE211", 0, &marker, &channel, &byte) ;
225 bytesread += psf_binheader_readf (psf, "e2", &sample_no) ;
228 psf_log_printf (psf, "Midi Sample Dump Standard (.sds)\nF07E\n"
232 bytesread += psf_binheader_readf (psf, "e13", &bitwidth, &samp_period) ;
239 psf_log_printf (psf, " Bit Width : %d\n", psds->bitwidth) ;
241 { psf_log_printf (psf, " Bit Width : %d (should be > 1)\n", psds->bitwidth) ;
246 { psf->sf.samplerate = 1000000000 / samp_period ;
248 psf_log_printf (psf, " Sample Period : %d\n"
250 samp_period, psf->sf.samplerate) ;
253 { psf->sf.samplerate = 16000 ;
255 psf_log_printf (psf, " Sample Period : %d (should be > 0)\n"
257 samp_period, psf->sf.samplerate) ;
260 bytesread += psf_binheader_readf (psf, "e3331", &data_length, &sustain_loop_start, &sustain_loop_end, &loop_type) ;
264 psf->sf.frames = psds->frames = data_length ;
269 psf_log_printf (psf, " Sustain Loop\n"
275 psf->dataoffset = SDS_DATA_OFFSET ;
276 psf->datalength = psf->filelength - psf->dataoffset ;
278 bytesread += psf_binheader_readf (psf, "1", &byte) ;
280 psf_log_printf (psf, "bad end : %X\n", byte & 0xFF) ;
282 for (blockcount = 0 ; bytesread < psf->filelength ; blockcount++)
284 bytesread += (int) psf_fread (&marker, 1, 2, psf) ;
289 psf_fseek (psf, SDS_BLOCK_SIZE - 2, SEEK_CUR) ;
293 psf_log_printf (psf, "\nBlocks : %d\n", blockcount) ;
297 psf_log_printf (psf, "Samples/Block : %d\n", psds->samplesperblock) ;
299 psf_log_printf (psf, "Frames : %d\n", blockcount * psds->samplesperblock) ;
302 psf->sf.channels = 1 ;
303 psf->sf.sections = 1 ;
311 psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_S8 ;
315 psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_16 ;
319 psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_24 ;
323 psf->sf.format = SF_FORMAT_SDS | SF_FORMAT_PCM_32 ;
327 psf_log_printf (psf, "*** Weird byte width (%d)\n", (psds->bitwidth + 7) / 8) ;
331 psf_fseek (psf, SDS_DATA_OFFSET, SEEK_SET) ;
337 sds_write_header (SF_PRIVATE *psf, int calc_length)
343 if ((psds = (SDS_PRIVATE *) psf->codec_data) == NULL)
344 { psf_log_printf (psf, "*** Bad psf->codec_data ptr.\n") ;
348 if (psf->pipeoffset > 0)
351 current = psf_ftell (psf) ;
354 psf->sf.frames = psds->total_written ;
360 psds->writer (psf, psds) ;
362 psf_fseek (psf, -1 * SDS_BLOCK_SIZE, SEEK_CUR) ;
369 psf->header.ptr [0] = 0 ;
370 psf->header.indx = 0 ;
372 if (psf->is_pipe == SF_FALSE)
373 psf_fseek (psf, 0, SEEK_SET) ;
375 psf_binheader_writef (psf, "E211", BHW2 (0xF07E), BHW1 (0), BHW1 (1)) ;
377 switch (SF_CODEC (psf->sf.format))
391 samp_period = SDS_INT_TO_3BYTE_ENCODE (1000000000 / psf->sf.samplerate) ;
393 psf_binheader_writef (psf, "e213", BHW2 (0), BHW1 (psds->bitwidth), BHW3 (samp_period)) ;
399 psf_binheader_writef (psf, "e33311", BHW3 (data_length), BHW3 (sustain_loop_start), BHW3 (sustain_loop_end), BHW1 (loop_type), BHW1 (0xF7)) ;
402 psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
404 if (psf->error)
405 return psf->error ;
407 psf->dataoffset = psf->header.indx ;
408 psf->datalength = psds->write_block * SDS_BLOCK_SIZE ;
411 psf_fseek (psf, current, SEEK_SET) ;
413 return psf->error ;
421 sds_2byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
434 if ((k = (int) psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
435 psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
452 { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
465 sds_3byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
478 if ((k = (int) psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
479 psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
496 { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
509 sds_4byte_read (SF_PRIVATE *psf, SDS_PRIVATE *psds)
522 if ((k = (int) psf_fread (psds->read_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
523 psf_log_printf (psf, "*** Warning : short read (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
540 { psf_log_printf (psf, "Block %d : checksum is %02X should be %02X\n", psds->read_data [4], checksum, psds->read_data [SDS_BLOCK_SIZE - 2]) ;
554 sds_read_s (SF_PRIVATE *psf, short *ptr, sf_count_t len)
561 if (psf->codec_data == NULL)
563 psds = (SDS_PRIVATE*) psf->codec_data ;
569 count = sds_read (psf, psds, iptr, readcount) ;
580 sds_read_i (SF_PRIVATE *psf, int *ptr, sf_count_t len)
584 if (psf->codec_data == NULL)
586 psds = (SDS_PRIVATE*) psf->codec_data ;
588 total = sds_read (psf, psds, ptr, len) ;
594 sds_read_f (SF_PRIVATE *psf, float *ptr, sf_count_t len)
602 if (psf->codec_data == NULL)
604 psds = (SDS_PRIVATE*) psf->codec_data ;
606 if (psf->norm_float == SF_TRUE)
615 count = sds_read (psf, psds, iptr, readcount) ;
626 sds_read_d (SF_PRIVATE *psf, double *ptr, sf_count_t len)
634 if (psf->codec_data == NULL)
636 psds = (SDS_PRIVATE*) psf->codec_data ;
638 if (psf->norm_double == SF_TRUE)
647 count = sds_read (psf, psds, iptr, readcount) ;
658 sds_read (SF_PRIVATE *psf, SDS_PRIVATE *psds, int *ptr, int len)
668 psds->reader (psf, psds) ;
685 sds_seek (SF_PRIVATE *psf, int mode, sf_count_t seek_from_start)
690 if ((psds = psf->codec_data) == NULL)
691 { psf->error = SFE_INTERNAL ;
695 if (psf->datalength < 0 || psf->dataoffset < 0)
696 { psf->error = SFE_BAD_SEEK ;
700 if (seek_from_start < 0 || seek_from_start > psf->sf.frames)
701 { psf->error = SFE_BAD_SEEK ;
706 psds->writer (psf, psds) ;
714 { psf->error = SFE_BAD_SEEK ;
718 file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ;
720 if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset)
721 { psf->error = SFE_SEEK_FAILED ;
726 psds->reader (psf, psds) ;
732 { psf->error = SFE_BAD_SEEK ;
736 file_offset = psf->dataoffset + newblock * SDS_BLOCK_SIZE ;
738 if (psf_fseek (psf, file_offset, SEEK_SET) != file_offset)
739 { psf->error = SFE_SEEK_FAILED ;
744 psds->reader (psf, psds) ;
749 psf->error = SFE_BAD_SEEK ;
758 sds_byterate (SF_PRIVATE * psf)
760 if (psf->file.mode == SFM_READ)
761 return (psf->datalength * psf->sf.samplerate) / psf->sf.frames ;
770 sds_2byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
797 if ((k = (int) psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
798 psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
811 sds_3byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
839 if ((k = (int) psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
840 psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
853 sds_4byte_write (SF_PRIVATE *psf, SDS_PRIVATE *psds)
882 if ((k = (int) psf_fwrite (psds->write_data, 1, SDS_BLOCK_SIZE, psf)) != SDS_BLOCK_SIZE)
883 psf_log_printf (psf, "*** Warning : psf_fwrite (%d != %d).\n", k, SDS_BLOCK_SIZE) ;
896 sds_write_s (SF_PRIVATE *psf, const short *ptr, sf_count_t len)
903 if (psf->codec_data == NULL)
905 psds = (SDS_PRIVATE*) psf->codec_data ;
914 count = sds_write (psf, psds, iptr, writecount) ;
923 sds_write_i (SF_PRIVATE *psf, const int *ptr, sf_count_t len)
927 if (psf->codec_data == NULL)
929 psds = (SDS_PRIVATE*) psf->codec_data ;
932 total = sds_write (psf, psds, ptr, len) ;
938 sds_write_f (SF_PRIVATE *psf, const float *ptr, sf_count_t len)
946 if (psf->codec_data == NULL)
948 psds = (SDS_PRIVATE*) psf->codec_data ;
951 if (psf->norm_float == SF_TRUE)
962 count = sds_write (psf, psds, iptr, writecount) ;
971 sds_write_d (SF_PRIVATE *psf, const double *ptr, sf_count_t len)
979 if (psf->codec_data == NULL)
981 psds = (SDS_PRIVATE*) psf->codec_data ;
984 if (psf->norm_double == SF_TRUE)
995 count = sds_write (psf, psds, iptr, writecount) ;
1004 sds_write (SF_PRIVATE *psf, SDS_PRIVATE *psds, const int *ptr, int len)
1017 psds->writer (psf, psds) ;