/***************************************************************************
 *
 * snd.h
 *
 ***************************************************************************
 *
 * Definitions for intermediate level sound driver
 *
 ***************************************************************************/

#ifndef SND_H_INCLUDED
#define SND_H_INCLUDED

/*
 * includes
 */

#include "sfx.h"

/*
 * defines
 */

/*
 * typedefs
 */

/*
 * structures
 */

struct sndDriver
{
	int	(*Query)(int *numChannels,int *mode,int *freq,int *latency);
	int	(*Open)(int numChannels,int mode,int freq,int latency,int *spt,int *afreq);
	void	(*Close)(void);

	int		(*RegisterSample)(char *sampleName);
	int		(*RegisterSampleByID)(int id);
	int		(*RegisterSampleDirect)(unsigned short *data,int len,int lpStart,int lpEnd,int freq);
	void	(*UnRegisterSample)(int sampleHandle);
	void	(*QuerySample)(int sampleHandle,struct sampleParms *s);
	void	(*UpdateSample)(int sampleHandle,struct sampleParms *s);
	void	(*UpdateSampleData)(int sampleHandle,unsigned short *data,int len);

	void	(*SetChannelSample)(int channel,int sampleHandle);
	void	(*SetChannelFreq)(int channel,int freq);
	void	(*SetChannelVol)(int channel,int vol);
	void	(*SetChannelPan)(int channel,int pan);

	void	(*SetChannelOffset)(int channel,int offset);
	int		(*GetChannelOffset)(int channel);

	void	(*SetChannelStatus)(int channel,int status);
	int		(*GetChannelStatus)(int channel);

	int		(*GetSampleCount)(void);
	int		(*GetBufferCount)(void);

	void	(*SetBufferCallback)(void (*callback)(void));

	int		(*ReverbOpen)(int size);
	void	(*ReverbSetDepth)(int d);
	void	(*ReverbClose)(void);

	void	(*Kick)(void);
	void	(*Halt)(void);
	void	(*UnHalt)(void);
};

/*
 * function prototypes
 */



#endif

