{*      midasdll.pas
 *
 * MIDAS DLL programming interface Delphi interface unit
 *
 * $Id: midasdll.h,v 1.1 1996/09/25 18:38:12 pekangas Exp $
 *
 * Copyright 1996,1997 Housemarque Inc
 *
 * This file is part of the MIDAS Sound System, and may only be
 * used, modified and distributed under the terms of the MIDAS
 * Sound System license, LICENSE.TXT. By continuing to use,
 * modify or distribute this file you indicate that you have
 * read the license and understand and accept it fully.
*}

unit midasdll;


interface


uses wintypes;


const
    { enum MIDASoptions }
    MIDAS_OPTION_NONE = 0;
    MIDAS_OPTION_MIXRATE = 1;
    MIDAS_OPTION_OUTPUTMODE = 2;
    MIDAS_OPTION_MIXBUFLEN = 3;
    MIDAS_OPTION_MIXBUFBLOCKS = 4;

    { enum MIDASmodes }
    MIDAS_MODE_NONE = 0;
    MIDAS_MODE_MONO = 1;
    MIDAS_MODE_STEREO = 2;
    MIDAS_MODE_8BIT = 4;
    MIDAS_MODE_16BIT = 8;
    MIDAS_MODE_8BIT_MONO = MIDAS_MODE_8BIT or MIDAS_MODE_MONO;
    MIDAS_MODE_8BIT_STEREO = MIDAS_MODE_8BIT or MIDAS_MODE_STEREO;
    MIDAS_MODE_16BIT_MONO = MIDAS_MODE_16BIT or MIDAS_MODE_MONO;
    MIDAS_MODE_16BIT_STEREO = MIDAS_MODE_16BIT or MIDAS_MODE_STEREO;

    { enum MIDASsampleTypes }
    MIDAS_SAMPLE_NONE = 0;
    MIDAS_SAMPLE_8BIT_MONO = 1;
    MIDAS_SAMPLE_16BIT_MONO = 2;
    MIDAS_SAMPLE_8BIT_STEREO = 3;
    MIDAS_SAMPLE_16BIT_STEREO = 4;

    { enum MIDASloop }
    MIDAS_LOOP_NO = 0;
    MIDAS_LOOP_YES = 1;

    { enum MIDASpanning }
    MIDAS_PAN_LEFT = -64;
    MIDAS_PAN_MIDDLE = 0;
    MIDAS_PAN_RIGHT = 64;
    MIDAS_PAN_SURROUND = $80;

    { enum MIDASchannels }
    MIDAS_CHANNEL_AUTO = $FFFF;


type
    MIDASmoduleInfo = record
        songName : array[0..31] of char;
        songLength : integer;
        numPatterns : integer;
        numInstruments : integer;
        numChannels : integer;
    end;
    PMIDASmoduleInfo = ^MIDASmoduleInfo;

    MIDASinstrumentInfo = record
        instName : array[0..31] of char;
    end;
    PMIDASinstrumentInfo = ^MIDASinstrumentInfo;

    MIDASplayStatus = record
        position : dword;
        pattern : dword;
        row : dword;
        syncInfo : integer;
    end;
    PMIDASplayStatus = ^MIDASplayStatus;


    MIDASmodule = pointer;
    MIDASsample = DWORD;
    MIDASsamplePlayHandle = DWORD;
    MIDASstreamHandle = pointer;
    Pbyte = ^byte;



function MIDASgetLastError : integer; stdcall;
function MIDASgetErrorMessage(errorCode : integer) : PChar; stdcall;

function MIDASstartup : boolean; stdcall;
function MIDASinit : boolean; stdcall;
function MIDASsetOption(option, value : integer) : boolean; stdcall;
function MIDASclose : boolean; stdcall;
function MIDASopenChannels(numChannels : integer) : boolean; stdcall;
function MIDAScloseChannels : boolean; stdcall;
function MIDASstartBackgroundPlay(pollRate : dword) : boolean; stdcall;
function MIDASstopBackgroundPlay : boolean; stdcall;
function MIDASpoll : boolean; stdcall;
function MIDASgetVersionString : PChar; stdcall;

