home *** CD-ROM | disk | FTP | other *** search
- /*
- This function performs resampling of 8 bit monoral
- PCM samples. The result is placed into the destination
- pointer. The pointer is returned to allow it to be used to
- concatinate multiple segments of data from the same, and or
- different PCM samples. The routine assumes that the 8 bit source
- samples are in MicroSoft Corporation (MSC), unsigned char,
- WAVE format. And the destination of in Atari, signed char,
- PCM format.
-
- Change History:
-
- 11/25/92 Changed floating point to fixed point
- 07/30/93 Corrected calculation of "delta" to be cast
- to a fixed point number.
- */
-
- #include "riff.h"
- #include "fixed.h"
-
- void Resample8bitMono(PCM_Samples *Dest,
- PCM_Samples *Src,
- unsigned long Dest_Sample_Rate,
- unsigned long Src_Sample_Rate)
- {
- Fixed delta ;
- Fixed offset ;
-
- delta = fl_fp((double)Src_Sample_Rate/(double)Dest_Sample_Rate) ;
- offset = 0 ;
- while (Dest_Sample_Rate--)
- {
- *Dest->Mono8++ = (unsigned char)((char)Src->Mono8[fp_long(offset)] - 128 ) ;
- offset += delta ;
- }
- return ;
- }
-
- void Resample16bitMono(PCM_Samples *Dest,
- PCM_Samples *Src,
- unsigned long Dest_Sample_Rate,
- unsigned long Src_Sample_Rate)
- {
- Fixed delta ;
- Fixed offset ;
-
- offset = 0 ;
- /*
- * adjust for bytes per sample
- */
- Src_Sample_Rate = Src_Sample_Rate / 2l ;
-
- delta = fl_fp((double)Src_Sample_Rate/(double)Dest_Sample_Rate) ;
- while (Dest_Sample_Rate--)
- {
- *Dest->Mono8++ = Src->Mono16[fp_long(offset)].upper ;
- offset += delta ;
- }
- return ;
- }
-
- void Resample8bitStereo(PCM_Samples *Dest,
- PCM_Samples *Src,
- unsigned long Dest_Sample_Rate,
- unsigned long Src_Sample_Rate)
- {
- Fixed delta ;
- Fixed offset ;
-
- offset = 0 ;
- delta = fl_fp((double)Src_Sample_Rate/(double)Dest_Sample_Rate) ;
- /*
- * adjust for stereo sample
- */
- Dest_Sample_Rate = Dest_Sample_Rate / 2l ;
- while (Dest_Sample_Rate--)
- {
- (*Dest->Stereo8).left = (unsigned char)((char)Src->Stereo8[fp_long(offset)].left - 128 ) ;
- (*Dest->Stereo8).right = (unsigned char)((char)Src->Stereo8[fp_long(offset)].right - 128 ) ;
- offset += delta ;
- Dest->Stereo8++ ;
- }
- return ;
- }
-
- void Resample16bitStereo(PCM_Samples *Dest,
- PCM_Samples *Src,
- unsigned long Dest_Sample_Rate,
- unsigned long Src_Sample_Rate)
- {
- Fixed delta ;
- Fixed offset ;
-
- offset = 0 ;
- /*
- * adjust for bytes per sample
- */
- Src_Sample_Rate = Src_Sample_Rate / 2l ;
-
- delta = fl_fp((double)Src_Sample_Rate/(double)Dest_Sample_Rate) ;
- while (Dest_Sample_Rate--)
- {
- (*Dest->Stereo8).left = Src->Stereo16[fp_long(offset)].left.upper ;
- (*Dest->Stereo8).right = Src->Stereo16[fp_long(offset)].right.upper ;
- offset += delta ;
- Dest->Stereo8++ ;
- }
- return ;
- }
-
-