421 lines
10 KiB
C
421 lines
10 KiB
C
/*
|
||
//////////////////////////////////////////////////////////////
|
||
// SNDXD.C //
|
||
//////////////////////////////////////////////////////////////
|
||
// Module d'exploitation des samples PCM en 3D //
|
||
//------------ version 2D (Dx2D, WinMM,..)-------------------------------
|
||
//////////////////////////////////////////////////////////////
|
||
*/
|
||
#include "SNDinc.h"
|
||
|
||
#ifndef NO_ACP_SOUND
|
||
|
||
#include "sndthrd.h"
|
||
|
||
#if defined(_DLL_COMPILATION_MODE)
|
||
#include "snddll.h"
|
||
#endif
|
||
|
||
#include "sndres.h"
|
||
#include "sndxd.h"
|
||
#include "sndwave.h"
|
||
|
||
/*---- sample 3D*/
|
||
long SND_CALL SND_fn_lPlaySxdWave(tduRefRes res,SoundParam *par,long prio,SND_td_pfn_vSoundCallback fn_callback,long par_callback)
|
||
{
|
||
SampleParam par2D;
|
||
|
||
SND_fn_vParam3Dto2D(par,&par2D);
|
||
|
||
return SND_fn_lPlaySample(res,&par2D,prio,fn_callback,par_callback);
|
||
}
|
||
|
||
void SND_CALL SND_fn_vRemoveCallbackSxdWave(long voice)
|
||
{
|
||
}
|
||
|
||
SndBool SND_CALL SND_fn_bSetParamSxdWave(long voice,SoundParam *par)
|
||
{
|
||
SampleParam par2D;
|
||
|
||
SND_fn_vParam3Dto2D(par,&par2D);
|
||
|
||
return SND_fn_bSetParamSample(voice,&par2D);
|
||
}
|
||
|
||
SndBool SND_CALL SND_fn_bTestIsPlayingSxdWave(long voice)
|
||
{
|
||
return SND_fn_bTestIsPlayingSample(voice);
|
||
}
|
||
|
||
void SND_CALL SND_fn_vStopSxdWave(long voice)
|
||
{
|
||
SND_fn_vStopSample(voice);
|
||
}
|
||
|
||
void SND_CALL SND_fn_vPauseSxdWave(long voice)
|
||
{
|
||
SND_fn_vPauseSample(voice);
|
||
}
|
||
|
||
void SND_CALL SND_fn_vResumeSxdWave(long voice)
|
||
{
|
||
SND_fn_vResumeSample(voice);
|
||
}
|
||
|
||
/*----- init generales*/
|
||
int SND_fn_iInitSxdWave(SND_tdstInitStruct *pInitStruct)
|
||
{
|
||
return SND_fn_iInitSample(pInitStruct);
|
||
}
|
||
|
||
SndBool SND_fn_bTestInitSxdWave(void)
|
||
{
|
||
return SND_fn_bTestInitSample();
|
||
}
|
||
|
||
void SND_fn_vDesInitSxdWave(void)
|
||
{
|
||
SND_fn_vDesInitSample();
|
||
}
|
||
|
||
/*------------------------------------------------------------*/
|
||
/* SetDopplerFactorSxdWave:change Doppler effect range*/
|
||
/* Entree:new factor for Doppler effect (1.0=normal effect=physicallly realistic*/
|
||
/* 0.0=no doppler effect*/
|
||
/* Sortie:neant*/
|
||
/*------------------------------------------------------------*/
|
||
void SND_fn_vSetDopplerFactorSxdWave(SndReal factor)
|
||
{
|
||
}
|
||
|
||
|
||
void SND_fn_vCreateMicroSxdWave(MicroParam* par,long idMicro)
|
||
{
|
||
/*rien <20> faire en 2D (tout est fait par le SXD)*/
|
||
}
|
||
|
||
void SND_fn_vSetMicroParamSxdWave(long sxdId,MicroParam* par)
|
||
{
|
||
/*rien <20> faire en 2D (tout est fait par le SXD)*/
|
||
}
|
||
|
||
void SND_fn_vDestroyMicroSxdWave(long sxdId)
|
||
{
|
||
/*rien <20> faire en 2D (tout est fait par le SXD)*/
|
||
}
|
||
|
||
|
||
/*--------------------------------------------------*/
|
||
/* SND_fnvConvertRsvDiskToMemSxd*/
|
||
/* Entree:disk=bloxkResDisk <20> convertir*/
|
||
/* mem=blockMemDisk <20> generer*/
|
||
/* ptrBegin=adresse de stockage des donnees*/
|
||
/* Retour:neant*/
|
||
/*------------------------------------------------*/
|
||
/*
|
||
void SND_fn_vConvertResDiskToMemSxdWave(tdstBlockResourceDisk *disk
|
||
,tdstBlockResourceMem *mem
|
||
,void* ptrBegin)
|
||
{
|
||
SND_fn_vConvertResDiskToMemSample(disk,mem,ptrBegin);
|
||
}
|
||
*/
|
||
|
||
/*--------------------------------------------------*/
|
||
/* SND_fnvLoadRsvDisk*/
|
||
/* Entree:disk=bloxkResDisk <20> convertir*/
|
||
/* mem=blockMemDisk <20> generer*/
|
||
/* Retour:neant*/
|
||
/*------------------------------------------------*/
|
||
/*
|
||
void SND_fn_vLoadResFromDiskSxdWave(tdstBlockResourceDisk* disk,tdstBlockResourceMem* mem)
|
||
{
|
||
SND_fn_vLoadResFromDiskSample(disk,mem);
|
||
}
|
||
*/
|
||
|
||
#if !defined(NO_ACP_SCRIPT) || defined(_DLL_COMPILATION_MODE)
|
||
/*this function must be defined in Script/Hybrid or DLL mode*/
|
||
SndBool SND_fn_bLoadResScriptSxdWave(tdstBlockResourceDisk* disk,tdstBlockResourceMem* mem)
|
||
{
|
||
return(SND_fn_bLoadResScriptSample(disk,mem));
|
||
}
|
||
#endif
|
||
|
||
SndBool SND_fn_bLoadResBinarySxdWave(tdstBlockResourceDisk* disk,tdstBlockResourceMem* mem,char *pDataBloc)
|
||
{
|
||
return(SND_fn_bLoadResBinarySample(disk,mem,pDataBloc));
|
||
}
|
||
|
||
void SND_fn_vConvertResDiskToMemSxdWave(tdstBlockResourceDisk *disk,tdstBlockResourceMem *mem,void* ptrBegin)
|
||
{
|
||
SND_fn_vConvertResDiskToMemSample(disk,mem,ptrBegin);
|
||
}
|
||
|
||
|
||
/*--------------------------------------------------*/
|
||
/* SND_fnvUnLoadRsvDisk*/
|
||
/* Entree:mem=blockMemDisk <20> liberer*/
|
||
/* Retour:neant*/
|
||
/*------------------------------------------------*/
|
||
void SND_fn_vUnLoadResSxdWave(tdstBlockResourceMem* mem)
|
||
{
|
||
SND_fn_vUnLoadResSample(mem);
|
||
}
|
||
|
||
/*---------------------------------------------------------*/
|
||
/* IsResLoadedSample: teste si une ressource est operationnelle*/
|
||
/* Entree:blockmem valide*/
|
||
/* Sortie:TRUE si SndPlay acceptable*/
|
||
/*---------------------------------------------------------*/
|
||
SndBool SND_fn_bIsResLoadedSxdWave(tdstBlockResourceMem *mem)
|
||
{
|
||
return SND_fn_bIsResLoadedSample(mem);
|
||
}
|
||
|
||
/*
|
||
void SND_fn_vSetResUnloadedSxdWave(tdstBlockResourceMem *pResMem)
|
||
{
|
||
SND_fn_vSetResUnloadedSample(pResMem);
|
||
}
|
||
*/
|
||
#ifndef DISABLE_BUFFER_CLIENT
|
||
/*/------------------------------- buffer clients*/
|
||
/*----------------------------------------------------------------------*/
|
||
/* Gestion des buffers clients*/
|
||
/*----------------------------------------------------------------------*/
|
||
long SND_fn_lCreateNewBufferSxdWave(unsigned long nb_samples,unsigned short uwResolution,unsigned short uwNbChannels,unsigned long ulFreq,SoundParam* par,td_pfn_vRefreshBufferClient callback,long user_id)
|
||
{
|
||
SampleParam par2D,*ptr_par2D;
|
||
|
||
if (par!=NULL)
|
||
{
|
||
SND_fn_vParam3Dto2D(par,&par2D);
|
||
ptr_par2D=&par2D;
|
||
}
|
||
else
|
||
ptr_par2D=&C_SAMPLEPARAM_NEUTRE;
|
||
|
||
return SND_fn_lCreateNewBufferSample(nb_samples,uwResolution,uwNbChannels,ulFreq,ptr_par2D,callback,user_id);
|
||
}
|
||
|
||
void SND_fn_vSetParamBufferSxdWave(long id_buffer,SoundParam *par)
|
||
{
|
||
SampleParam par2D,*ptr_par2D;
|
||
|
||
if (par!=NULL)
|
||
{
|
||
SND_fn_vParam3Dto2D(par,&par2D);
|
||
ptr_par2D=&par2D;
|
||
}
|
||
else
|
||
ptr_par2D=NULL;
|
||
|
||
SND_fn_vSetParamBufferSample(id_buffer,ptr_par2D);
|
||
}
|
||
|
||
void SND_fn_vDeleteBufferSxdWave(long id_buffer)
|
||
{
|
||
/*very important: DeleteBuffer may be called from any streaming client Callback ->critical section is needed*/
|
||
SND_fn_vEnterCriticalSectionThreadSnd();
|
||
|
||
SND_fn_vDeleteBufferSample(id_buffer);
|
||
|
||
SND_fn_vQuitCriticalSectionThreadSnd();
|
||
}
|
||
|
||
void SND_fn_vPauseBufferSxdWave(long id_buffer)
|
||
{
|
||
SND_fn_vPauseBufferSample(id_buffer);
|
||
}
|
||
|
||
void SND_fn_vResumeBufferSxdWave(long id_buffer)
|
||
{
|
||
SND_fn_vResumeBufferSample(id_buffer);
|
||
}
|
||
|
||
void* SND_fn_pvGetPtrBufferSxdWave(long id_buffer)
|
||
{
|
||
return SND_fn_pvGetPtrBufferSample(id_buffer);
|
||
}
|
||
|
||
SndReal SND_fn_rGetPosBufferSxdWave(long id_buffer)
|
||
{
|
||
return SND_fn_rGetPosBufferSample(id_buffer);
|
||
}
|
||
|
||
long SND_fn_lCreateNewBufferExSxdWave(SND_tdstFormat* pformat,SND_tdstCallback* pCallback,SoundParam* par3D,long user_id)
|
||
{
|
||
SampleParam par2D,*p_par2D;
|
||
|
||
if (par3D)
|
||
{
|
||
SND_fn_vParam3Dto2D(par3D,&par2D);
|
||
p_par2D=&par2D;
|
||
}
|
||
else
|
||
p_par2D=&C_SAMPLEPARAM_NEUTRE;
|
||
|
||
return SND_fn_lCreateNewBufferExSample(pformat,pCallback,p_par2D,user_id);
|
||
}
|
||
|
||
long SND_fn_lGetPosBufferExSxdWave(long id_buffer)
|
||
{
|
||
return SND_fn_lGetPosBufferExSample(id_buffer);
|
||
}
|
||
|
||
long SND_fn_lPushBufferExSxdWave(long id_buffer,SND_tdstStackBuffer* pStack)
|
||
{
|
||
return SND_fn_lPushBufferExSample(id_buffer,pStack);
|
||
}
|
||
|
||
#endif /* DISABLE_BUFFER_CLIENT*/
|
||
/*--------------------------------------------------
|
||
relache-reprise a chaud des drives
|
||
---------------------------------------------------------*/
|
||
void SND_fn_vReleaseDriverSxdWave(void)
|
||
{
|
||
SND_fn_vReleaseDriverSample();
|
||
}
|
||
|
||
void SND_fn_vRestoreDriverSxdWave(void)
|
||
{
|
||
SND_fn_vRestoreDriverSample();
|
||
}
|
||
|
||
void SND_fn_vForceReleaseDriverSxdWave(void)
|
||
{
|
||
SND_fn_vForceReleaseDriverSample();
|
||
}
|
||
|
||
void SND_fn_vForceRestoreDriverSxdWave(void)
|
||
{
|
||
SND_fn_vForceRestoreDriverSample();
|
||
}
|
||
|
||
/*---------------------------------------------------------*/
|
||
/* GetPos: retourne la position "theorique" de la ressource*/
|
||
/* exprime en seconde depuis le debut*/
|
||
/* different du temps absolu (car pitch, derive..)*/
|
||
/* Entree: voie concernee*/
|
||
/* Sortie: temps en S (SndReal)*/
|
||
/*----------------------------------------------------------*/
|
||
SndReal SND_CALL SND_fn_rGetPosSxdWave(long voie)
|
||
{
|
||
return SND_fn_rGetPosSample(voie);
|
||
}
|
||
|
||
/*---------------------------------------------------------*/
|
||
/* GetLength: retourne la duree "theorique" de la ressource*/
|
||
/* exprime en seconde (constant pour une ressource donnee)*/
|
||
/* Entree: voie concernee*/
|
||
/* Sortie: duree en S (SndReal)*/
|
||
/*----------------------------------------------------------*/
|
||
SndReal SND_CALL SND_fn_rGetLengthSxdWave(long voie)
|
||
{
|
||
return SND_fn_rGetLengthSample(voie);
|
||
}
|
||
|
||
/*---------------------------------------------------------*/
|
||
/* GetTargetLabel: retourne le label designant la tareget*/
|
||
/* Entree: name=nom cible*/
|
||
/* nb_char=taille maxi de la cible*/
|
||
/*----------------------------------------------------------*/
|
||
void SND_fn_vGetTargetLabelSxdWave(char* name,int nb_char)
|
||
{
|
||
SND_fn_vGetTargetLabelSample(name,nb_char);
|
||
}
|
||
|
||
void SND_fn_vSetupTargetSxdWave(void)
|
||
{
|
||
SND_fn_vSetupTargetSample();
|
||
}
|
||
|
||
SndBool SND_fn_bCanSetupTargetSxdWave(void)
|
||
{
|
||
return SND_fn_bCanSetupTargetSample();
|
||
}
|
||
|
||
void SND_fn_vSetReverseStereoSxdWave(SndBool active)
|
||
{
|
||
SND_fn_vSetReverseSample(active);
|
||
}
|
||
|
||
SndBool SND_fn_bGetReverseStereoSxdWave(void)
|
||
{
|
||
return SND_fn_bGetReverseSample();
|
||
}
|
||
|
||
void SND_fn_vSetEffectSxdWave(long num)
|
||
{
|
||
SND_fn_vSetEffectSample(num);
|
||
}
|
||
|
||
void SND_fn_vSetSoundVolumeSxdWave(unsigned char vol)
|
||
{
|
||
SND_fn_vSetSoundVolumeSample(vol);
|
||
}
|
||
|
||
unsigned char SND_fn_ucGetSoundVolumeSxdWave(void)
|
||
{
|
||
return SND_fn_ucGetSoundVolumeSample();
|
||
}
|
||
|
||
/*-------------------------------------------------*/
|
||
/* Fonction de synchro moteur*/
|
||
/*-------------------------------------------------*/
|
||
void SND_fn_vSynchroSxdWave()
|
||
{
|
||
SND_fn_vSynchroSample();
|
||
}
|
||
|
||
void SND_fn_vSetDefaultRollOffSxdWave(RollOffParam* rolloff)
|
||
{
|
||
/*nothing to do in this version*/
|
||
}
|
||
|
||
SndBool SND_fn_bCheckVersionResourceSxdWave(tdstBlockResourceDisk* disk)
|
||
{
|
||
return TRUE;
|
||
}
|
||
|
||
/*change the user's choice for NbVoiceWished*/
|
||
void SND_fn_vSetNbVoiceWishedSxdWave(long nb)
|
||
{
|
||
SND_fn_vSetNbVoiceWishedSample(nb);
|
||
}
|
||
|
||
/*get the user's choice for NbVoiceWished*/
|
||
long SND_fn_lGetNbVoiceWishedSxdWave()
|
||
{
|
||
return SND_fn_lGetNbVoiceWishedSample();
|
||
}
|
||
|
||
/*get the recommended number of voice (isn't influed by NbWished voice)*/
|
||
/*to reinitalize the user's choice to the best value of voice,*/
|
||
/* call SND_fn_vSetNbVoiceWishedSxdWave(SND_fn_lGetNbVoiceOptimumSxdWave())*/
|
||
long SND_fn_lGetNbVoiceOptimumSxdWave()
|
||
{
|
||
return SND_fn_lGetNbVoiceOptimumSample();
|
||
}
|
||
|
||
SndBool SND_fn_bIsResourceLoopingSxdWave(tduRefRes res)
|
||
{
|
||
return SND_fn_bIsResourceLoopingSample(res);
|
||
}
|
||
|
||
SndBool SND_fn_b3DOneShootShouldBeConvertedSxdWave()
|
||
{
|
||
return FALSE;
|
||
}
|
||
|
||
SndBool SND_fn_bSetResourceStaticVolumeSxdWave(tdstBlockResourceMem* pstRes,unsigned char ucVolume)
|
||
{
|
||
return SND_fn_bSetResourceStaticVolumeSample(pstRes,ucVolume);
|
||
}
|
||
|
||
#endif
|
||
/* NO_ACP_SOUND*/
|
||
|