function MIDASloadModule(fileName : PChar) : MIDASmodule; stdcall;
function MIDASplayModule(module : MIDASmodule; numEffectChannels : integer) :
    boolean; stdcall;
function MIDASstopModule(module : MIDASmodule) : boolean ; stdcall;
function MIDASfreeModule(module : MIDASmodule) : boolean; stdcall;

function MIDASgetPlayStatus(status : PMIDASplayStatus) : boolean; stdcall;
function MIDASsetPosition(newPosition : integer) : boolean; stdcall;
function MIDASsetMusicVolume(volume : dword) : boolean; stdcall;
function MIDASgetModuleInfo(module : MIDASmodule; info : PMIDASmoduleInfo) :
    boolean; stdcall;
function MIDASgetInstrumentInfo(module : MIDASmodule; instNum : integer;
    info : PMIDASinstrumentInfo) : boolean; stdcall;

function MIDASloadRawSample(fileName : PChar; sampleType,
    loopSample : integer) : MIDASsample; stdcall;
function MIDASfreeSample(sample : MIDASsample) : boolean; stdcall;
function MIDASsetAutoEffectChannels(firstChannel, numChannels : dword) :
    boolean; stdcall;
function MIDASplaySample(sample : MIDASsample; channel : dword;
    priority : integer; rate, volume : dword; panning : integer) :
    MIDASsamplePlayHandle;
    stdcall;
function MIDASstopSample(sample : MIDASsamplePlayHandle) : boolean; stdcall;
function MIDASsetSampleRate(sample : MIDASsamplePlayHandle; rate : dword) :
    boolean; stdcall;
function MIDASsetSampleVolume(sample : MIDASsamplePlayHandle; volume : dword)
    : boolean; stdcall;
function MIDASsetSamplePanning(sample : MIDASsamplePlayHandle;
    panning : integer) : boolean; stdcall;
function MIDASsetSamplePriority(sample : MIDASsamplePlayHandle;
    priority : integer) : boolean; stdcall;

function MIDASplayStreamFile(channel : dword; fileName : PChar;
    sampleType : dword; sampleRate : dword; bufferLength : dword;
    loopStream : integer) : MIDASstreamHandle; stdcall;
function MIDASstopStream(stream : MIDASstreamHandle) : boolean; stdcall;

function MIDASplayStreamPolling(channel : dword; sampleType : dword;
    sampleRate : dword; bufferLength : dword) : MIDASstreamHandle; stdcall;
function MIDASfeedStreamData(stream : MIDASstreamHandle; data : Pbyte;
    numBytes : dword; feedAll : boolean) : dword; stdcall;

function MIDASsetStreamRate(stream : MIDASstreamHandle; rate : dword)
    : boolean; stdcall;
function MIDASsetStreamVolume(stream : MIDASstreamHandle; volume : dword)
    : boolean; stdcall;
function MIDASsetStreamPanning(stream : MIDASstreamHandle; panning : integer)
     : boolean; stdcall;


implementation



function MIDASgetLastError : integer;
    stdcall; external 'mds06rc1.dll' name '_MIDASgetLastError@0';
function MIDASgetErrorMessage(errorCode : integer) : PChar;
    stdcall; external 'mds06rc1.dll' name '_MIDASgetErrorMessage@4';

function MIDASstartup : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASstartup@0';
function MIDASinit : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASinit@0';
function MIDASsetOption(option, value : integer) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetOption@8';
function MIDASclose : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASclose@0';
function MIDASopenChannels(numChannels : integer) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASopenChannels@4';
function MIDAScloseChannels : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDAScloseChannels@4';
function MIDASstartBackgroundPlay(pollRate : dword) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASstartBackgroundPlay@4';
function MIDASstopBackgroundPlay : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASstopBackgroundPlay@0';
function MIDASpoll : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASpoll@0';
function MIDASgetVersionString : PChar;
    stdcall; external 'mds06rc1.dll' name '_MIDASgetVersionString@0';

