Diff for /np2/sound/sound.c between versions 1.15 and 1.20

version 1.15, 2004/03/24 06:07:57 version 1.20, 2005/04/01 15:35:49
Line 98  static void streamfilewrite(UINT samples Line 98  static void streamfilewrite(UINT samples
         CBTBL   *cb;          CBTBL   *cb;
         UINT    count;          UINT    count;
         SINT32  buf32[2*512];          SINT32  buf32[2*512];
         BYTE    buf[2*2*512];          UINT8   buf[2*2*512];
           UINT    r;
         UINT    i;          UINT    i;
         SINT32  samp;          SINT32  samp;
   
Line 110  static void streamfilewrite(UINT samples Line 111  static void streamfilewrite(UINT samples
                         cb->cbfn(cb->hdl, buf32, count);                          cb->cbfn(cb->hdl, buf32, count);
                         cb++;                          cb++;
                 }                  }
                   r = min(sndstream.remain, count);
                   if (r) {
                           CopyMemory(sndstream.ptr, buf32, r * 2 * sizeof(SINT32));
                           sndstream.ptr += r * 2;
                           sndstream.remain -= r;
                   }
                 for (i=0; i<count*2; i++) {                  for (i=0; i<count*2; i++) {
                         samp = buf32[i];                          samp = buf32[i];
                         if (samp > 32767) {                          if (samp > 32767) {
Line 119  static void streamfilewrite(UINT samples Line 126  static void streamfilewrite(UINT samples
                                 samp = -32768;                                  samp = -32768;
                         }                          }
                         // little endianなので satuation_s16は使えない                          // little endianなので satuation_s16は使えない
                         buf[i*2+0] = (BYTE)samp;                          buf[i*2+0] = (UINT8)samp;
                         buf[i*2+1] = (BYTE)(samp >> 8);                          buf[i*2+1] = (UINT8)(samp >> 8);
                 }                  }
                 wavewr_write(sndstream.rec, buf, count * 4);                  wavewr_write(sndstream.rec, buf, count * 4);
                 samples -= count;                  samples -= count;
         }          }
 }  }
   
   static void filltailsample(UINT count) {
   
           SINT32  *ptr;
           UINT    orgsize;
           SINT32  sampl;
           SINT32  sampr;
   
           count = min(sndstream.remain, count);
           if (count) {
                   ptr = sndstream.ptr;
                   orgsize = (ptr - sndstream.buffer) / 2;
                   if (orgsize == 0) {
                           sampl = 0;
                           sampr = 0;
                   }
                   else {
                           sampl = *(ptr - 2);
                           sampr = *(ptr - 1);
                   }
                   sndstream.ptr += count * 2;
                   sndstream.remain -= count;
                   do {
                           ptr[0] = sampl;
                           ptr[1] = sampr;
                           ptr += 2;
                   } while(--count);
           }
   }
 #endif  #endif
   
   
Line 224  void sound_changeclock(void) { Line 260  void sound_changeclock(void) {
                 clock = (clock + 1) >> 1;                  clock = (clock + 1) >> 1;
                 hz = (hz + 1) >> 1;                  hz = (hz + 1) >> 1;
         }          }
           TRACEOUT(("hzbase/clockbase = %d/%d", hz, clock));
         soundcfg.hzbase = hz;          soundcfg.hzbase = hz;
         soundcfg.clockbase = clock;          soundcfg.clockbase = clock;
         soundcfg.minclock = 2 * clock / hz;          soundcfg.minclock = 2 * clock / hz;
