home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
packery
/
fp_adpcm
/
deliplayers
/
source
/
deliplayer.h
< prev
next >
Wrap
C/C++ Source or Header
|
1977-12-31
|
12KB
|
321 lines
/**
** $Filename: misc/DeliPlayer.h $
** $Release: 2.0 $
** $Revision: 2.15$
** $Date: 22/06/95$
**
** Definitions and Macros for creating DeliTracker Playermodules
**
** Stripped include file version for use with ADPCM-Player only.
** DeliTracker's NotePlayer interface is private and may change at any time!
**
** please contact Peter Kunath before trying to create your own players
** using the NotePlayer interface
**
** (C) Copyright 1991, 1992, 1993, 1994, 1995 Delirium Softdesign
** All Rights Reserved
**
**/
#ifndef DELITRACKER_PLAYER_H
#define DELITRACKER_PLAYER_H
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#ifndef EXEC_PORTS_H
#include <exec/ports.h>
#endif
#ifndef UTILITY_TAGITEM_H
#include <utility/tagitem.h>
#endif
#ifndef INTUITION_SCREENS_H
#include <intuition/screens.h>
#endif
/* --------------------------------------------------------------------------- */
#define DELIVERSION 17 /* Current Version of DeliTracker */
#define DELIREVISION 4 /* Current Revision of DeliTracker */
/* -------------- The declarations for the interface functions --------------- */
extern __asm APTR dt_GetListDataAddr(register __d0 ULONG num);
extern __asm ULONG dt_GetListDataSize(register __d0 ULONG num);
extern __asm BOOL dt_LoadFile(void);
extern __asm void dt_CopyDir(void);
extern __asm void dt_CopyFile(void);
extern __asm void dt_CopyString(register __a0 STRPTR string);
extern __asm BOOL dt_AudioAlloc(void);
extern __asm void dt_AudioFree(void);
extern __asm void dt_StartInt(void);
extern __asm void dt_StopInt(void);
extern __asm void dt_SongEnd(void);
extern __asm void dt_CutSuffix(void);
extern __asm void dt_SetTimer(void);
extern __asm void dt_WaitAudioDMA(void);
extern __asm struct Screen *dt_LockScreen(void);
extern __asm void dt_UnlockScreen(void);
extern __asm void dt_NotePlayer(void);
extern __asm APTR dt_AllocListData(register __d0 ULONG size, register __d1 ULONG memflags);
extern __asm void dt_FreeListData(register __a1 APTR memblock);
/* ------------------------ Player Function Offsets -------------------------- */
struct DeliTrackerPlayer {
ULONG RTS_code;
UBYTE ID[8];
struct TagItem *TagArray;
};
/* The TagItem ID's (ti_Tag values) for the player interface follow. */
#define DTP_Dummy (TAG_USER + 0x4454)
#define DTP_InternalPlayer (DTP_Dummy) /* obsolete */
#define DTP_CustomPlayer (DTP_Dummy + 1) /* player is a customplayer */
#define DTP_RequestDTVersion (DTP_Dummy + 2) /* minimum DeliTracker version needed */
#define DTP_RequestKickVersion (DTP_Dummy + 3) /* minimum KickStart version needed */
#define DTP_PlayerVersion (DTP_Dummy + 4) /* actual player version & revision */
#define DTP_PlayerName (DTP_Dummy + 5) /* name of this player */
#define DTP_Creator (DTP_Dummy + 6) /* misc string */
#define DTP_Check1 (DTP_Dummy + 7) /* Check Format before loading */
#define DTP_Check2 (DTP_Dummy + 8) /* Check Format after file is loaded */
#define DTP_ExtLoad (DTP_Dummy + 9) /* Load additional files */
#define DTP_Interrupt (DTP_Dummy + 10) /* Interrupt routine */
#define DTP_Stop (DTP_Dummy + 11) /* Clear Patterncounter */
#define DTP_Config (DTP_Dummy + 12) /* Config Player */
#define DTP_UserConfig (DTP_Dummy + 13) /* User-Configroutine */
#define DTP_SubSongRange (DTP_Dummy + 14) /* Get min&max subsong number */
#define DTP_InitPlayer (DTP_Dummy + 15) /* Initialisize the Player */
#define DTP_EndPlayer (DTP_Dummy + 16) /* Player clean up */
#define DTP_InitSound (DTP_Dummy + 17) /* Soundinitialisation routine */
#define DTP_EndSound (DTP_Dummy + 18) /* End sound */
#define DTP_StartInt (DTP_Dummy + 19) /* Start interrupt */
#define DTP_StopInt (DTP_Dummy + 20) /* Stop interrupt */
#define DTP_Volume (DTP_Dummy + 21) /* Set Volume */
#define DTP_Balance (DTP_Dummy + 22) /* Set Balance */
#define DTP_Faster (DTP_Dummy + 23) /* Incease playspeed */
#define DTP_Slower (DTP_Dummy + 24) /* Decrease playspeed */
#define DTP_NextPatt (DTP_Dummy + 25) /* Jump to next pattern */
#define DTP_PrevPatt (DTP_Dummy + 26) /* Jump to previous pattern */
#define DTP_NextSong (DTP_Dummy + 27) /* Play next subsong */
#define DTP_PrevSong (DTP_Dummy + 28) /* Play previous subsong */
/*--- functions in revision 14 or higher (distributed as Release 1.35) --- */
#define DTP_SubSongTest (DTP_Dummy + 29) /* Test, if given subsong is vaild */
/*--- functions in revision 16 or higher (distributed as Release 2.01) --- */
#define DTP_NewSubSongRange (DTP_Dummy + 30) /* enhanced replacement for DTP_SubSongRange */
#define DTP_DeliBase (DTP_Dummy + 31) /* the address of a pointer where DT */
/* stores a pointer to the DeliGlobals */
#define DTP_Flags (DTP_Dummy + 32) /* misc Flags (see below) */
#define DTP_CheckLen (DTP_Dummy + 33) /* Length of the Check Code */
#define DTP_Description (DTP_Dummy + 34) /* misc string */
#define DTP_Decrunch (DTP_Dummy + 35) /* pointer to Decrunch Code */
#define DTP_Convert (DTP_Dummy + 36) /* pointer to Converter Code */
#define DTP_NotePlayer (DTP_Dummy + 37) /* pointer to a NotePlayer Structure */
#define DTP_NoteStruct (DTP_Dummy + 38) /* the address of a pointer to the */
/* NoteStruct Structure */
#define DTP_NoteInfo (DTP_Dummy + 39) /* a pointer where DT stores a pointer */
/* to the current NoteStruct Structure */
#define DTP_NoteSignal (DTP_Dummy + 40) /* pointer to NoteSignal code */
#define DTP_Process (DTP_Dummy + 41) /* pointer to process entry code */
#define DTP_Priority (DTP_Dummy + 42) /* priority of the process */
#define DTP_StackSize (DTP_Dummy + 43) /* stack size of the process */
#define DTP_MsgPort (DTP_Dummy + 44) /* a pointer where DT stores a pointer */
/* to a port to send its messages */
#define DTP_Appear (DTP_Dummy + 45) /* open your window, if you can */
#define DTP_Disappear (DTP_Dummy + 46) /* go dormant */
#define DTP_ModuleName (DTP_Dummy + 47) /* get the name of the current module */
#define DTP_FormatName (DTP_Dummy + 48) /* get the name of the module format */
#define DTP_AuthorName (DTP_Dummy + 49) /* not implemented yet */
/*--- functions in revision 17 or higher (distributed as Release 2.07) --- */
#define DTP_InitNote (DTP_Dummy + 50) /* NoteStruct initialization */
#define DTP_NoteAllocMem (DTP_Dummy + 51) /* allocates memory for module */
#define DTP_NoteFreeMem (DTP_Dummy + 52) /* frees module-memory */
#define DTP_PlayerInfo (DTP_Dummy + 53) /* a pointer where DT stores a pointer */
/* to the current Player Taglist */
#define DTP_Patterns (DTP_Dummy + 54) /* FPTR to a pattern-count routine */
#define DTP_Duration (DTP_Dummy + 55) /* FPTR to a duration calc routine */
#define DTP_SampleData (DTP_Dummy + 56) /* FPTR to a sample-info routine */
#define DTP_MiscText (DTP_Dummy + 57) /* FPTR to a misc-text routine */
/* end of player interface enumeration */
/* --- various flags --------------------------------------------------------- */
#define PLYB_CUSTOM 0 /* player is a customplayer */
#define PLYF_CUSTOM (1<<0)
#define PLYB_SONGEND 1 /* player supports songend */
#define PLYF_SONGEND (1<<1)
/*--- flags defined in revision 17 or higher (distributed as Release 2.07) --- */
#define PLYB_ANYMEM 2 /* modules of this player don't require chipmem */
#define PLYF_ANYMEM (1<<2)
/* --- DeliTracker message --------------------------------------------------- */
struct DeliMessage {
struct Message Message;
ULONG (*Function)(void);
ULONG Result;
ULONG DTMN_ArgumentD0;
ULONG DTMN_ArgumentA0;
};
/* --- DeliTracker NotePlayer ------------------------------------------------ */
struct NotePlayer {
UWORD npl_LeftChannels; /* max. number of left channels this noteplayer supports */
UWORD npl_RightChannels; /* max. number of right channels this noteplayer supports */
ULONG npl_Flags; /* misc flags (see below) */
ULONG npl_MaxFrequency; /* max. frequency this noteplayer supports (-1 if unlimited) */
ULONG npl_Memory; /* memory type for samples (e.g. MEMF_CHIP) */
UBYTE npl_Reserved[16]; /* reserved for future use (must be 0 for now) */
};
struct NoteStruct {
APTR nst_Channels; /* pointer to a list of notechannels */
ULONG nst_Flags; /* misc flags (see below) */
ULONG nst_MaxFrequency; /* max. frequency of this player (28,867 Hz in DMA mode) */
UWORD nst_MaxVolume; /* max. volume of this player (in most cases 64) */
UBYTE nst_Reserved[18]; /* reserved for future use (must be 0 for now) */
};
#define NSTB_Dummy 0 /* only a dummy-NoteStruct (no NotePlayer needed) */
#define NSTF_Dummy (1<<0)
#define NSTB_Period 1 /* Amiga period supplied instead of frequency */
#define NSTF_Period (1<<1)
#define NSTB_Signed 9 /* sample data is signed linear (2's complement) */
#define NSTF_Signed (1<<9)
#define NSTB_8Bit 17 /* -"- bytes */
#define NSTF_8Bit (1<<17)
struct NoteChannel {
APTR nch_NextChannel; /* next channel in the list (NULL if last) */
ULONG nch_NotePlayer; /* for use by the noteplayer (the deliplayer must ignore this) */
WORD nch_Reserved0; /* reserved for future use (must be 0 for now) */
UBYTE nch_Private; /* just what it says */
UBYTE nch_Changed; /* what has changed since last call */
WORD nch_StereoPos; /* set this field when the InitNote function is called */
WORD nch_Stereo; /* describes "where" this channel is supposed to play */
APTR nch_SampleStart; /* ^sampledata */
ULONG nch_SampleLength; /* size of sample */
APTR nch_RepeatStart; /* ^repeat part of sample */
ULONG nch_RepeatLength; /* size of repeat part */
ULONG nch_Frequency; /* frequency (or period) of sample */
UWORD nch_Volume; /* volume of sample */
UBYTE nch_Reserved1[26]; /* reserved for future use (must be 0 for now) */
};
#define NCHB_Sample 1 /* one-shot part of sample has changed */
#define NCHF_Sample (1<<1)
#define NCHB_Repeat 2 /* repeat part of sample has changed */
#define NCHF_Repeat (1<<2)
#define NCHB_Frequency 3 /* frequency has changed */
#define NCHF_Frequency (1<<3)
#define NCHB_Volume 4 /* volume (or pan position ???) has changed */
#define NCHF_Volume (1<<4)
#define NCHD_FarLeft -32767 /* play only on left speaker */
#define NCHD_FarRight +32767 /* play only on right speaker */
/* ---------------------------- Global Variables ------------------------------ */
struct DeliTrackerGlobals {
/* ------ if you use dtg_AslBase, make sure that */
/* ------ DTP_RequestDTVersion is at least 13 ! */
struct Library *AslBase; /* library base, don't CloseLibrary()!! */
struct Library *DOSBase; /* library base -"- */
struct IntuitionBase *IntuitionBase; /* library base -"- */
struct GfxBase *GfxBase; /* library base -"- */
struct Library *GadToolsBase; /* librarybase -"- (NULL for Kick 1.3 and below) */
APTR ReservedLibraryBase; /* reserved for future use */
STRPTR DirArrayPtr; /* Ptr to the directory of the current module */
STRPTR FileArrayPtr; /* Ptr to the filename of the current module */
STRPTR PathArrayPtr; /* Ptr to PathArray (e.g used in LoadFile()) */
APTR ChkData; /* pointer to the module to be checked */
ULONG ChkSize; /* size of the module */
UWORD SndNum; /* current sound number */
UWORD SndVol; /* volume (ranging from 0 to 64) */
UWORD SndLBal; /* left volume (ranging from 0 to 64) */
UWORD SndRBal; /* right volume (ranging from 0 to 64) */
UWORD LED; /* filter (0 if the LED is off) */
UWORD Timer; /* timer-value for the CIA-Timers */
APTR dtg_GetListData;
APTR dtg_LoadFile;
APTR dtg_CopyDir;
APTR dtg_CopyFile;
APTR dtg_CopyString;
APTR dtg_AudioAlloc;
APTR dtg_AudioFree;
APTR dtg_StartInt;
APTR dtg_StopInt;
APTR dtg_SongEnd; /* safe to call from interrupt code ! */
APTR dtg_CutSuffix;
/* ------ extension in revision 14 */
APTR dtg_SetTimer; /* safe to call from interrupt code ! */
/* ------ extension in revision 15 */
APTR dtg_WaitAudioDMA; /* safe to call from interrupt code ! */
/* ------ extension in revision 16 */
APTR dtg_LockScreen;
APTR dtg_UnlockScreen;
APTR dtg_NotePlayer; /* safe to call from interrupt code ! */
APTR dtg_AllocListData;
APTR dtg_FreeListData;
APTR dtg_Reserved1; /* do not use !!! */
APTR dtg_Reserved2; /* do not use !!! */
APTR dtg_Reserved3; /* do not use !!! */
};
#endif