function MIDASloadModule(fileName : PChar) : MIDASmodule;
    stdcall; external 'mds06rc1.dll' name '_MIDASloadModule@4';
function MIDASplayModule(module : MIDASmodule; numEffectChannels : integer) :
    boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASplayModule@8';
function MIDASstopModule(module : MIDASmodule) : boolean ;
    stdcall; external 'mds06rc1.dll' name '_MIDASstopModule@4';
function MIDASfreeModule(module : MIDASmodule) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASfreeModule@4';

function MIDASgetPlayStatus(status : PMIDASplayStatus) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASgetPlayStatus@4';
function MIDASsetPosition(newPosition : integer) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetPosition@4';
function MIDASsetMusicVolume(volume : dword) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetMusicVolume@4';
function MIDASgetModuleInfo(module : MIDASmodule; info : PMIDASmoduleInfo) :
    boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASgetModuleInfo@8';
function MIDASgetInstrumentInfo(module : MIDASmodule; instNum : integer;
    info : PMIDASinstrumentInfo) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASgetInstrumentInfo@12';

function MIDASloadRawSample(fileName : PChar; sampleType,
    loopSample : integer) : MIDASsample;
    stdcall; external 'mds06rc1.dll' name '_MIDASloadRawSample@12';
function MIDASfreeSample(sample : MIDASsample) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASfreeSample@4';
function MIDASsetAutoEffectChannels(firstChannel, numChannels : dword) :
    boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetAutoEffectChannels@8';
function MIDASplaySample(sample : midasSample; channel : dword;
    priority : integer; rate, volume : dword; panning : integer) :
    MIDASsamplePlayHandle;
    stdcall; external 'mds06rc1.dll' name '_MIDASplaySample@24';
function MIDASstopSample(sample : MIDASsamplePlayHandle) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASstopSample@4';
function MIDASsetSampleRate(sample : MIDASsamplePlayHandle; rate : dword) :
    boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetSampleRate@8';
function MIDASsetSampleVolume(sample : MIDASsamplePlayHandle; volume : dword)
    : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetSampleVolume@8';
function MIDASsetSamplePanning(sample : MIDASsamplePlayHandle;
    panning : integer) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetSamplePanning@8';
function MIDASsetSamplePriority(sample : MIDASsamplePlayHandle;
    priority : integer) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetSamplePlayHandle@8';

function MIDASplayStreamFile(channel : dword; fileName : PChar;
    sampleType : dword; sampleRate : dword; bufferLength : dword;
    loopStream : integer) : MIDASstreamHandle;
    stdcall; external 'mds06rc1.dll' name '_MIDASplayStreamFile@24';
function MIDASstopStream(stream : MIDASstreamHandle) : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASstopStream@4';

function MIDASplayStreamPolling(channel : dword; sampleType : dword;
    sampleRate : dword; bufferLength : dword) : MIDASstreamHandle;
    stdcall; external 'mds06rc1.dll' name '_MIDASplayStreamPolling@16';
function MIDASfeedStreamData(stream : MIDASstreamHandle; data : Pbyte;
    numBytes : dword; feedAll : boolean) : dword;
    stdcall; external 'mds06rc1.dll' name '_MIDASfeedStreamData@16';

function MIDASsetStreamRate(stream : MIDASstreamHandle; rate : dword)
    : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetStreamRate@4';
function MIDASsetStreamVolume(stream : MIDASstreamHandle; volume : dword)
    : boolean;
    stdcall; external 'mds06rc1.dll' name '_MIDASsetStreamVolume@4';
function MIDASsetStreamPanning(stream : MIDASstreamHandle; panning : integer)
     : boolean;
     stdcall; external 'mds06rc1.dll' name '_MIDASsetStreamPanning@4';

BEGIN
END.