/*	SAMPLER.H 
*	 
*	(c) 12-20-85	Todor Fay 
*/ 

struct EnvelopeInfo {
    struct EnvelopeInfo *next;
    unsigned char index;
    struct IOAudio *startmsg, *loopmsg, *flushmsg;
    unsigned char port;
    unsigned char stage;
    unsigned char value;
    unsigned char channel;
    long rate1, rate2, rate3, rate4;
    long level1, leve2, level3;
    unsigned short volume;
    unsigned short period;
    unsigned char amplitude;
    char posslope;
    long pad[8];
};
 
struct SoundData { 
    char *data; 
    UWORD loopstart; 
    UWORD loopend; 
    UWORD length; 
    UWORD start; 
}; 
 
struct ChannelData { 
    int rate1, rate2, rate3, rate4; 
    int level1, level2, level3; 
    long pad[8];				/* Future expansion! */ 
    unsigned short sensitivity; 
    unsigned short start; 
    unsigned short loopstart; 
    unsigned short loopend; 
    unsigned short pbendamount;			/* Current pitchbend index. */ 
    unsigned short pbendrange;			/* Current pitchbend range. */ 
    short tune;					/* Tuning factor. */ 
    struct SoundData sounddata[10]; 
    unsigned short pbend[129];			/* Tuned, scaled pitchbend. */ 
    char name[20]; 
    char transpose; 
    char status; 
    char type; 
}; 
 
#define CD_TMASK 	0x0F 
#define CD_DOLOOPS 	0x10 
#define CD_DOUBLE	0x20 
#define CD_SAVED	0x40 
#define CD_MARK		0x80 
#define CD_EMPTY	0x00 
 
struct SamplerState { 
    long length; 
    char namesfile[40]; 
    struct ChannelData *channeldata[16];
    struct Envelopeinfo *envelopeinfo;
    struct MsgPort *soundport;
    long addchannel;
}; 

