Commit 42361701 authored by Pascal Palenda's avatar Pascal Palenda
Browse files

Introduce RAVEN namespace - WIP

parent ff29a689
......@@ -73,13 +73,13 @@ namespace ITASimulationScheduler
unsigned long int uiCycles; //!< Number of cycles/elements
std::string sName; //!< Short name
};
//! Simulation task
/**
* Enthlt Informationen ber Auftragstyp, virtuelle Szene und Konfiguration der Simulation.
* Datenpfade sollten mit dem Makro $(RavenDataBasePath) beginnen, um den (entfernten) Simulator
* anzuweisen, den fr sich eingestellten Datenpfad zu verwenden.
*/
* Enthlt Informationen ber Auftragstyp, virtuelle Szene und Konfiguration der Simulation.
* Datenpfade sollten mit dem Makro $(RavenDataBasePath) beginnen, um den (entfernten) Simulator
* anzuweisen, den fr sich eingestellten Datenpfad zu verwenden.
*/
class ITA_SIMULATION_SCHEDULER_API CRavenSimulationTask
{
public:
......@@ -100,8 +100,8 @@ namespace ITASimulationScheduler
int iSimulationType; //!< Type of simulation, one of 'simulation types'
CRavenScene oScene; //!< Scene, die komplett simuliert wird (smtliche Quellen, Portale und Empfnger)
CRavenConfig oConfig; //!< Konfiguration fr den Simulationsauftrag
RAVEN::CRavenScene oScene; //!< Scene, die komplett simuliert wird (smtliche Quellen, Portale und Empfnger)
RAVEN::CRavenConfig oConfig; //!< Konfiguration fr den Simulationsauftrag
//! Task profiler status
struct CProfiler
......@@ -183,7 +183,6 @@ namespace ITASimulationScheduler
std::vector< ComplexSimulationSoundPath* > vcspResult; //!< Result container
};
//! Abstract RAVEN simulation interface
/**
* This abstract Interface to RAVEN embraces the
......
......@@ -30,202 +30,204 @@
namespace ITASimulationScheduler
{
//! Raven Konfiguration
/**
* Wird die RavenConfig in einem Simulator verwendet (z.B. als Teil eines Tasks),
* dann wird das Makro 'RavenDataBasePath', also die Zeichenkette $(RavenDataBasePath)
* automatisch durch den ausfhrenden Simulator in das jeweils eingestellte
* Basisverzeichnis umgesetzt. Dies kann sich je nach Simulator unterscheiden und
* ist vor Allem bei verteilten Systemen nicht immer identisch.
*
* Es sollte fr alle Pfade immer so verwendet werden:
*
* Beispiel Directivity: $(RavenDataBasePath)/Directivities/Bratsche.daff
* Beispiel HRIR: $(RavenDataBasePath)/HRIR/ITAKunstkopf.daff
* Beispiel RPF: $(RavenDataBasePath)/Scenes/Eurogress/Eurogress.rpf
*
* \note $(RavenDataBasePath) wird durch den aktuellen Basispfad der Instanz ersetzt
*/
class ITA_SIMULATION_SCHEDULER_API CRavenConfig
namespace RAVEN
{
public:
//! Difference flags (bitvector)
enum
{
GEO_SCENE = 1 << 0, //!< Difference in selected Scene/Project
ROOM_HUMIDITY = 1 << 1,
ROOM_STATPRESSURE = 1 << 2,
ROOM_REVERBTIME = 1 << 3,
ROOM_TEMPERATUR = 1 << 4,
IS_ORDER_PS = 1 << 5, //!< Difference in Image Source Order fr Primrschallquellen (Direktschall)
IS_ORDER_SS = 1 << 6, //!< Difference in Image Source Order fr Sekundrschallquellen (Reflexionen)
RT_PORTDETECT_ELTHRESH = 1 << 7,
RT_PORTDETECT_FILTERLENGTH = 1 << 8,
RT_PORTDETECT_RESTIMESLOTS = 1 << 9,
RT_PORTDETECT_NUMPARTICLES = 1 << 10,
RT_SPHEREDETECT_ELTHRESH = 1 << 11,
RT_SPHEREDETECT_FILTERLENGTH = 1 << 12,
RT_SPHEREDETECT_RESTIMESLOTS = 1 << 13,
RT_SPHEREDETECT_NUMPARTICLES = 1 << 14,
RT_SPHEREDETECT_RADIUS = 1 << 15,
RT_SPHEREDETECT_RESAZI = 1 << 16,
RT_SPHEREDETECT_RESELE = 1 << 17,
SIMSETS_ACCELETYPE = 1 << 18,
SIMSETS_SAMPLERATE = 1 << 19,
FILTENG_MAGRES = 1 << 20, //!< Filter enginge magnitude resolution
};
CRavenConfig();
virtual ~CRavenConfig();
struct Geometry
{
std::string sSceneFileName; //!< Pfad zur Geometriedatei (.ac)
};
Geometry oGeometry; //!< Konfiguration der Geometrie
struct Room
//! Raven Konfiguration
/**
* Wird die RavenConfig in einem Simulator verwendet (z.B. als Teil eines Tasks),
* dann wird das Makro 'RavenDataBasePath', also die Zeichenkette $(RavenDataBasePath)
* automatisch durch den ausfhrenden Simulator in das jeweils eingestellte
* Basisverzeichnis umgesetzt. Dies kann sich je nach Simulator unterscheiden und
* ist vor Allem bei verteilten Systemen nicht immer identisch.
*
* Es sollte fr alle Pfade immer so verwendet werden:
*
* Beispiel Directivity: $(RavenDataBasePath)/Directivities/Bratsche.daff
* Beispiel HRIR: $(RavenDataBasePath)/HRIR/ITAKunstkopf.daff
* Beispiel RPF: $(RavenDataBasePath)/Scenes/Eurogress/Eurogress.rpf
*
* \note $(RavenDataBasePath) wird durch den aktuellen Basispfad der Instanz ersetzt
*/
class ITA_SIMULATION_SCHEDULER_API CRavenConfig
{
float fTemperature; //!< Raumtemperatur in Grad Celsius
float fHumidity; //!< Raumfeuchte in % [0..100]
float fStaticPressure; //!< Statischer Luftdruck im Raum in Pascal
float fReverberationTime; //!< Aproximated reverberation time (for filter length prediction, in s!)
};
Room oRoom; //!< Konfiguration des Raumes
public:
//! Difference flags (bitvector)
enum
{
GEO_SCENE = 1 << 0, //!< Difference in selected Scene/Project
ROOM_HUMIDITY = 1 << 1,
ROOM_STATPRESSURE = 1 << 2,
ROOM_REVERBTIME = 1 << 3,
ROOM_TEMPERATUR = 1 << 4,
IS_ORDER_PS = 1 << 5, //!< Difference in Image Source Order fr Primrschallquellen (Direktschall)
IS_ORDER_SS = 1 << 6, //!< Difference in Image Source Order fr Sekundrschallquellen (Reflexionen)
RT_PORTDETECT_ELTHRESH = 1 << 7,
RT_PORTDETECT_FILTERLENGTH = 1 << 8,
RT_PORTDETECT_RESTIMESLOTS = 1 << 9,
RT_PORTDETECT_NUMPARTICLES = 1 << 10,
RT_SPHEREDETECT_ELTHRESH = 1 << 11,
RT_SPHEREDETECT_FILTERLENGTH = 1 << 12,
RT_SPHEREDETECT_RESTIMESLOTS = 1 << 13,
RT_SPHEREDETECT_NUMPARTICLES = 1 << 14,
RT_SPHEREDETECT_RADIUS = 1 << 15,
RT_SPHEREDETECT_RESAZI = 1 << 16,
RT_SPHEREDETECT_RESELE = 1 << 17,
SIMSETS_ACCELETYPE = 1 << 18,
SIMSETS_SAMPLERATE = 1 << 19,
FILTENG_MAGRES = 1 << 20, //!< Filter enginge magnitude resolution
};
struct ImageSources
{
int iOrderPrimarySource; //!< Spiegelschallquellenordnung Primrschallquellen (Direktschall)
int iOrderSecondarySource; //!< Spiegelschallquellenordnung Sekundrschallquellen (Reflexionen)
};
ImageSources oImageSource; //!< Konfiguration der Image Sources
CRavenConfig();
virtual ~CRavenConfig();
struct RayTracer
{
struct SphereDetector
struct Geometry
{
unsigned long int uliNumParticles; //!< Anzahl abgefeuerter Partikelstrahlen
float fEnergyLossThreshold; //!< Energiegrenze fr Partikel in dB
float fFilterLength; //!< Length of sphere detector filter in s (!)
float fResolutionAzimuth; //!< Grad
float fResolutionElevation; //!< Grad
float fRadius; //!< Meter
float fResolutionTimeSlots; //!< Time resolution is ms
std::string sSceneFileName; //!< Pfad zur Geometriedatei (.ac)
};
SphereDetector oSphereDetector;
Geometry oGeometry; //!< Konfiguration der Geometrie
struct PortalDetector
struct Room
{
unsigned long int uliNumParticles; //!< Anzahl abgefeuerter Partikelstrahlen
float fEnergyLossThreshold; //!< Energiegrenze fr Partikel in dB
float fFilterLength; //!< Length of portal detector filter in s (!)
float fResolutionTimeSlots; //!< Time resolution is ms (!)
float fTemperature; //!< Raumtemperatur in Grad Celsius
float fHumidity; //!< Raumfeuchte in % [0..100]
float fStaticPressure; //!< Statischer Luftdruck im Raum in Pascal
float fReverberationTime; //!< Aproximated reverberation time (for filter length prediction, in s!)
};
PortalDetector oPortalDetector;
};
RayTracer oRayTracer; //!< Konfiguration des Ray Tracers
//! Geometrische Beschleunigungsalgorithmen
enum
{
BSP = 0, //!< Binary Space Partitioning
HASHMAP = 1, //!< Hashing
};
struct SimulationSettings
{
int iAccelerationType; //!< Geometrischer Beschleunigungsalgorithmus (BSP oder HASHMAP)
double dSampleRate; //!< Abtastrate, mit der die Audiohardware sampelt
};
SimulationSettings oSimulationSettings; //!< Konfiguration der Simulation
//! Bandfilter-Spektren
enum
{
WHOLE_OCTAVE_SPECTRUM = 0, //!< Terzbandfilter
THIRD_OCTAVE_SPECTRUM = 1, //!< Oktavbandfilter
};
Room oRoom; //!< Konfiguration des Raumes
struct FilterEngine
{
int iMagnitudesResolution; //!< Bandfilter-Auflsung (THIRD_OCTAVE oder WHOLE_OCTAVE)
};
FilterEngine oFilterEngine;
//! Vergleicht die eigene Konfiguration gegen eine andere
/**
* \return Gibt den Difference flag zurck
*/
virtual unsigned int Compare(const CRavenConfig& oOtherConfig);
//! Setzt die Konfiguration zurck
virtual void Reset();
//! Setzt die Konfiguration auf sinnvolle Standardwerte
virtual void SetDefaults();
//! Set the configuration from another object (copy from method)
virtual void Set(const CRavenConfig& oSrc);
struct ImageSources
{
int iOrderPrimarySource; //!< Spiegelschallquellenordnung Primrschallquellen (Direktschall)
int iOrderSecondarySource; //!< Spiegelschallquellenordnung Sekundrschallquellen (Reflexionen)
};
ImageSources oImageSource; //!< Konfiguration der Image Sources
//! Ld eine Konfiguration aus einer RPF-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* Raven-Projektdatei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*
* \note Legacy-Support fr RPF-Dateien
*/
virtual void LoadFromRPFFile(const std::string& sRPFFilePath);
struct RayTracer
{
struct SphereDetector
{
unsigned long int uliNumParticles; //!< Anzahl abgefeuerter Partikelstrahlen
float fEnergyLossThreshold; //!< Energiegrenze fr Partikel in dB
float fFilterLength; //!< Length of sphere detector filter in s (!)
float fResolutionAzimuth; //!< Grad
float fResolutionElevation; //!< Grad
float fRadius; //!< Meter
float fResolutionTimeSlots; //!< Time resolution is ms
};
SphereDetector oSphereDetector;
struct PortalDetector
{
unsigned long int uliNumParticles; //!< Anzahl abgefeuerter Partikelstrahlen
float fEnergyLossThreshold; //!< Energiegrenze fr Partikel in dB
float fFilterLength; //!< Length of portal detector filter in s (!)
float fResolutionTimeSlots; //!< Time resolution is ms (!)
};
PortalDetector oPortalDetector;
};
RayTracer oRayTracer; //!< Konfiguration des Ray Tracers
//! Ld eine Konfiguration aus einer INI-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* INI-Datei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \note Throws ITAException on error
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)turn
*
*/
virtual void Load(const std::string& sPath);
//! Geometrische Beschleunigungsalgorithmen
enum
{
BSP = 0, //!< Binary Space Partitioning
HASHMAP = 1, //!< Hashing
};
//! Speicher die Konfiguration in eine INI-Datei
/**
* Speichert die Konfigurationsparameter in eine INI-Datei
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*/
virtual void Store(const std::string& sPath) const;
struct SimulationSettings
{
int iAccelerationType; //!< Geometrischer Beschleunigungsalgorithmus (BSP oder HASHMAP)
double dSampleRate; //!< Abtastrate, mit der die Audiohardware sampelt
};
SimulationSettings oSimulationSettings; //!< Konfiguration der Simulation
//! Erzeugt einen String mit den Parametern
/**
* \return Zeichenausgabe
*/
virtual std::string ToString() const;
//! Validates settings to detect odd configuration
/*
* Validation based on meaningfull settings to detect odd settings,
* i.e. for early warning purpose. A return value greater zero
* indicates a probable wrong config, though that does not necessarily
* mean that a problem will rise during simulation.
*
* Use validation to ensure good settings and ignore output if you
* know what you are doing.
*
* It is always recommended to start with default set, see SetDefaults()
*
* \return Difference bitvector containing flags about avery odd setting
*/
virtual unsigned int Validate() const;
};
//! Bandfilter-Spektren
enum
{
WHOLE_OCTAVE_SPECTRUM = 0, //!< Terzbandfilter
THIRD_OCTAVE_SPECTRUM = 1, //!< Oktavbandfilter
};
struct FilterEngine
{
int iMagnitudesResolution; //!< Bandfilter-Auflsung (THIRD_OCTAVE oder WHOLE_OCTAVE)
};
FilterEngine oFilterEngine;
//! Vergleicht die eigene Konfiguration gegen eine andere
/**
* \return Gibt den Difference flag zurck
*/
virtual unsigned int Compare(const CRavenConfig& oOtherConfig);
//! Setzt die Konfiguration zurck
virtual void Reset();
//! Setzt die Konfiguration auf sinnvolle Standardwerte
virtual void SetDefaults();
//! Set the configuration from another object (copy from method)
virtual void Set(const CRavenConfig& oSrc);
//! Ld eine Konfiguration aus einer RPF-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* Raven-Projektdatei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*
* \note Legacy-Support fr RPF-Dateien
*/
virtual void LoadFromRPFFile(const std::string& sRPFFilePath);
//! Ld eine Konfiguration aus einer INI-Datei
/**
* Ld smtliche vorhandenen Informationen aus einer
* INI-Datei und fllt nicht vorhandene Werte
* mit den Default-Werten aus, wie sie durch die Methode
* SetDefaults() gesetzt werden.
*
* \note Throws ITAException on error
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)turn
*
*/
virtual void Load(const std::string& sPath);
//! Speicher die Konfiguration in eine INI-Datei
/**
* Speichert die Konfigurationsparameter in eine INI-Datei
*
* \param sFilePath Pfad zur Datei (relativ oder absolut, keine Makros, berschreibt)
*/
virtual void Store(const std::string& sPath) const;
//! Erzeugt einen String mit den Parametern
/**
* \return Zeichenausgabe
*/
virtual std::string ToString() const;
//! Validates settings to detect odd configuration
/*
* Validation based on meaningfull settings to detect odd settings,
* i.e. for early warning purpose. A return value greater zero
* indicates a probable wrong config, though that does not necessarily
* mean that a problem will rise during simulation.
*
* Use validation to ensure good settings and ignore output if you
* know what you are doing.
*
* It is always recommended to start with default set, see SetDefaults()
*
* \return Difference bitvector containing flags about avery odd setting
*/
virtual unsigned int Validate() const;
};
}
}
#endif // __R_RAVEN_CONFIG_H__
......@@ -38,292 +38,293 @@
namespace ITASimulationScheduler
{
//! Class that contains information on a receiver
class ITA_SIMULATION_SCHEDULER_API CRavenReceiverState
namespace RAVEN
{
public:
CRavenReceiverState() {};
virtual ~CRavenReceiverState() {};
//! Difference flags
enum
//! Class that contains information on a receiver
class ITA_SIMULATION_SCHEDULER_API CRavenReceiverState
{
POS = 1, //!< Difference in Position
ORIENT = 2, //!< Difference in Orientation
HRIR = 4, //!< Difference in Head-Related Impulse Response dataset
INROOM = 8, //!< Difference in inside/outside room state
public:
CRavenReceiverState() {};
virtual ~CRavenReceiverState() {};
//! Difference flags
enum
{
POS = 1, //!< Difference in Position
ORIENT = 2, //!< Difference in Orientation
HRIR = 4, //!< Difference in Head-Related Impulse Response dataset
INROOM = 8, //!< Difference in inside/outside room state
};
RG_Vector vPos;
RG_Vector vView;
RG_Vector vUp;
std::string sHRIRFilename;
bool bInsideRoom;
//! Compare with another state and return difference flags
virtual int Compare(const CRavenReceiverState& oState) const;
};
RG_Vector vPos;
RG_Vector vView;
RG_Vector vUp;
std::string sHRIRFilename;
bool bInsideRoom;
//! Compare with another state and return difference flags
virtual int Compare(const CRavenReceiverState& oState) const;
};
//! Class that contains information on a sound source
class ITA_SIMULATION_SCHEDULER_API CRavenSourceState
{
public:
CRavenSourceState() {};
virtual ~CRavenSourceState() {};
//! Difference flags
enum
//! Class that contains information on a sound source
class ITA_SIMULATION_SCHEDULER_API CRavenSourceState
{
POS = 1, //!< Difference in Position
ORIENT = 2, //!< Difference in Orientation
DIR = 4, //!< Difference in Directivity dataset
INROOM = 8, //!< Difference in inside/outside room state
public:
CRavenSourceState() {};
virtual ~CRavenSourceState() {};
//! Difference flags
enum
{
POS = 1, //!< Difference in Position
ORIENT = 2, //!< Difference in Orientation
DIR = 4, //!< Difference in Directivity dataset
INROOM = 8, //!< Difference in inside/outside room state
};
RG_Vector vPos;
RG_Vector vView;
RG_Vector vUp;
std::string sDirectivityFilename;
bool bInsideRoom; //!< True, if the source is within a room
//! Compare with another state and return difference flags
virtual int Compare(const CRavenSourceState& oState) const;
};
RG_Vector vPos;
RG_Vector vView;
RG_Vector vUp;
std::string sDirectivityFilename;
bool bInsideRoom; //!< True, if the source is within a room
//! Compare with another state and return difference flags
virtual int Compare(const CRavenSourceState& oState) const;
};
//! Class that contains information on an acoustic portal
class ITA_SIMULATION_SCHEDULER_API CRavenPortalState
{
public:
CRavenPortalState() {};
virtual ~CRavenPortalState() {};
//! Difference flags
enum
//! Class that contains information on an acoustic portal
class ITA_SIMULATION_SCHEDULER_API CRavenPortalState
{
POS = 1, //!< Difference in Position
STATE = 2, //!< Difference in state (closed -> open = [0...1])
public:
CRavenPortalState() {};
virtual ~CRavenPortalState() {};
//! Difference flags
enum
{
POS = 1, //!< Difference in Position
STATE = 2, //!< Difference in state (closed -> open = [0...1])
};
RG_Vector vPos;
double dState;
//! Compare with another state and return difference flags
virtual int Compare(const CRavenPortalState& oState) const;
};
RG_Vector vPos;
double dState;
//! Compare with another state and return difference flags
virtual int Compare(const CRavenPortalState& oState) const;
};
//! Difference between number of objects from another scene
class ITA_SIMULATION_SCHEDULER_API CRavenSceneDiff
{
public:
std::vector< int > viNewReceivers; //!< New receivers
std::vector< int > viModReceivers; //!< Modified receivers
std::vector< int > viDelReceivers; //!< Removed receivers
std::vector< int > viNewSources; //!< New sources
std::vector< int > viModSources; //!< Modified sources
std::vector< int > viDelSources; //!< Removed sources
std::vector< int > viNewPortals; //!< New portals
std::vector< int > viModPortals; //!< Modified portals
std::vector< int > viDelPortals; //!< Removed portals
//! Returns TRUE if a difference was detected
virtual bool EntitiesChanged() const;
};
//! Abstraktes Interface fr eine Raven-Szene
/**
* Funktionalitt, die eine Raven-Szene erfllen muss.
*/
class ITA_SIMULATION_SCHEDULER_API IRavenSceneInterface
{
public:
virtual ~IRavenSceneInterface() {};
//! Reset RAVEN
/**
* Perform an entire reset of the RAVEN instance, i.e. clears all objects
*/
virtual void Reset() = 0;
//! Add sound source
/**