Lines Matching defs:psf
66 static int ircam_close (SF_PRIVATE *psf) ;
67 static int ircam_write_header (SF_PRIVATE *psf, int calc_length) ;
68 static int ircam_read_header (SF_PRIVATE *psf) ;
79 ircam_open (SF_PRIVATE *psf)
83 if (psf->file.mode == SFM_READ || (psf->file.mode == SFM_RDWR && psf->filelength > 0))
84 { if ((error = ircam_read_header (psf)))
88 subformat = SF_CODEC (psf->sf.format) ;
90 if (psf->file.mode == SFM_WRITE || psf->file.mode == SFM_RDWR)
91 { if ((SF_CONTAINER (psf->sf.format)) != SF_FORMAT_IRCAM)
94 psf->endian = SF_ENDIAN (psf->sf.format) ;
95 if (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU)
96 psf->endian = (CPU_IS_BIG_ENDIAN) ? SF_ENDIAN_BIG : SF_ENDIAN_LITTLE ;
98 psf->dataoffset = IRCAM_DATA_OFFSET ;
100 if ((error = ircam_write_header (psf, SF_FALSE)))
103 psf->write_header = ircam_write_header ;
106 psf->container_close = ircam_close ;
110 error = ulaw_init (psf) ;
114 error = alaw_init (psf) ;
119 error = pcm_init (psf) ;
123 error = float32_init (psf) ;
136 ircam_read_header (SF_PRIVATE *psf)
141 psf_binheader_readf (psf, "epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ;
144 { psf_log_printf (psf, "marker: 0x%X\n", marker) ;
148 psf->endian = SF_ENDIAN_LITTLE ;
150 if (psf->sf.channels > SF_MAX_CHANNELS)
151 { psf_binheader_readf (psf, "Epmf44", 0, &marker, &samplerate, &(psf->sf.channels), &encoding) ;
154 if (psf->sf.channels > SF_MAX_CHANNELS)
155 { psf_log_printf (psf, "marker: 0x%X\n", marker) ;
159 psf->endian = SF_ENDIAN_BIG ;
162 psf_log_printf (psf, "marker: 0x%X\n", marker) ;
164 psf->sf.samplerate = (int) samplerate ;
166 psf_log_printf (psf, " Sample Rate : %d\n"
169 psf->sf.samplerate, psf->sf.channels, encoding, get_encoding_str (encoding)) ;
173 psf->bytewidth = 2 ;
174 psf->blockwidth = psf->sf.channels * psf->bytewidth ;
176 psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_16 ;
180 psf->bytewidth = 4 ;
181 psf->blockwidth = psf->sf.channels * psf->bytewidth ;
183 psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_PCM_32 ;
187 psf->bytewidth = 4 ;
188 psf->blockwidth = psf->sf.channels * psf->bytewidth ;
190 psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_FLOAT ;
194 psf->bytewidth = 1 ;
195 psf->blockwidth = psf->sf.channels * psf->bytewidth ;
197 psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ALAW ;
201 psf->bytewidth = 1 ;
202 psf->blockwidth = psf->sf.channels * psf->bytewidth ;
204 psf->sf.format = SF_FORMAT_IRCAM | SF_FORMAT_ULAW ;
212 if (psf->endian == SF_ENDIAN_BIG)
213 psf->sf.format |= SF_ENDIAN_BIG ;
215 psf->sf.format |= SF_ENDIAN_LITTLE ;
220 psf->dataoffset = IRCAM_DATA_OFFSET ;
221 psf->datalength = psf->filelength - psf->dataoffset ;
223 if (psf->sf.frames == 0 && psf->blockwidth)
224 psf->sf.frames = psf->datalength / psf->blockwidth ;
226 psf_log_printf (psf, " Samples : %d\n", psf->sf.frames) ;
228 psf_binheader_readf (psf, "p", IRCAM_DATA_OFFSET) ;
234 ircam_close (SF_PRIVATE *psf)
236 psf_log_printf (psf, "close\n") ;
242 ircam_write_header (SF_PRIVATE *psf, int UNUSED (calc_length))
247 if (psf->pipeoffset > 0)
250 current = psf_ftell (psf) ;
252 /* This also sets psf->endian. */
253 encoding = get_encoding (SF_CODEC (psf->sf.format)) ;
259 psf->header.ptr [0] = 0 ;
260 psf->header.indx = 0 ;
262 if (psf->is_pipe == SF_FALSE)
263 psf_fseek (psf, 0, SEEK_SET) ;
265 samplerate = psf->sf.samplerate ;
267 switch (psf->endian)
269 psf_binheader_writef (psf, "Emf", BHWm (IRCAM_02B_MARKER), BHWf (samplerate)) ;
270 psf_binheader_writef (psf, "E44", BHW4 (psf->sf.channels), BHW4 (encoding)) ;
274 psf_binheader_writef (psf, "emf", BHWm (IRCAM_03L_MARKER), BHWf (samplerate)) ;
275 psf_binheader_writef (psf, "e44", BHW4 (psf->sf.channels), BHW4 (encoding)) ;
281 psf_binheader_writef (psf, "z", BHWz ((size_t) (IRCAM_DATA_OFFSET - psf->header.indx))) ;
284 psf_fwrite (psf->header.ptr, psf->header.indx, 1, psf) ;
286 if (psf->error)
287 return psf->error ;
290 psf_fseek (psf, current, SEEK_SET) ;
292 return psf->error ;