reman3/Rayman_X/cpa/tempgrp/SND/inc/sndres.h

454 lines
19 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef _SNDRES_H_
#define _SNDRES_H_
#ifdef SND_SCRIPT_VERSION /*Mode Script pur*/
#if defined(SNDLST2_StaticIsOptimised) || defined(LST2_StaticIsOptimised)
#error Macros not coherent
#endif
#endif
#ifdef SND_HYBRID_VERSION /*Mode Hybride*/
#define LST2_StaticIsOptimised
#define SNDLST2_StaticIsOptimised
#endif
#ifdef SND_BINARY_VERSION /*Mode Binaire pur*/
#define LST2_StaticIsOptimised
#define SNDLST2_StaticIsOptimised
#endif
#if ((!defined(SND_SCRIPT_VERSION))&&((!defined(SND_HYBRID_VERSION))&&(!defined(SND_BINARY_VERSION))))
#error neither SCRIPT,HYBRID, or BINARY defined
#endif
#include "sndlst2.h"
/*-------------------------------------------------------------------------*/
/*definitions specifiques à la target*/
#include "sndhard.h"
/****************************************************************/
/* Structures portables pour les Ressources */
/****************************************************************/
#define SND_C_RES_FANTOME_PTR NULL
#define SND_C_RES_FANTOME_ID -1
extern tduRefRes SND_RES_FANTOME;
typedef enum _tdeTypeResource{
TYPE_INVALID,
TYPE_SAMPLE,
TYPE_MIDI,
TYPE_CDAUDIO,
TYPE_SEQUENCE,
TYPE_SWITCH_OLD,
TYPE_SPLIT,
TYPE_THEME_OLD,
TYPE_SWITCH,
TYPE_THEME_OLD2,
TYPE_RANDOM,
TYPE_THEME,
TYPE_FOR_ALIGNEMENT=SND_ENUM_ALIGNEMENT
} tdeTypeResource;
#define NB_TYPES_RESOURCES 12
/* AJOUT FRED DECREAU : A VALIDER!!*/
typedef enum{
TYPE_EXTERNAL, /*les data sont chargees/dechargees ressources par ressources*/
TYPE_MEGAFILE, /*les data sont chargees/dechargees par bloc de ressources*/
TYPE_BIGFILE,
STORAGE_FOR_ALIGNEMENT=SND_ENUM_ALIGNEMENT
} tdeTypeStorage;
/*--------------------------------------------------- RANDOM RESSOURCES*/
/*parametres d'un element d'une liste ACP de references de ressources:*/
struct _tdstRandomElement {
tduRefRes uRes; /*reference sur la ressource associee à lelement*/
SndReal rProb; /*probabilite d'etre choisi*/
SndBool bCanBeChosenTwice; /*if FALSE, element cannot be choosen twice consecutively*/
SNDLST2_M_StaticChildDeclaration(tdstRandomElement*,tdstTypeRandomMem*)
} ;
/*Definition dune ressource random en memoire :*/
struct _tdstTypeRandomMem
{
unsigned long ulNbElements; /*nb delements dans la liste daiguillage*/
SndReal rProbNothing; /*probabilite qu'aucun son ne soit choisi*/
SndBool bNothingCanBeChosenTwice; /*if FALSE, "nothing" element cannot be choosen twice consecutively*/
long lLastElementChoosen; /*used only in memory: last eleent choosen SILENCE or any RandomElement*/
long lLastResChoosen; /*used only in memory: last eleent choosen SILENCE or any RandomElement*/
SNDLST2_M_StaticParentDeclaration(tdstRandomElement*)
};
/*Definition dune ressource random sur disque :*/
struct _tdstTypeRandomDisk
{
unsigned long ulNbElements; /*nb delements dans la liste daiguillage*/
SndReal rProbNothing; /*probabilite qu'aucun son ne soit choisi*/
SndBool bNothingCanBeChosenTwice; /*if FALSE, "nothing" element cannot be choosen twice consecutively*/
long lLastResChoosenObsolet; /*NOT USED; only kept to avoid disalignment*/
SNDLST2_M_StaticParentDeclaration(tdstRandomElement*) /*not needed, but BNM alignement cannot be changed*/
};
/*----previous THEME (only for compatibility)*/
typedef struct _tdstThemeBridgeOld tdstThemeBridgeOld;
typedef struct _tdstThemePartOld tdstThemePartOld;
typedef struct _tdstTypeThemeOld tdstTypeThemeOld;
typedef tdstThemePartOld* hThemePartOld;
typedef tdstThemeBridgeOld* hThemeBridgeOld;
SNDLST2_M_StaticUseListOf(hThemeBridgeOld);
struct _tdstThemeBridgeOld {
tduRefRes uResTarget;
tduRefRes uRes;
SNDLST2_M_StaticElementDeclaration(hThemeBridgeOld)
};
struct _tdstThemePartOld {
tduRefRes uRes;
SNDLST2_M_StaticChildDeclaration(tdstThemePartOld*,tdstTypeThemeOld*)
/*SNDLST2_M_StaticParentDeclaration(tdstThemeBridge*)*/
SNDLST2_M_StaticAnchorDeclaration(hThemeBridgeOld) hLstThemeBridge;
};
struct _tdstTypeThemeOld {
unsigned long ulStartLoop; /*indice du point de rebouclage*/
unsigned long ulEndLoop; /*indice du dernier point de la boucle la boucle*/
tduRefRes uBridgeIn;
SNDLST2_M_StaticParentDeclaration(tdstThemePartOld*)
};
/*--------------------------------------------------- THEME old2*/
typedef struct _tdstThemeBridgeOld2 tdstThemeBridgeOld2;
typedef struct _tdstThemePartOld2 tdstThemePartOld2;
typedef struct _tdstTypeThemeDiskOld2 tdstTypeThemeDiskOld2;
typedef struct _tdstTypeThemeMemOld2 tdstTypeThemeMemOld2;
typedef tdstThemePartOld2* hThemePartOld2;
typedef tdstThemeBridgeOld2* hThemeBridgeOld2;
SNDLST2_M_StaticUseListOf(hThemeBridgeOld2);
typedef enum _tdeTypeTransitionOld2{
TRANSITION_CROSSFADE_Old2,
TRANSITION_ATENDOFPART_Old2,
TRANSITION_FOR_ALIGNEMENT_Old2=SND_ENUM_ALIGNEMENT
} tdeTypeTransitionOld2;
struct _tdstThemePartOld2 {
tduRefRes uRes;
SndBool_field_decl(bLoopStart); /*TRUE if this part is the begining of a loop*/
SndBool_field_decl(bLoopEnd); /*TRUE if this part is the last part of a loop*/
long lNbLoops; /*if bLoopStart, indicates the number of re-loops (0=played only once,1=2 times...)*/
tdeTypeTransitionOld2 eTransition; /*transition in case of new theme starting*/
SNDLST2_M_StaticChildDeclaration(tdstThemePartOld2*,tdstTypeThemeMemOld2*)
};
struct _tdstTypeThemeDiskOld2 {
unsigned long ulStartLoop; /*indice du point de rebouclage*/
unsigned long ulNbParts; /*nombre total de parts dans la liste*/
SNDLST2_M_StaticParentDeclaration(tdstThemePartOld2*) /*not needed, but BNM alignement cannot be changed*/
};
struct _tdstTypeThemeMemOld2 {
unsigned long ulStartLoop; /*indice du point de rebouclage*/
unsigned long ulNbParts; /*nombre total de parts dans la liste*/
SNDLST2_M_StaticParentDeclaration(tdstThemePartOld2*)
};
/*--------------------------------------------------- THEME*/
typedef enum _tdeTypeTransition{
TRANSITION_CROSSFADE, /*instantaneous transition with cross fade*/
TRANSITION_ATENDOFPART, /*transition at the end of current part*/
TRANSITION_OUTRO, /*transition at the end of current part followed by outro (if any)*/
TRANSITION_FOR_ALIGNEMENT=SND_ENUM_ALIGNEMENT
} tdeTypeTransition;
typedef tdstThemePart* hThemePart;
#define DEFAULT_FADEDURATION M_IntToRealSnd(0)
struct _tdstThemePart {
tduRefRes uRes;
SndBool_field_decl(bLoopStart); /*TRUE if this part is the begining of a loop*/
SndBool_field_decl(bLoopEnd); /*TRUE if this part is the last part of a loop*/
long lNbLoops; /*if bLoopStart, indicates the number of re-loops (0=played only once,1=2 times...)*/
tdeTypeTransition eTransition; /*transition in case of new theme starting*/
SndReal rFadeDuration; /*if DEFAULT, use Theme's fade duration; else, duration in sec*/
SNDLST2_M_StaticChildDeclaration(tdstThemePart*,tdstTypeThemeMem*)
};
struct _tdstThemePartOutro {
tduRefRes uRes;
tdeTypeTransition eTransition; /*transition in case of new theme starting*/
SndReal rFadeDuration; /*if DEFAULT, use Theme's fade duration; else, duration in sec*/
};
#define C_THEME_NO_LOOP -1
#define C_THEME_PART_PLAY_ONCE 0
#define C_THEME_MAINLOOP_INFINITE 0
#define C_THEME_NO_PARTOUTRO -1
struct _tdstTypeThemeDisk {
unsigned long ulStartLoop; /*main loop start (first part of the loop*/
unsigned long ulEndLoopObsolet;/*UNUSED; just keep to avoid disalignment and incompatiblity*/
unsigned long ulNbLoops; /*total number of loop;C_THEME_LOOP_INIFINITE=0 if infinite loop;1=play once;2=play twice...*/
unsigned long ulNbParts; /*total number of part in the list (excluding outro)*/
long lOffsetPartOutro; /*offset of Partoutro in this resource extra data; in bytes; 0 is the location of 1° part;C_THEME_NO_PARTOUTRO=no partoutro*/
SndReal rFadeDuration; /*if DEFAULT, use default duration (1sec); else, duration in sec*/
SNDLST2_M_StaticParentDeclaration(tdstThemePart*) /*not needed, but BNM alignement cannot be changed*/
};
struct _tdstTypeThemeMem {
unsigned long ulStartLoop; /*main loop start (0=first part, 1=2° part...)*/
unsigned long ulEndLoopObsolet ;/*UNUSED; just keep to avoid disalignment and incompatiblity*/
unsigned long ulNbParts; /*total number of part in the list (excluding OUTRO)*/
tdstThemePartOutro* pstPartOutro;
SndReal rFadeDuration; /*if DEFAULT, use default fade duration (1sec); else, duration in sec*/
unsigned long ulNbLoops; /*total number of loop;C_THEME_LOOP_INIFINITE=0 if infinite loop;1=play once;2=play twice...*/
SNDLST2_M_StaticParentDeclaration(tdstThemePart*)
};
/*------ previous switch ressources (only for compatbilty)*/
typedef struct _tdstTypeSwitchOld tdstTypeSwitchOld;
struct _tdstTypeSwitchOld
{
SNDLST2_M_StaticParentDeclaration(tdstSwitchElement*)
unsigned long ulNbElements; /*nb delements dans la liste daiguillage*/
long lTypeSwitch; /*type moteur de switch*/
SND_tdxHandleToSoundInfo hDefault; /*indice de l'element par defaut*/
SndBool bDynamic; /*switch remis à jour dynamiquement*/
};
/*--------------------------------------------------- SWITCH RESSOURCES*/
/*parametres d'un element d'une liste ACP de references de ressources:*/
struct _tdstSwitchElement {
tduRefRes uRes; /*reference sur la ressource associee à lelement*/
SND_tdxHandleToSoundInfo hIndice; /*indice associe à l'element*/
SNDLST2_M_StaticChildDeclaration(tdstSwitchElement*,tdstTypeSwitchMem*)
} ;
/*
// Liste de references sur des ressources:
struct _tdstSwitchList
{
SNDLST2_M_StaticParentDeclaration(tdstSwitchElement*)
};
*/
#define C_SWITCH_NODEFAULT ((SND_tdxHandleToSoundInfo)-1)
/*Definition dune ressource switch en memoire :*/
struct _tdstTypeSwitchMem
{
SNDLST2_M_StaticParentDeclaration(tdstSwitchElement*)
unsigned long ulNbElements; /*nb delements dans la liste daiguillage*/
long lTypeSwitch; /*type moteur de switch*/
SND_tdxHandleToSoundInfo hDefault; /*indice de l'element par defaut*/
SndBool_field_decl(bDynamic); /*switch remis à jour dynamiquement*/
SndBool_field_decl(bMaintainIfSwitched); /*if TRUE, never stop a launched element, event if switch value change (there'll be only Plays)*/
};
/*Definition dune ressource switch sur disque :*/
struct _tdstTypeSwitchDisk
{
SNDLST2_M_StaticParentDeclaration(tdstSwitchElement*) /*not needed, but BNM alignement cannot be changed*/
unsigned long ulNbElements; /*nb delements dans la liste daiguillage*/
long lTypeSwitch; /*type moteur de switch*/
SND_tdxHandleToSoundInfo hDefault; /*indice de l'element par defaut*/
SndBool_field_decl(bDynamic); /*switch remis à jour dynamiquement*/
SndBool_field_decl(bMaintainIfSwitched); /*if TRUE, never stop a launched element, event if switch value change (there'll be only Plays)*/
};
/*--------------------------------------------------- RESSOURCES SPLITS*/
/*Definition dune ressource split sur disque: */
struct _tdstTypeSplitDisk
{
unsigned long ulNbRanges ; /*nb delements dans la liste daiguillage*/
SndBool bStayActive; /*rester actif si aucune plage active*/
/*char czFileName[13]; // nom du fichier de sequence Id des ressoures*/
} ;
/*Description d'une plage (range) du split*/
struct _tdstRangeSplitDisk {
tduRefRes uRes ; /*ressource associee à la plage*/
SndReal rPitchA ; /*pitch de la ressource split correspondant au point A*/
SndReal rPitchB ; /*pitch de la ressource split correspondant au point B*/
SndReal rPitchC ; /*pitch de la ressource split correspondant au point C*/
SndReal rPitchD ; /*pitch de la ressource split correspondant au point D*/
SndReal rCoefPitch ; /*rapport entre pitch effectif de la plage et pitch de la ressource Split*/
unsigned char ucVolume ; /*volume auquel doit etre jouee la ressource entre B et C*/
SNDLST2_M_StaticChildDeclaration(tdstRangeSplitDisk*,tdstRangeSplitListDisk*)
} ;
/*Liste ACP de plages:*/
struct _tdstRangeSplitListDisk{
SNDLST2_M_StaticParentDeclaration(tdstRangeSplitDisk *)
} ;
/*Description d'une plage (range) du split*/
struct _tdstRangeSplitMem {
tduRefRes uRes ; /*ressource associee à la plage*/
SndReal rPitchA ; /*pitch de la ressource split correspondant au point A*/
SndReal rPitchB ; /*pitch de la ressource split correspondant au point B*/
SndReal rPitchC ; /*pitch de la ressource split correspondant au point C*/
SndReal rPitchD ; /*pitch de la ressource split correspondant au point D*/
SndReal rCoefPitch ; /*rapport entre pitch effectif de la plage et pitch de la ressource Split*/
unsigned char ucVolume ; /*volume auquel doit etre jouee la ressource entre B et C*/
SNDLST2_M_StaticChildDeclaration(tdstRangeSplitMem*,tdstRangeSplitListMem*)
SndReal rCoefMagAB; /*coef precalcule*/
SndReal rCoefMagCD;
} ;
/*Liste ACP de plages:*/
struct _tdstRangeSplitListMem{
SNDLST2_M_StaticParentDeclaration( tdstRangeSplitMem *)
} ;
/*Definition dune ressource switch en memoire :*/
struct _tdstTypeSplitMem
{
unsigned long ulNbRanges; /*nb de plages*/
SndBool bStayActive; /*rester actif si aucune plage active*/
tdstRangeSplitListMem stRangeList; /*liste des plages*/
} ;
/*--------------------------------------------------- SEQUENCES*/
/*parametres d'un element d'une sequence (donnees sur disk)*/
struct _tdstInfoTrackDisk {
unsigned long ulFadeIn; /*fade in sur cet element*/
unsigned long ulFadeOut; /*fade out à la fin de lelement*/
/* unsigned char ucNbLoops; //nombre de repetition de cet element*/
unsigned long ulCrossFade;/*cross-fade avec l element suivant*/
tduRefRes uRes; /*reference sur la ressource associee à lelement*/
} ;
/*parametres d'un element d'une sequence (donnees en mem), element de liste ACP:*/
struct _tdstInfoTrackMem {
SNDLST2_M_StaticChildDeclaration(tdstInfoTrackMem*,tdstInfoTrackList*)
unsigned long ulFadeIn; /*fade in sur cet element*/
unsigned long ulFadeOut; /*fade out à la fin de lelement*/
/* unsigned char ucNbLoops; //nombre de repetition de cet element*/
unsigned long ulCrossFade; /*cross-fade avec l element suivant*/
tduRefRes uRes; /*reference sur la ressource associee à lelement*/
} ;
/* Declaration d'une liste de ressources pour les sequences*/
struct _tdstInfoTrackList
{
/* M_LstParentDeclaration(tdstInfoTrackMem);*/
SNDLST2_M_StaticParentDeclaration(tdstInfoTrackMem*)
};
/*parametres d'une ressource de type sequence (donnee sur disk)*/
struct _tdstTypeSequenceDisk {
SndBool bLoop; /*la sequence boucle-t-elle*/
unsigned long ulStartLoop; /*indice du point de rebouclage*/
unsigned long ulEndLoop; /*nd delements dans la boucle*/
unsigned long ulNbLoops; /*nombre de boucle dans la sequence*/
unsigned long ulNbElements; /*nombre delements constituant la sequence*/
/*char czFileName[13]; // nom du fichier de sequence Id des ressoures*/
} ;
/*parametres d'une ressource de type sequence (donnee en mem)*/
struct _tdstTypeSequenceMem {
SndBool bLoop; /*la sequence boucle-t-elle*/
unsigned long ulStartLoop; /*indice du point de rebouclage*/
unsigned long ulEndLoop; /*nd delements dans la boucle*/
unsigned long ulNbLoops; /*nombre de boucle dans la sequence*/
unsigned long ulNbElements; /*nombre delements constituant la sequence*/
tdstInfoTrackList stResList; /*liste des ressources contenues dans la sequence*/
} ;
/*--------------------------------------------------- BLOCSRESOURCES*/
/*union des descripteurs de ressources sur disk*/
union _tduResDisk {
tdstTypeSampleDisk stSample ;
tdstTypeMidiDisk stMidi ;
tdstTypeCD stCD;
tdstTypeSequenceDisk stSequence ;
tdstTypeSwitchDisk stSwitch ;
tdstTypeSwitchOld stSwitchOld ;/*obsolete*/
tdstTypeSplitDisk stSplit;
tdstTypeThemeDisk stTheme;
tdstTypeRandomDisk stRandom;
tdstTypeThemeOld stThemeOld;/*obsolete*/
tdstTypeThemeDiskOld2 stThemeOld2;/*obsolete*/
} ;
/*description d'une ressource (donnees sur disk)*/
struct _tdstBlockResourceDisk {
tdxId Id; /*id de la ressource*/
tdeTypeResource eType; /*type*/
tdeTypeStorage eStorage; /*storage ???*/
unsigned long ulDataSize; /*taille des donnees utilse (i.e. taille des samples (<taille du WAV)*/
unsigned long ulDataOffset; /*offset des donnees dans le fichier*/
unsigned char ucVolume; /*volume par defaut*/
tduResDisk uRes; /*description de la ressource*/
};
/*union des descripteurs de ressources en memoire*/
union _tduResMem {
tdstTypeSampleMem stSample ;
tdstTypeMidiMem stMidi ;
tdstTypeCD stCD;
tdstTypeSequenceMem stSequence ;
tdstTypeSwitchMem stSwitch ;
tdstTypeSplitMem stSplit;
tdstTypeThemeMem stTheme;
tdstTypeRandomMem stRandom;
} ;
/*description d'une ressource (donnees en memoire)*/
struct _tdstBlockResourceMem {
tdxId Id; /*id de la ressource*/
tdeTypeResource eType; /*type*/
tdeTypeStorage eStorage; /*storage ???*/
unsigned char ucVolume; /*volume par dfaut*/
SndBool bIsLoaded; /*TRUE si en meoire*/
tduResMem uRes ; /*description propre à la ressource*/
/* M_LstChildDeclaration(tdstBlockResourceMem,tdstSndPolyResource); //insertion dans la liste ACP*/
SNDLST2_M_StaticChildDeclaration(tdstBlockResourceMem*,tdstSndPolyResource*) /*insertion dans la liste ACP*/
};
/* Description d'une ressource de banque:*/
union _tduBlockResource {
tdstBlockResourceMem stMem;
tdstBlockResourceDisk stDisk;
};
/*liste ACP des ressources */
struct _tdstSndPolyResource {
/* M_LstParentDeclaration(tdstBlockResourceMem);*/
SNDLST2_M_StaticParentDeclaration(tdstBlockResourceMem*)
};
/*parametres d'un element d'une liste ACP de references de ressources:*/
struct _tdstRefRes {
tduRefRes uRes; /*reference sur la ressource associee à lelement*/
SNDLST2_M_StaticChildDeclaration(tdstRefRes*,tdstRefResList*)
} ;
/* Liste de references sur des ressources:*/
struct _tdstRefResList
{
SNDLST2_M_StaticParentDeclaration(tdstRefRes*)
};
#endif /*_SNDRES_H_*/