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