Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef __TSOUND_H__
Toshihiro Shimizu 890ddd
#define __TSOUND_H__
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tmacro.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef TNZAPI
Toshihiro Shimizu 890ddd
#ifdef TNZ_IS_AUDIOLIB
Toshihiro Shimizu 890ddd
#define TNZAPI TNZ_EXPORT_API
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define TNZAPI TNZ_IMPORT_API
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*----------------------------------------------------------------------- */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TSAPI
Toshihiro Shimizu 890ddd
#define TSAPI extern
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef int TS_RESULT;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
enum {
Toshihiro Shimizu 890ddd
	TS_NOERROR = 0,
Toshihiro Shimizu 890ddd
	TS_BADFILE,
Toshihiro Shimizu 890ddd
	TS_BADFORMAT,
Toshihiro Shimizu 890ddd
	TS_ENV,
Toshihiro Shimizu 890ddd
	TS_NOT_ALLOCATED,
Toshihiro Shimizu 890ddd
	TS_BADDEVICE,
Toshihiro Shimizu 890ddd
	TS_DEVICEBUSY,
Toshihiro Shimizu 890ddd
	TS_NODRIVER,
Toshihiro Shimizu 890ddd
	TS_PLAYERROR,
Toshihiro Shimizu 890ddd
	TS_RECERROR,
Toshihiro Shimizu 890ddd
	TS_NODATA,
Toshihiro Shimizu 890ddd
	TS_OK_PLAYSTOPPED,
Toshihiro Shimizu 890ddd
	TS_OK_RECSTOPPED
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef unsigned long DWORD;
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
	typedef unsigned char	BYTE;
Toshihiro Shimizu 890ddd
	typedef int		BOOL;
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
typedef unsigned char *PBYTE;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef const char *TS_STRING;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*----------------------------------------------------------------------------- */
Toshihiro Shimizu 890ddd
/* Sound data type */
Toshihiro Shimizu 890ddd
/* MEGACAMBIO!!!! AUDIOFRAME intero */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef int AUDIOFRAME; /* -inf , +inf */
Toshihiro Shimizu 890ddd
typedef float TIME;		/* -inf , +inf */
Toshihiro Shimizu 890ddd
typedef DWORD SAMPLE;   /* 0    , +inf */
Toshihiro Shimizu 890ddd
typedef DWORD TS_SIZE;
Toshihiro Shimizu 890ddd
typedef float HERTZ;	/* 0    , +inf */
Toshihiro Shimizu 890ddd
typedef float PRESSURE; /* -1.0 , +1.0 */
Toshihiro Shimizu 890ddd
typedef float AMPLIFICATION;
Toshihiro Shimizu 890ddd
typedef unsigned int VOLUME; /* 0    , 255  */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* conversione: tempo -> frame */
Toshihiro Shimizu 890ddd
#define TS_CINEMA_FRAMEDURATION ((double)1 / 24)
Toshihiro Shimizu 890ddd
#define TS_PAL_FRAMEDURATION ((double)1 / 25)
Toshihiro Shimizu 890ddd
#define TS_NTSC_FRAMEDURATION ((double)1 / 30)
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------- DIGITAL AUDIO --------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* channels number */
Toshihiro Shimizu 890ddd
typedef enum {
Toshihiro Shimizu 890ddd
	TS_MONO = 1,
Toshihiro Shimizu 890ddd
	TS_STEREO = 2
Toshihiro Shimizu 890ddd
} TS_DIGITAL_CHANNELS;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 audio quality (sampling rate)
Toshihiro Shimizu 890ddd
 mu: HERTZ
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Toshihiro Shimizu 890ddd
	TS_RATE_8000 = 8000,
Toshihiro Shimizu 890ddd
	TS_RATE_11025 = 11025,
Toshihiro Shimizu 890ddd
	TS_RATE_16000 = 16000,
Toshihiro Shimizu 890ddd
	TS_RATE_22050 = 22050,
Toshihiro Shimizu 890ddd
	TS_RATE_32000 = 32000,
Toshihiro Shimizu 890ddd
	TS_RATE_44100 = 44100,
Toshihiro Shimizu 890ddd
	TS_RATE_48000 = 48000
Toshihiro Shimizu 890ddd
} TS_DIGITAL_QUALITY;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define TS_VOICE_QUALITY TS_RATE_8000
Toshihiro Shimizu 890ddd
#define TS_PHONE_QUALITY TS_RATE_11025
Toshihiro Shimizu 890ddd
#define TS_RADIO_QUALITY TS_RATE_22050
Toshihiro Shimizu 890ddd
#define TS_CD_QUALITY TS_RATE_44100
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* 
Toshihiro Shimizu 890ddd
 sample dimension
Toshihiro Shimizu 890ddd
 mu: BIT
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Toshihiro Shimizu 890ddd
	TS_8BIT_SAMPLES = 8,
Toshihiro Shimizu 890ddd
	TS_16BIT_SAMPLES = 16,
