This is the code that I am currently using. I just call SetChannelVol aftwards. Email me the code in question and I will take a look at it if you like.

[pascal]
function TGVAudio.PlaySample(Num, Chan: Integer; Vol: Single; Loop: Boolean): Integer;
var
I : Integer;
Flags: Cardinal;
begin
// check if init
if not FEnabled then
begin
Result := -1;
Exit;
end;

//FSampleBuffer[Id].Play(0, 0, 0)
if (Chan < 0) or (Chan > GV_MAX_CHANNELS-1) then
begin
I := FindFreeMixBuffer;
if I < 0 then
begin
Result := I;
Exit;
end;
end
else
begin
I := Chan;
StopChannel(I);
end;

// copy to mix buffer
FDS.DuplicateSoundBuffer(FSampleBuffer[Num], FMixBuffer[I]);

// play buffer
SetChannelVolume(I, Vol);

Flags := 0;
if Loop then
Flags := Flags or DSBPLAY_LOOPING;
FMixBuffer[I].Play(0, 0, Flags);

// return mix buffer id
Result := I;
end;

procedure TGVAudio.SetChannelVolume(Chan: Integer; Vol: Single);
begin
// check if init
if not FEnabled then
begin
Exit;
end;

if (Chan < 0) or (Chan > GV_MAX_CHANNELS-1) then Exit;
if Assigned(FMixBuffer[Chan]) then
begin
FMixBufferVol[Chan] := Vol;
FMixBuffer[Chan].SetVolume(CalcVolume(Vol, True));
end;
end;
[/pascal]