Ok, as promised I am putting together a SDK for Delphi. I am almost done. so probably by tomorrow night I can post it. Anyone interested I can email a copy to you if you would like, but I will be posting it shortly.

:!: I should add however that I have added some features that have been found in a newer version of the MPP SDK that were not translated before. This includes PreAmp support.

Here is a list of commands it will support:
[pascal] // Reference count: the initial reference count is 1, so you shouldn't have to call AddRef()
function AddRef: Cardinal; virtual; stdcall; abstract;
function Release: Cardinal; virtual; stdcall; abstract;
// API Version: you should refuse to continue if the returned value is smaller than MPPAPI_VERSION
function GetVersion: Cardinal; virtual; stdcall; abstract;
// Basic I/O Functions
function LoadSong(const MemFile: Pointer; Length: Integer): MppError; virtual; stdcall; abstract;
// Songs are always loaded from memory. The pointer pmemfile can be destroyed
// after the call to LoadSong. You can use memory-mapped files or a pointer returned
// by LockResource(), or whatever file in memory.

// Free the memory used by the song
function FreeSong: MppError; virtual; stdcall; abstract;
// Audio Rendering Functions: example: (44100, 2, 16) for 44.1kHz, stereo, 16-bit
function SetWaveFormat(SamplesPerSecond, Channels, BitsPerSample: Integer): MppError; virtual; stdcall; abstract;
// return # of SAMPLES that have been written to the buffer, 0 if end has been reached
// Note: protect calls to Render() and SetMixerOptions() by a critical section, if they
// are used in different threads.
function Render(Buffer: Pointer; BufferSize: Cardinal): MppError;virtual; stdcall; abstract;
// Player Configuration: set of MPPMIX_XXXX
function SetMixerOptions(dwOptions: Cardinal): MppError; virtual; stdcall; abstract;
function GetMixerOptions: Cardinal; virtual; stdcall; abstract;
// Song Information
function GetSongType: Cardinal; virtual; stdcall; abstract; // Return MPPSONG_XXXX
// Buffer must be at least 32-bytes
procedure GetSongName(Buffer: PChar); virtual; stdcall; abstract;
//////////////////////////////////////////////////////////////////////////////////////
// v1.39+: Navigation functions
//
// The order is the position in the pattern sequence list: this allows you to
// jump to a specific part of a song. It can be useful in a game with a song that
// uses pattern position jump effects (or pattern loops).
// These function will not be available if GetVersion() returns a value smaller than 0x139 (MPPVERSION_HAS_NAVIGATION)
function GetNumOrders: Cardinal; virtual; stdcall; abstract;
function GetCurrentOrder: Cardinal; virtual; stdcall; abstract;
function SetCurrentOrder(NewOrder: Cardinal): MppError; virtual; stdcall; abstract;
//////////////////////////////////////////////////////////////////////////////////////
// v1.41+: Returns the song length in seconds
function GetSongLength: Cardinal; virtual; stdcall; abstract;

//////////////////////////////////////////////////////////////////////////////////////
// v1.46+: Set Pre-Amp level, in percent (25% - 400%)
procedure SetPreAmpLevel(PreAmp: Cardinal); virtual; stdcall; abstract;

//////////////////////////////////////////////////////////////////////////////////////
// v1.47+: Set repeat count (-1 = Infinite)
procedure SetRepeatCount(RepeatCount: Integer); virtual; stdcall; abstract;[/pascal]