Toshihiro Shimizu 890ddd
#ifndef WIN32
Toshihiro Shimizu 890ddd
	TS_24BIT_SAMPLES = 24
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
	TS_24BIT_SAMPLES = 24
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
} TS_DIGITAL_SAMPLES;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 bit masks for dwMask
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
enum {
Toshihiro Shimizu 890ddd
	TS_MASK_DEFAULT = 0, /* per usare param. di default */
Toshihiro Shimizu 890ddd
	TS_MASK_ORIGIN = (1 << 0),
Toshihiro Shimizu 890ddd
	TS_MASK_DURATION = (1 << 1),
Toshihiro Shimizu 890ddd
	TS_MASK_QUALITY = (1 << 2),
Toshihiro Shimizu 890ddd
	TS_MASK_CHANNEL = (1 << 3),
Toshihiro Shimizu 890ddd
	TS_MASK_SAMPLE = (1 << 4),
Toshihiro Shimizu 890ddd
	TS_MASK_FILENAME = (1 << 5),
Toshihiro Shimizu 890ddd
	TS_MASK_ALL = TS_MASK_ORIGIN | TS_MASK_DURATION | TS_MASK_QUALITY | TS_MASK_CHANNEL | TS_MASK_SAMPLE | TS_MASK_FILENAME,
Toshihiro Shimizu 890ddd
	TS_MASK_CREATE = TS_MASK_QUALITY | TS_MASK_CHANNEL | TS_MASK_SAMPLE
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
 internal time unit = SAMPLE
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
typedef struct _TS_STRACK_INFO {
Toshihiro Shimizu 890ddd
	TIME tmOrigin;
Toshihiro Shimizu 890ddd
	TIME tmDuration;
Toshihiro Shimizu 890ddd
	char *tmFilename;
Toshihiro Shimizu 890ddd
	/* DIGITAL audio dependent part - low level*/
Toshihiro Shimizu 890ddd
	TS_DIGITAL_CHANNELS dChannels;
Toshihiro Shimizu 890ddd
	TS_DIGITAL_QUALITY dSamplingRate;
Toshihiro Shimizu 890ddd
	TS_DIGITAL_SAMPLES dBitsPerSample;
Toshihiro Shimizu 890ddd
	/* --- */
Toshihiro Shimizu 890ddd
	DWORD dwMask;
Toshihiro Shimizu 890ddd
} * TS_STRACK_INFO;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef struct _TS_STRACK *TS_STRACK;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* 
Toshihiro Shimizu 890ddd
 I/O devices 
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Toshihiro Shimizu 890ddd
	TS_INPUT_LINE,
Toshihiro Shimizu 890ddd
	TS_INPUT_MIC,
Toshihiro Shimizu 890ddd
	TS_INPUT_DIGITAL,
Toshihiro Shimizu 890ddd
	TS_INPUT_DUMMY /* per aprire in output */
Toshihiro Shimizu 890ddd
} TS_DEVTYPE;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef enum {
Toshihiro Shimizu 890ddd
	TS_UNIQUE = 0,
Toshihiro Shimizu 890ddd
	TS_RIGHT,
Toshihiro Shimizu 890ddd
	TS_LEFT
Toshihiro Shimizu 890ddd
} TS_CHAN;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
typedef struct _TS_DEVICE_INFO {
Toshihiro Shimizu 890ddd
	TS_DEVTYPE 	input_source;
Toshihiro Shimizu 890ddd
	VOLUME 		input_volume;
Toshihiro Shimizu 890ddd
	VOLUME 		output_volume;
Toshihiro Shimizu 890ddd
}*TS_DEVICE_INFO;
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
typedef struct _TS_DEVICE *TS_DEVICE;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* ------------------------ FUNCTIONS ------------------------------*/
Toshihiro Shimizu 890ddd
/* N.B. Tutte le funzioni con from, to (src_from, src_to)
Toshihiro Shimizu 890ddd
 *	 prendono TUTTA la track se from==TS_BEGIN && to==TS_END
Toshihiro Shimizu 890ddd
 */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#define ALL -1 /* PROVVISORIO!!!!!*/
