//Рендинг в буфер
BOOL PlayBuffer()
{
DWORD dwStartOfs;
DWORD lpvData;
DWORD dwBytesLocked;
//DWORD dwStatus;
DWORD dwPlay=0;     //Address of a variable that receives the offset, in bytes, of the play cursor. This parameter can be NULL if the value is not wanted.

IF (lpdsbuffer==NULL) return FALSE;
//Если буфер не проигрывается то выходим
//!!! Что то странное, статус всегда возвращает не равный DSBSTATUS_PLAYING
//COMETHOD(lpdsbuffer,#IDirectSoundBuffer.GetStatus,#dwStatus);
//IF (dwStatus!=DSBSTATUS_PLAYING) return FALSE;

IF (COMETHOD(lpdsbuffer,#IDirectSoundBuffer.GetCurrentPosition,#dwPlay, NULL)!=DS_OK) return FALSE;

//  if ((dwPlay>=dwMidBuffer) && (dwLastPlayPos < dwMidBuffer)
//      || (dwPlay<dwLastPlayPos))
//if ((dwPlay>=dwMidBuffer) && (dwLastPlayPos < dwMidBuffer)
//                          || (dwPlay<dwLastPlayPos))

if ((dwPlay>=dwMidBuffer) && (bMidBufferYes==FALSE)){

bMidBufferYes=TRUE;
bZeroBufferYes=FALSE;
//if (dwPlay<dwLastPlayPos ) dwStartOfs=dwMidBuffer;
//if (dwPlay>=dwMidBuffer)   dwStartOfs=0;

dwStartOfs=0;

  //          IF(dwPlay<dwMidBuffer)   dwStartOfs=dwMidBuffer;
       //БЛОКИРУЕМ
       COMETHOD(lpdsbuffer,#IDirectSoundBuffer.Lock,
                            dwStartOfs,              //Позиция курсора записи
                            dwMidBuffer,             //Блокируемый размер
                            #lpvData,                //Указатель на первую часть данных
                            #dwBytesLocked,          //Размер первой части данных
                            NULL,                    //Указатель на вторую часть данных
                            NULL,                    //Размер второй части данных
                            0                        //DSBLOCK_ENTIREBUFFER     //DSBLOCK_FROMWRITECURSOR флаг способа блокировани
                 );

       //Если загруже DUH поток то рендерим его
       IF (DUH!=0) {
                   //DUH_RENDERER *duh_start_renderer(DUH *duh, int n_channels, long pos);
                DUH_RENDERER=_duh_start_renderer(DUH,1,position);   //Рендируем
//int l = duh_render(sr, depth, unsign, volume, delta, bufsize, &buffer);
//
//long duh_render(
//  DUH_RENDERER *dr,
//  int bits, int unsign,
//  float volume, float delta,
//  long size, void *sptr
//)
//delta = 65536.0f / sampling_rate;
//;65536/22050=2.972154195011
//2.97f
//stdcall duh_render,[DUH_RENDERER],8,0x80,1.0f,2.97f,16384,Buffer
               _duh_render(DUH_RENDERER,8,0x80,1.0f,2.97f,dwBytesLocked,lpvData);
               position=_duh_renderer_get_position(DUH_RENDERER);
                  }

      //СНИМАЕМ БЛОКИРОВКУ
      COMETHOD(lpdsbuffer,#IDirectSoundBuffer.Unlock,lpvData,dwBytesLocked, NULL, 0);

                                                        }

//========================================================



if ((dwPlay<dwMidBuffer) && (bZeroBufferYes==FALSE))

                                                        {
bZeroBufferYes=TRUE;
bMidBufferYes=FALSE;

dwStartOfs=dwMidBuffer;

       //БЛОКИРУЕМ
       COMETHOD(lpdsbuffer,#IDirectSoundBuffer.Lock,
                            dwStartOfs,              //Позиция курсора записи
                            dwMidBuffer,             //Блокируемый размер
                            #lpvData,                //Указатель на первую часть данных
                            #dwBytesLocked,          //Размер первой части данных
                            NULL,                    //Указатель на вторую часть данных
                            NULL,                    //Размер второй части данных
                            0                        //DSBLOCK_ENTIREBUFFER     //DSBLOCK_FROMWRITECURSOR флаг способа блокировани
                 );

       //Если загруже DUH поток то рендерим его
       IF (DUH!=0) {
                   //DUH_RENDERER *duh_start_renderer(DUH *duh, int n_channels, long pos);
                DUH_RENDERER=_duh_start_renderer(DUH,1,position);   //Рендируем
               _duh_render(DUH_RENDERER,8,0x80,1.0f,2.97f,dwBytesLocked,lpvData);
               position=_duh_renderer_get_position(DUH_RENDERER);
                  }

      //СНИМАЕМ БЛОКИРОВКУ
      COMETHOD(lpdsbuffer,#IDirectSoundBuffer.Unlock,lpvData,dwBytesLocked, NULL, 0);
                                                        }
//dwLastPlayPos = dwPlay;
}
