(******************************************************************************
 *                                                                            *
 *  Придумал и написал Кода Виктор, Март 2002                                 *
 *                                                                            *
 *  Файл:       wavread.pas                                                   *
 *  Содержание: Класс для работы с *.wav-файлами                              *
 *                                                                            *
 ******************************************************************************)
unit wavread;

interface

uses
  windows,
  mmsystem;

type
  TWaveSoundRead = class
  public
    m_pwfx:     PWAVEFORMATEX;   // Указатель на структуру WAVEFRMATEX
    m_hmmioIn:  HMMIO;           // Хэндл файла *.wav
    m_ckIn:     MMCKINFO;        // Раздел RIFF
    m_ckInRIFF: MMCKINFO;        // Используется при открытии *.wav-файла
  public
    constructor Create();
    destructor  Destroy();
    function Open( strFileName: string ): Boolean;
    function Reset(): Boolean;
    function Read( nSizeToRead: UINT; pbData: PByte; pnSizeRead: PUINT ): Boolean;
    function Close(): Boolean;
  end;

implementation

uses
  lowfunc;



  
//------------------------------------------------------------------------------
// Имя:      TWaveSoundRead.Create()
// Описание: Конструктор класса
//------------------------------------------------------------------------------
constructor TWaveSoundRead.Create();
begin
  inherited Create();
  m_pwfx := nil;
end;




//------------------------------------------------------------------------------
// Имя:      TWaveSoundRead.Destroy()
// Описание: Деструктор класса
//------------------------------------------------------------------------------
destructor TWaveSoundRead.Destroy();
begin
  inherited Destroy();
  Close();
  m_pwfx := nil;
end;




//------------------------------------------------------------------------------
// Имя:      TWaveSoundRead.Open()
// Описание: Открывает файл для чтения
//------------------------------------------------------------------------------
function TWaveSoundRead.Open( strFileName: string ): Boolean;
begin
  Result := FALSE;

  m_pwfx := nil;

  if FAILED( WaveOpenFile( PChar( strFileName ), @m_hmmioIn, @m_pwfx,
                           @m_ckInRIFF) ) then
     Exit;

  if not Reset() then
     Exit;

  Result := TRUE;
end;




//------------------------------------------------------------------------------
// Имя:      TWaveSoundRead.Reset()
// Описание: Устанавливает позицию для чтения на начало файла
//------------------------------------------------------------------------------
function TWaveSoundRead.Reset(): Boolean;
begin
  Result := not FAILED( WaveStartDataRead( @m_hmmioIn, @m_ckIn, @m_ckInRIFF ) );
end;




//------------------------------------------------------------------------------
// Имя:      TWaveSoundRead.Read()
// Описание: Читает данные из файла
//------------------------------------------------------------------------------
function TWaveSoundRead.Read( nSizeToRead: UINT; pbData: PByte;
                              pnSizeRead: PUINT ): Boolean;
begin
  Result := not FAILED( WaveReadFile( m_hmmioIn, nSizeToRead, pbData, @m_ckIn,
                                      pnSizeRead ) );
end;




//------------------------------------------------------------------------------
// Имя:      TWaveSoundRead.Close()
// Описание: Закрывает файл
//------------------------------------------------------------------------------
function TWaveSoundRead.Close(): Boolean;
begin
  mmioClose(m_hmmioIn, 0);
  Result := TRUE;
end;

end.
