Write your own file callback functions to support streams in Delphi. This should not be too difficult, but if you have any major problems, let me know and I’ll be able to make a small sample application for you.

Here is a tested and working implementation of file callbacks in Delphi to use streams.
<pre>function OpenCallback(Name: PChar): Cardinal; cdecl;
var
Stream: TFileStream;
begin
// Open a filestream to the given filename
Stream := TFileStream.Create(String(Name), fmOpenRead or fmShareDenyNone);
// Return the pointer to the filestream as the file handle
Result := Cardinal(Stream);
end;

procedure CloseCallback(Handle: Cardinal); cdecl;
begin
// The handle is the pointer to the filestream
TFileStream(Handle).Free;
end;

function TellCallback(Handle: Cardinal): Cardinal; cdecl;
begin
// Return the current position in the stream
Result := TFileStream(Handle).Position;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
FSOUND_File_SetCallbacks(OpenCallback, CloseCallback, Readcallback, SeekCallback, TellCallback);
FSOUND_Init(22050, 128, 0);
end;</pre>In the process of testing this, I found a small bug in my translation of the FMOD headers. The Seek callback has a Byte parameter that is incorrectly specified as ByteBool. This is on line 56 of fmod.pas.