Line 261  void sound_sync(void) { Line 298  void sound_sync(void) {
         if (length == 0) {          if (length == 0) {
                 return;                  return;
         }          }
           SNDCSEC_ENTER;
 #if defined(SUPPORT_WAVEREC)  #if defined(SUPPORT_WAVEREC)
         if (sndstream.rec) {          if (sndstream.rec) {
                 streamfilewrite(length);                  streamfilewrite(length);
                 soundcfg.lastclock += length * soundcfg.clockbase / soundcfg.hzbase;  
                 beep_eventreset();  
                 return;  
         }          }
           else
 #endif  #endif
         SNDCSEC_ENTER;                  streamprepare(length);
         streamprepare(length);  
         soundcfg.lastclock += length * soundcfg.clockbase / soundcfg.hzbase;          soundcfg.lastclock += length * soundcfg.clockbase / soundcfg.hzbase;
         beep_eventreset();          beep_eventreset();
         SNDCSEC_LEAVE;          SNDCSEC_LEAVE;
Line 288  const SINT32 *sound_pcmlock(void) { Line 323  const SINT32 *sound_pcmlock(void) {
   
 const SINT32 *ret;  const SINT32 *ret;
   
 #if defined(SUPPORT_WAVEREC)  
         if (sndstream.rec) {  
                 return(NULL);  
         }  
 #endif  
         if (locks) {          if (locks) {
                 TRACEOUT(("sound pcm lock: already locked"));                  TRACEOUT(("sound pcm lock: already locked"));
                 return(NULL);                  return(NULL);
Line 301  const SINT32 *ret; Line 331  const SINT32 *ret;
         ret = sndstream.buffer;          ret = sndstream.buffer;
         if (ret) {          if (ret) {
                 SNDCSEC_ENTER;                  SNDCSEC_ENTER;
                 if (sndstream.remain > sndstream.reserve) {                  if (sndstream.remain > sndstream.reserve)
   #if defined(SUPPORT_WAVEREC)
                           if (sndstream.rec) {
                                   filltailsample(sndstream.remain - sndstream.reserve);
                           }
                           else
   #endif
                   {
                         streamprepare(sndstream.remain - sndstream.reserve);                          streamprepare(sndstream.remain - sndstream.reserve);
                         soundcfg.lastclock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK;                          soundcfg.lastclock = CPU_CLOCK + CPU_BASECLOCK - CPU_REMCLOCK;
                         beep_eventreset();                          beep_eventreset();
Line 335  void sound_pcmunlock(const SINT32 *hdl)  Line 372  void sound_pcmunlock(const SINT32 *hdl) 
   
 // ---- pcmmix  // ---- pcmmix
   
 BOOL pcmmix_regist(PMIXDAT *dat, void *datptr, UINT datsize, UINT rate) {  BRESULT pcmmix_regist(PMIXDAT *dat, void *datptr, UINT datsize, UINT rate) {
   
         GETSND  gs;          GETSND  gs;
         BYTE    tmp[256];          UINT8   tmp[256];
         UINT    size;          UINT    size;
         UINT    r;          UINT    r;
         SINT16  *buf;          SINT16  *buf;
Line 384  pmr_err1: Line 421  pmr_err1:
         return(FAILURE);          return(FAILURE);
 }  }
   
 BOOL pcmmix_regfile(PMIXDAT *dat, const char *fname, UINT rate) {  BRESULT pcmmix_regfile(PMIXDAT *dat, const OEMCHAR *fname, UINT rate) {
   
         FILEH   fh;          FILEH   fh;
         UINT    size;          UINT    size;
         BYTE    *ptr;          UINT8   *ptr;
         BOOL    r;          BRESULT r;
   
         r = FAILURE;          r = FAILURE;
         fh = file_open_rb(fname);          fh = file_open_rb(fname);
Line 400  BOOL pcmmix_regfile(PMIXDAT *dat, const  Line 437  BOOL pcmmix_regfile(PMIXDAT *dat, const 
         if (size == 0) {          if (size == 0) {
                 goto pmrf_err2;                  goto pmrf_err2;
         }          }
         ptr = (BYTE *)_MALLOC(size, fname);          ptr = (UINT8 *)_MALLOC(size, fname);
         if (ptr == NULL) {          if (ptr == NULL) {
                 goto pmrf_err2;                  goto pmrf_err2;
         }          }

Removed from v.1.15  
changed lines
  Added in v.1.20


RetroPC.NET-CVS <cvs@retropc.net>