If you're working with the wav format then try to work with the wav API. (MMIO just easier, faster and better ).
[pascal]
function LoadWaveFromFile(FFile:string):Boolean;
var HIO :HMMIO;
parent,
child1,
child2 :MMCKINFO;
wavefmt:TWAVEFORMATEX;
bufdesc:TDSBUFFERDESC;
length1,
length2:Cardinal;
write1,
write2 ointer;
dummy :IDirectSoundBuffer;
begin
result:=false;
HIO:=mmioopen(@FFile[1],nil,MMIO_READ or MMIO_ALLOCBUF);
if HIO>0 then
begin
parent.fccType:=mmioStringToFourCC('wave',MMIO_TOU PPER);
child1.ckid:=mmioStringToFourCC('fmt ',0);
child2.ckid:=mmioStringToFourCC('data',0);
if mmioDescend(HIO,@parent,nil,MMIO_FINDRIFF)=0 then
if mmioDescend(HIO,@child1,@parent,MMIO_FINDCHUNK)=0 then
if mmioread(HIO,@wavefmt,child1.cksize)=child1.cksize then
if mmioDescend(HIO,@child2,@parent,MMIO_FINDCHUNK)=0 then
begin
FillChar(bufdesc,sizeof(TDSBUFFERDESC),0);
bufdesc.dwSize:=sizeof(TDSBUFFERDESC);
bufdesc.dwFlags:=DSBCAPS_CTRLDEFAULT;
bufdesc.dwBufferBytes:=child2.cksize;
bufdesc.lpwfxFormat:=@wavefmt;
if dsound.CreateSoundBuffer(bufdesc,dummy,nil)=DS_OK then
begin
DSBuffer:=dummy as IDirectSoundBuffer8;
dummy:=nil;
if DSBuffer.Lock(0,child2.cksize,write1,length1,write 2,length2,DSBLOCK_FROMWRITECURSOR)=DS_OK then
begin
if (write1<>nil) then
mmioRead(HIO,PChar(write1),length1);
DSBuffer.Unlock(write1,length1,write2,length2);
end;
end;
end;
MMIOClose(HIO,MMIO_FHOPEN);
result:=true;
end;

[/pascal]


Tutorial, source & exe on my site