/* sound_read.c -- Write samples to a SoundStream. */ #include #include #include "sound.h" /* Returns: 2 for success, 0 for error or eof. */ int sound_read_short( SoundStream *pSS, short *p_n ) { int msb, lsb; if( pSS->little_endian ) { lsb = getc( pSS->byte_stream ); msb = getc( pSS->byte_stream ); } else { msb = getc( pSS->byte_stream ); lsb = getc( pSS->byte_stream ); } if( msb < 0 || lsb < 0 ) { return( 0 ); } *p_n = msb * 256 + lsb; return( 2 ); } /* Returns: 2 for success, 0 for error or eof. */ int read_sample( SoundStream *pSS, double *p_sample ) { short y, readed; if( readed = sound_read_short( pSS, &y ) ) { *p_sample = decode_sample( y ); } return( readed ); } /* Returns: 4 for success, 0 for error or eof. */ int read_LR_short( SoundStream *pSS, short *p_left, short *p_right ) { int readed; readed = sound_read_short( pSS, p_left ) + sound_read_short( pSS, p_right ); return( readed == 4? 4 : 0 ); } /* Read 4 bytes, store into a signed long, however big that is. Returns: 4 for success, 0 for error or eof. */ int sound_read_32bit( SoundStream *pSS, long *p_n ) { short msw; unsigned short lsw; int readed; if( pSS->little_endian ) { readed = sound_read_short( pSS, &lsw ) + sound_read_short( pSS, &msw ); } else { readed = sound_read_short( pSS, &msw ) + sound_read_short( pSS, &lsw ); } if( readed == 4 ) { *p_n = msw * 65536 + lsw; return( readed ); } else { return( 0 ); } } /* Returns: 4 for success, 0 for error or eof. */ int read_LR( SoundStream *pSS, double *p_left, double *p_right ) { int readed; readed = read_sample( pSS, p_left ) + read_sample( pSS, p_right ); return( readed == 4? 4 : 0 ); }