我想用两个320字节大小的缓冲区轮流装载待播放的声音数据,程序如下,但播放效果很不好,请问我应该如何改进?
 case MM_WOM_OPEN:
               // Enable and disable buttons
          
          EnableWindow (GetDlgItem (hwnd, IDC_RECORD_BEG), FALSE) ;
          EnableWindow (GetDlgItem (hwnd, IDC_RECORD_END), FALSE) ;
          EnableWindow (GetDlgItem (hwnd, IDC_PLAY_BEG),   FALSE) ;
          EnableWindow (GetDlgItem (hwnd, IDC_PLAY_PAUSE), TRUE)  ;
          EnableWindow (GetDlgItem (hwnd, IDC_PLAY_END),   TRUE)  ;
          EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REP),   FALSE) ;
          EnableWindow (GetDlgItem (hwnd, IDC_PLAY_REV),   FALSE) ;
          EnableWindow (GetDlgItem (hwnd, IDC_PLAY_SPEED), FALSE) ;
          SetFocus (GetDlgItem (hwnd, IDC_PLAY_END)) ;
          
  
          pSaveBuffer=malloc(INP_BUFFER_SIZE);
          pSaveBuffer1=malloc(INP_BUFFER_SIZE);           fp=fopen("simple.dat","rb");
             if(fp==0)
 {MessageBox (NULL, TEXT ("The file can not be opened!"),
       szAppName, MB_ICONERROR) ;
 }
            fread(pSaveBuffer,2,160,fp);
            fread(pSaveBuffer1,2,160,fp);
  filelength=dwDataLength-640;
        // Set up header
          pWaveHdr1->lpData          = pSaveBuffer ;
          pWaveHdr1->dwBufferLength  = INP_BUFFER_SIZE;//change
          pWaveHdr1->dwBytesRecorded = 0 ;
          pWaveHdr1->dwUser          = 0 ;
          pWaveHdr1->dwFlags         = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
          pWaveHdr1->dwLoops         = dwRepetitions ;
          pWaveHdr1->lpNext          = NULL ;
          pWaveHdr1->reserved        = 0 ;
          
         pWaveHdr2->lpData          = pSaveBuffer1;
          pWaveHdr2->dwBufferLength  = INP_BUFFER_SIZE;//change
          pWaveHdr2->dwBytesRecorded = 0 ;
          pWaveHdr2->dwUser          = 0 ;
          pWaveHdr2->dwFlags         = WHDR_BEGINLOOP | WHDR_ENDLOOP ;
          pWaveHdr2->dwLoops         = dwRepetitions ;
          pWaveHdr2->lpNext          = NULL ;
          pWaveHdr2->reserved        = 0 ;   // Prepare and write
          
          waveOutPrepareHeader (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
 waveOutPrepareHeader (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
          waveOutWrite (hWaveOut, pWaveHdr1, sizeof (WAVEHDR)) ;
          waveOutWrite (hWaveOut, pWaveHdr2, sizeof (WAVEHDR)) ;
          
          bEnding = FALSE ;
          bPlaying = TRUE ;
          return TRUE ;
          
     case MM_WOM_DONE:
           if(filelength<=0)

  fclose(fp);
           waveOutUnprepareHeader (hWaveOut, pWaveHdr1, sizeof(WAVEHDR)) ;
           waveOutUnprepareHeader (hWaveOut, pWaveHdr2, sizeof(WAVEHDR)) ;
           waveOutClose (hWaveOut) ;
         return TRUE;
}
         
        fread(((LPWAVEHDR)lParam)->lpData,2,160,fp);
         filelength=filelength-320;
  waveOutPrepareHeader (hWaveOut,((LPWAVEHDR)lParam) , sizeof (WAVEHDR)) ;
 waveOutWrite(hWaveOut,(LPWAVEHDR)lParam,sizeof(WAVEHDR));
        return TRUE ;