/* SampleStorageActual.h */

#ifndef Included_SampleStorageActual_h
#define Included_SampleStorageActual_h

/* SampleStorageActual module depends on */
/* MiscInfo.h */
/* Audit */
/* Debug */
/* Definitions */
/* FixedPoint */
/* SampleConsts */
/* Memory */

#include "FixedPoint.h"
#include "SampleConsts.h"

struct SampleStorageActualRec;
typedef struct SampleStorageActualRec SampleStorageActualRec;

/* create a new sample storage object, with the array zeroed out */
SampleStorageActualRec*		NewSampleStorageActual(NumBitsType NumBits,
														NumChannelsType NumChannels, long NumSampleFrames);

/* dispose of a sample storage object */
void											DisposeSampleStorageActual(SampleStorageActualRec* Storage);

/* get the number of bits the sample storage object contains */
NumBitsType								GetSampleStorageActualNumBits(SampleStorageActualRec* Storage);

/* get the number of channels the storage object contains */
NumChannelsType						GetSampleStorageActualNumChannels(
														SampleStorageActualRec* Storage);

/* get the number of sample frames the object contains */
long											GetSampleStorageActualNumFrames(
														SampleStorageActualRec* Storage);

/* get the value of a sample frame */
largefixedsigned					GetSampleStorageActualValue(SampleStorageActualRec* Storage,
														long Index, ChannelType WhichChannel);

/* change the value of a sample frame */
void											SetSampleStorageActualValue(SampleStorageActualRec* Storage,
														long Index, ChannelType WhichChannel,
														largefixedsigned NewValue);

/* get a reference to the raw data.  The raw data will either be an array of chars */
/* (for 8-bit data) or an array of shorts (for 16-bit data).  There will be */
/* GetSampleStorageActualNumFrames + 1  frames; the extra one at the end is to */
/* make anti-aliasing more efficient, and repeats the second-last word of data */
char*											GetSampleStorageActualRawData(SampleStorageActualRec* Storage);

/* get a copy of a particular channel of data from the sample */
largefixedsigned*					SampleStorageActualGetChannelFixed(
														SampleStorageActualRec* Storage, ChannelType WhichChannel);

#endif