Toshihiro Shimizu 890ddd
#define TS_BEGIN MININT
Toshihiro Shimizu 890ddd
#define TS_END MAXINT
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*---------------------- Creation/Destruction ----------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* usa i campi di info dichiarati in dwFlagsi, per gli altri usa default */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRACK tsCreateStrack(TS_STRACK_INFO info);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsDestroyStrack(TS_STRACK strack);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*---------------------- Conversion Functions -----------------------------*/
Toshihiro Shimizu 890ddd
/* 
Toshihiro Shimizu 890ddd
	secs * tsFrameRate() => num.frames
Toshihiro Shimizu 890ddd
	N.B.:Nessun controllo sui parametri passati (conv.indiscriminata)
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsTimeToFrame(TIME time);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TIME tsFrameToTime(AUDIOFRAME frames);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TIME tsFracFrameToTime(float frac_frames);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI SAMPLE tsFrameToSample(AUDIOFRAME frames, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsSampleToFrame(SAMPLE samples, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsByteToFrame(TS_SIZE bytes, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_SIZE tsFrameToByte(AUDIOFRAME frames, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI SAMPLE tsTimeToSample(TIME time, TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TIME tsSampleToTime(SAMPLE samples, TS_STRACK strack);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsAreyousure_to_quit(void);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*--------------------------- File Functions ----------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* riempie tutti i campi della info */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsFileInfo(TS_STRING szFileName, TS_STRACK_INFO info);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRACK tsLoad(TS_STRING szFileName, AUDIOFRAME from,
Toshihiro Shimizu 890ddd
							  AUDIOFRAME to);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRACK tsLoadSubsampled(TS_STRING szFileName,
Toshihiro Shimizu 890ddd
										TS_STRACK_INFO desired_info, AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
/* if from==ALL && to==ALL the whole track is loaded */
Toshihiro Shimizu 890ddd
/*
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSave	( TS_STRACK strack, TS_STRING szFileName, 
Toshihiro Shimizu 890ddd
                           AUDIOFRAME from, AUDIOFRAME to );
Toshihiro Shimizu 890ddd
*/
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSave(TS_STRACK strack, TS_STRING szFileName);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------- Edit Functions --------------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsDelete(TS_STRACK strack, AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
/* cuts a piece of DATA */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsClear(TS_STRACK strack, AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
/* zeroes a piece of DATA */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsBlank(TS_STRACK strack, AUDIOFRAME point, AUDIOFRAME range);
Toshihiro Shimizu 890ddd
/* insert zeros into a track */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsCopy(TS_STRACK src_strack,
Toshihiro Shimizu 890ddd
							  AUDIOFRAME src_from, AUDIOFRAME src_to,
Toshihiro Shimizu 890ddd
							  TS_STRACK dest_strack, AUDIOFRAME dest_from);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsInsert(TS_STRACK src_strack,
Toshihiro Shimizu 890ddd
								AUDIOFRAME src_from, AUDIOFRAME src_to,
Toshihiro Shimizu 890ddd
								TS_STRACK dest_strack, AUDIOFRAME dest_from);
Toshihiro Shimizu 890ddd
/* Insertion of data in an empty track : dest_strack->buffer = NULL */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* ------------------------Manipolator Functions -------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsConvert(TS_STRACK src_strack, TS_STRACK_INFO dest_info);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsAmplify(TS_STRACK strack, AMPLIFICATION amp);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*----------------------- Miscellanea Functions ---------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI AUDIOFRAME tsGetFrames(TS_STRACK strack);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI PBYTE tsBuffer(TS_STRACK strack);
Toshihiro Shimizu 890ddd
/* riempie i campi di info richiesti in dwFlags */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsInfo(TS_STRACK strack, TS_STRACK_INFO info);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI PRESSURE tsGetPressure(TS_STRACK strack, TIME time, TS_CHAN chan);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI PRESSURE tsGetMaxPressure(TS_STRACK strack, TS_CHAN chan);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_STRING tsAudioFileExtension(void);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef WIN32
Toshihiro Shimizu 890ddd
TNZAPI TSAPI int tsSupportDigitalIn(void);
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* only for tsNewPlay etc. */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsNeedsRefill(void);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsRefill(void); /* call at least 4 times per sec while playing, */
Toshihiro Shimizu 890ddd
								   /* TRUE means needs to be called again */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------ Play/Rec Functions -----------------------------*/
Toshihiro Shimizu 890ddd
/* default asynch */
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsPlay(TS_STRACK strack, TS_DEVICE dev,
Toshihiro Shimizu 890ddd
							  AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsNewPlay(TS_STRACK strack, TS_DEVICE dev,
Toshihiro Shimizu 890ddd
								 AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsPlayLoop(TS_STRACK strack, TS_DEVICE dev,
Toshihiro Shimizu 890ddd
								  AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsIsPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsIsNewPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSyncPlay(TS_STRACK strack, TS_DEVICE dev,
Toshihiro Shimizu 890ddd
								  AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsStopPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsStopNewPlaying(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsRecord(TS_STRACK strack, TS_DEVICE dev,
Toshihiro Shimizu 890ddd
								AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsIsRecording(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsSyncRecord(TS_STRACK strack, TS_DEVICE dev,
Toshihiro Shimizu 890ddd
									AUDIOFRAME from, AUDIOFRAME to);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsStopRecording(TS_STRACK strack, TS_DEVICE dev);
Toshihiro Shimizu 890ddd
/* TSAPI void      tsSetEndPlayCb  (void(*end_play_cb)(void));*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------- Device Functions ------------------------------*/
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/* dinfo==NIL => usato vol. di default e microfono per input */
Toshihiro Shimizu 890ddd
/* mode = "w" per Play; "r" per Record */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_DEVICE tsInitDevice(TS_DEVTYPE type, TS_STRACK_INFO info, char *mode);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TS_RESULT tsCloseDevice(TS_DEVICE dev);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI TBOOL tsCheckOutput(void);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsSetVolume(TS_DEVICE dev, VOLUME vol);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI void tsSetInVolume(TS_DEVICE dev, VOLUME vol);
Toshihiro Shimizu 890ddd
TNZAPI TSAPI VOLUME tsGetVolume(TS_DEVICE dev);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*------------------------------------------------------------------------ */
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif