Commit 9c3800cd authored by Dipl.-Ing. Jonas Stienen's avatar Dipl.-Ing. Jonas Stienen
Browse files

Merge branch 'develop' of https://git.rwth-aachen.de/ita/VACore into develop

parents 78026d20 9dd24fb9
......@@ -10,7 +10,7 @@ Devices = LS_FL, LS_FR, LS_RR, LS_RL, LS_TF, LS_TR, LS_TB, LS_TL, LS_BF, LS_BR,
[Output:VRLAB_VLS_ALL]
Description = ITA VRLab setup using all available broadband loudspeaker (O300 & O110)
Enabled = false
Enabled = true
Devices = LS_FL, LS_FR, LS_RR, LS_RL, LS_TF, LS_TR, LS_TB, LS_TL, LS_BF, LS_BR, LS_BB, LS_BL, LS_VU, LS_VD
[Output:VRLAB_LS_HORIZONTAL]
......
......@@ -104,7 +104,7 @@ public:
CVAAmbisonicsFreeFieldAudioRenderer::CVAAFFSource* pSource;
CVAAmbisonicsFreeFieldAudioRenderer::CVAAFFListener* pListener;
CVASourceReceiverMetrics oRelations; //!< Informationen on source and receiver relations (distances & angles)
CVASourceReceiverMetrics oRelations; //!< Informations on source and receiver relations (distances & angles)
CDirectivityState oDirectivityStateCur;
CDirectivityState oDirectivityStateNew;
......@@ -238,6 +238,8 @@ CVAAmbisonicsFreeFieldAudioRenderer::CVAAmbisonicsFreeFieldAudioRenderer( const
double dSampleRate = m_pCore->GetCoreConfig()->oAudioDriverConfig.dSampleRate;
int iBlockLength = m_pCore->GetCoreConfig()->oAudioDriverConfig.iBuffersize;
m_vecCaveCenterPos.Set(0.0f, 1.27f, 0.0f);
m_pdsOutput = new ITADatasourceRealization( m_iNumChannels, dSampleRate, iBlockLength );
m_pdsOutput->SetStreamEventHandler( this );
......@@ -428,6 +430,31 @@ void CVAAmbisonicsFreeFieldAudioRenderer::UpdateScene( CVASceneState* pNewSceneS
// Bewegungsinformationen der Quellen und Hrer aktualisieren
UpdateTrajectories();
// Positionen von Hoerer in virtueller Scene aktualisieren
int iListenerID;
if (m_pNewSceneState->GetNumListeners() > 0)
{
std::vector< int > viListenerIDs;
m_pNewSceneState->GetListenerIDs(&viListenerIDs);
// Use first listener as the user of Ambisonics
iListenerID = viListenerIDs[0];
m_vUserPosVirtualScene = m_pNewSceneState->GetReceiverState(iListenerID)->GetMotionState()->GetPosition();
m_vUserViewVirtualScene = m_pNewSceneState->GetReceiverState(iListenerID)->GetMotionState()->GetView();
m_vUserUpVirtualScene = m_pNewSceneState->GetReceiverState(iListenerID)->GetMotionState()->GetUp();
VAVec3 p, v, u;
m_oParams.pCore->GetSoundReceiverRealWorldPositionOrientationVU(iListenerID, p, v, u);
m_vUserPosRealWorld.Set(float(p.x), float(p.y), float(p.z));
m_vUserViewRealWorld.Set(float(v.x), float(v.y), float(v.z));
m_vUserUpRealWorld.Set(float(u.x), float(u.y), float(u.z));
// Define reproduction system in virtual scene
m_vReproSystemVirtualPosition = m_vUserPosVirtualScene - m_vUserPosRealWorld;
m_vReproSystemVirtualView = m_vUserViewVirtualScene - m_vUserViewRealWorld;
m_vReproSystemVirtualUp = m_vUserUpVirtualScene - m_vUserUpRealWorld;
}
// Entitten der Schallpfade aktualisieren
UpdateSoundPaths();
......@@ -602,6 +629,21 @@ void CVAAmbisonicsFreeFieldAudioRenderer::ManageSoundPaths( const CVASceneState*
return;
}
double CVAAmbisonicsFreeFieldAudioRenderer::dAzimuthSource2ReproCenter( const CVAMotionState* pMotionState )
{
// VAVec3 vPosSource2ReceiverVirtualScene = pMotionState->GetPosition() - m_vUserPosVirtualScene;
return GetAzimuthOnTarget_DEG(m_vecCaveCenterPos, pMotionState->GetView(), pMotionState->GetUp(), pMotionState->GetPosition());
}
double CVAAmbisonicsFreeFieldAudioRenderer::dElevationSource2ReproCenter( const CVAMotionState* pMotionState )
{
// VAVec3 vPosSource2ReceiverVirtualScene = pMotionState->GetPosition() - m_vUserPosVirtualScene;
return GetElevationOnTarget_DEG(m_vecCaveCenterPos, pMotionState->GetView(), pMotionState->GetUp(), pMotionState->GetPosition());
}
void CVAAmbisonicsFreeFieldAudioRenderer::HandleProcessStream( ITADatasourceRealization*, const ITAStreamInfo* pStreamInfo )
{
if( ctxAudio.m_iStatus == 0 )
......@@ -728,9 +770,12 @@ void CVAAmbisonicsFreeFieldAudioRenderer::HandleProcessStream( ITADatasourceReal
pPath->pThirdOctaveFilterBank->Process( psbInput->data(), ctxAudio.m_sbTemp.data() );
pPath->pVariableDelayLineCh->Process( &( ctxAudio.m_sbTemp ), &( ctxAudio.m_sbTemp ) );
int iID = pPath->pSource->pData->iID;
CVASoundSourceState* pState = m_pCurSceneState->GetSoundSourceState(iID);
const CVAMotionState* pMotionState = pState->GetMotionState();
//std::vector<double> gains = vdRealvalued_basefunctions( (90-pPath->oRelations.dElevationL2S), pPath->oRelations.dAzimuthL2S, m_iMaxOrder);
std::vector<double> gains = SHRealvaluedBasefunctions( ( 90 - pPath->oRelations.dElevationL2S ) / 180 * 3.14159265359, pPath->oRelations.dAzimuthL2S / 180 * 3.14159265359, m_iMaxOrder );
std::vector<double> gains = SHRealvaluedBasefunctions((90 - dElevationSource2ReproCenter(pMotionState)) / 180 * 3.14159265359, dAzimuthSource2ReproCenter(pMotionState) / 180 * 3.14159265359, m_iMaxOrder);
for( int i = 0; i < m_iNumChannels; i++ )
{
......
......@@ -123,6 +123,9 @@ public:
void onStartDumpListeners( const std::string& sFilenameFormat );
void onStopDumpListeners();
double dAzimuthSource2ReproCenter( const CVAMotionState* pMotionState );
double dElevationSource2ReproCenter( const CVAMotionState* pMotionState );
protected:
//! Internal source representation
......@@ -277,6 +280,20 @@ private:
CVASceneState* m_pCurSceneState;
CVASceneState* m_pNewSceneState;
VAVec3 m_vUserPosVirtualScene; //!< Position des Hoerers in der virtuellen Umgebung
VAVec3 m_vUserPosRealWorld; //!< Position des Hrers in der CAVE (oder im Reproduktionssystem)
VAVec3 m_vReproSystemVirtualPosition; //!< Position der CAVE (oder des Reproduktionssystems) in der virtuellen Welt. Center position of loudspeaker array.
VAVec3 m_vUserViewVirtualScene;
VAVec3 m_vUserViewRealWorld;
VAVec3 m_vReproSystemVirtualView;
VAVec3 m_vUserUpVirtualScene;
VAVec3 m_vUserUpRealWorld;
VAVec3 m_vReproSystemVirtualUp;
VAVec3 m_vecCaveCenterPos; //!< Erwartete Hoererposition bzw. Punkt fr den Ambisonics das Schallfeld berechnet
int m_iCurGlobalAuralizationMode;
IVAObjectPool* m_pSoundPathPool;
......
......@@ -28,12 +28,30 @@
CVAAmbisonicsReproduction::CVAAmbisonicsReproduction( const CVAAudioReproductionInitParams& oParams )
: m_oParams( oParams )
{
CVAConfigInterpreter conf( *( m_oParams.pConfig ) );
conf.ReqInteger( "TruncationOrder", m_iAmbisonicsTruncationOrder );
double dSampleRate = m_oParams.pCore->GetCoreConfig()->oAudioDriverConfig.dSampleRate;
int iBlockLength = oParams.pCore->GetCoreConfig()->oAudioDriverConfig.iBuffersize;
std::string sReproCenterPos;
for (size_t i = 0; i < m_oParams.vpOutputs.size(); i++)
{
const CVAHardwareOutput* pTargetOutput = m_oParams.vpOutputs[i];
if (!pTargetOutput->bEnabled)
VA_WARN(this, " " + pTargetOutput->sIdentifier + " is not enabled, no sound will be played back over this output");
if (pTargetOutput == nullptr)
VA_EXCEPT2(INVALID_PARAMETER, "Unrecognized output '" + pTargetOutput->sIdentifier + "' for Ambisonics reproduction");
m_vpTargetOutputs.push_back(pTargetOutput);
}
if (m_vpTargetOutputs.size()<1)
VA_EXCEPT2(INVALID_PARAMETER, "No output found for Ambisonics reproduction!");
// Configurable parameter from Core.ini
CVAConfigInterpreter conf(*(m_oParams.pConfig));
conf.ReqInteger( "TruncationOrder", m_iAmbisonicsTruncationOrder );
conf.OptBool("UseRemax", m_bUseRemax, true);
conf.OptString("ReproductionCenterPos", sReproCenterPos, "AUTO");
// Decoder input (B-Format with implicit channels)
m_pDecoderMatrixPatchBay = new ITAStreamPatchbay( dSampleRate, iBlockLength );
......@@ -46,15 +64,11 @@ CVAAmbisonicsReproduction::CVAAmbisonicsReproduction( const CVAAudioReproduction
m_vpTargetOutputs.push_back( pTargetOutput );
}
std::string sReproCenterPos;
conf.OptString( "ReproductionCenterPos", sReproCenterPos, "AUTO" );
if( sReproCenterPos == "AUTO" )
{
//Mittelpunkt aus der ersten LS Configuration berechnen
m_vpTargetOutputs[ 0 ];
m_v3ReproductionCenterPos.Set( 0, 0, 0 );
// VA_EXCEPT2(NOT_IMPLEMENTED, "Automatic reproduction center calculation not implemented, please provide 3-dim vector with key 'ReproductionCenterPos' in reproduction configuration");
VA_WARN( this, "Reproduction center set to 0,0,0" );
GetCalculatedReproductionCenterPos(m_v3ReproductionCenterPos);
VA_WARN(this, "Ambisonics reproduction center set to " + std::to_string(m_v3ReproductionCenterPos.x) + ", " + std::to_string(m_v3ReproductionCenterPos.y) + ", " + std::to_string(m_v3ReproductionCenterPos.z));
}
else
{
......@@ -72,6 +86,25 @@ CVAAmbisonicsReproduction::~CVAAmbisonicsReproduction()
m_pDecoderMatrixPatchBay = NULL;
}
void CVAAmbisonicsReproduction::GetCalculatedReproductionCenterPos(VAVec3 &vec3CalcPos)
{
int iNumberDevices=0;
VAVec3 vec3Old;
vec3CalcPos.Set(0, 0, 0);
vec3Old.Set(0,0,0);
for (int idxTO = 0; idxTO < m_vpTargetOutputs.size(); idxTO++)
{
for (int idxDev = 0; idxDev < m_vpTargetOutputs[idxTO]->vpDevices.size(); idxDev++)
{
iNumberDevices++;
vec3Old = vec3CalcPos;
vec3CalcPos = vec3Old + m_vpTargetOutputs[idxTO]->vpDevices[idxDev]->vPos;
}
}
vec3Old = vec3CalcPos;
vec3CalcPos.Set(vec3Old.x / iNumberDevices, vec3Old.y / iNumberDevices, vec3Old.z / iNumberDevices );
}
void CVAAmbisonicsReproduction::SetInputDatasource( ITADatasource* p )
{
CVAConfigInterpreter conf( *( m_oParams.pConfig ) );
......@@ -91,12 +124,8 @@ void CVAAmbisonicsReproduction::SetInputDatasource( ITADatasource* p )
Eigen::MatrixXd matY( m_pOutput->vpDevices.size(), ( m_iAmbisonicsTruncationOrder + 1 )*( m_iAmbisonicsTruncationOrder + 1 ) );
double dAzimuth, dElevation;
// TODO Center Position aus Config?
VAVec3 va3Origin( 0, 0, 0 );
VAVec3 va3View( 0, 0, -1 );
VAVec3 va3Up( 0, 1, 0 );
std::vector<double> vdYParts;
// Gather matrix with loudspeaker position as (N_LS x 3);
......@@ -104,8 +133,8 @@ void CVAAmbisonicsReproduction::SetInputDatasource( ITADatasource* p )
{
const CVAHardwareDevice* pDevice = m_pOutput->vpDevices[ k ];
dAzimuth = GetAzimuthOnTarget_DEG( va3Origin, va3View, va3Up, pDevice->vPos ) / 180 * ITAConstants::PI_D;
dElevation = GetElevationOnTarget_DEG( va3Origin, va3View, va3Up, pDevice->vPos ) / 180 * ITAConstants::PI_D;
dAzimuth = GetAzimuthOnTarget_DEG(m_v3ReproductionCenterPos, va3View, va3Up, pDevice->vPos) / 180 * ITAConstants::PI_D;
dElevation = GetElevationOnTarget_DEG(m_v3ReproductionCenterPos, va3View, va3Up, pDevice->vPos) / 180 * ITAConstants::PI_D;
vdYParts = SHRealvaluedBasefunctions( ITAConstants::PI_D / 2 - dElevation, dAzimuth, m_iAmbisonicsTruncationOrder );
for( int l = 0; l < vdYParts.size(); l++ )
......@@ -130,16 +159,12 @@ void CVAAmbisonicsReproduction::SetInputDatasource( ITADatasource* p )
int iCurrentOrder = ( int ) floor( sqrt( j ) );
for( size_t k = 0; k < pTargetOutput->GetPhysicalOutputChannels().size(); k++ )
{
const VAVec3& v3LSPos( pTargetOutput->vpDevices[ k ]->vPos );
VAVec3 v3ViewDummy, v3UpDummy;
double dAzimuth = GetAzimuthOnTarget_DEG( m_v3ReproductionCenterPos, v3ViewDummy, v3UpDummy, v3LSPos );
double dElevation = GetAzimuthOnTarget_DEG( m_v3ReproductionCenterPos, v3ViewDummy, v3UpDummy, v3LSPos );
//const VAVec3& v3LSPos( pTargetOutput->vpDevices[ k ]->vPos );
// todo calculate gain @mko
if( j == 0 && k == 0 )
VA_WARN( "AmbisonicsReproduction", "No dynamic HOA matrix calculation based on LS configuration available, using pre-calculated matrix for ITA VR lab" );
double dGain = matYinv( i, j )*vdRemaxWeights[ iCurrentOrder ];
double dGain = matYinv( j, k )*vdRemaxWeights[ iCurrentOrder ];
m_pDecoderMatrixPatchBay->ConnectChannels( 0, int( j ), 0, int( k ), dGain );
}
}
......
......@@ -41,12 +41,11 @@ public:
int GetNumInputChannels() const;
int GetAmbisonicsTruncationOrder() const;
void UpdateScene( CVASceneState* pNewState );
/*bool Inverse(Eigen::MatrixXd vmIn, Eigen::MatrixXd vmOut);
bool SwapLine(Eigen::MatrixXd vmIn, int, int);*/
Eigen::MatrixXd CalculatePseudoInverse(Eigen::MatrixXd);
private:
void GetCalculatedReproductionCenterPos(VAVec3 &vec3CalcPos);
bool m_bUseRemax;
std::string m_sName;
CVAAudioReproductionInitParams m_oParams;
int m_iAmbisonicsTruncationOrder;
......
......@@ -346,7 +346,10 @@ void CVAContainerState::SetObject( const int iID, CVASceneStateBase* pObject )
// Referenz auf altem Objekt entfernen und bei neuem Objekt hinzufgen
pObject->AddReference();
if( i->second )
{
assert( i->second->GetNumReferences() > 0 );
i->second->RemoveReference();
}
i->second = pObject;
return;
......
......@@ -20,14 +20,10 @@
#include "VAMotionState.h"
#include <cassert>
#include <cmath>
void CVAReceiverState::Initialize( double dModificationTime )
{
// Nullposition
data.pMotionState = GetManager()->RequestMotionState();
data.pMotionState->Initialize( dModificationTime );
data.pMotionState = nullptr; // undefined position
data.iAuraMode = IVAInterface::VA_AURAMODE_ALL;
data.iDirectivityID = -1;
data.pDirectivity = nullptr;
......@@ -42,7 +38,11 @@ void CVAReceiverState::Copy( const CVAReceiverState* pSrc, double dModificationT
assert( pSrc->IsFixed() );
// Abhngige Objekte des Vorlagenobjektes autonom referenzieren
pSrc->data.pMotionState->AddReference();
if( pSrc->data.pMotionState )
{
assert( pSrc->data.pMotionState->GetNumReferences() > 0 );
pSrc->data.pMotionState->AddReference();
}
// Daten kopieren
data = pSrc->data;
......@@ -50,23 +50,32 @@ void CVAReceiverState::Copy( const CVAReceiverState* pSrc, double dModificationT
SetModificationTime( dModificationTime );
}
void CVAReceiverState::Fix() {
void CVAReceiverState::Fix()
{
// Alle enthaltenen Objekte fixieren
if( data.pMotionState ) data.pMotionState->Fix();
if( data.pMotionState )
data.pMotionState->Fix();
// Selbst fixieren
CVASceneStateBase::Fix();
}
void CVAReceiverState::PreRelease() {
void CVAReceiverState::PreRelease()
{
// Alle Referenzen auf abhngige Objekte entfernen
if( data.pMotionState ) data.pMotionState->RemoveReference();
if( data.pMotionState )
{
assert( data.pMotionState->GetNumReferences() > 0 );
data.pMotionState->RemoveReference();
data.pMotionState = NULL;
}
// Funktion der Oberklasse aufrufen
CVASceneStateBase::PreRelease();
}
const CVAMotionState* CVAReceiverState::GetMotionState() const {
const CVAMotionState* CVAReceiverState::GetMotionState() const
{
return data.pMotionState;
}
......@@ -88,19 +97,28 @@ CVAMotionState* CVAReceiverState::AlterMotionState()
// Falls der Zustand finalisiert => Zustand aus der Basiskonfig => Autonomen Zustand erzeugen
// Falls der Zustand nicht finalisiert => Bereits erzeugter autonomen Zustand => Diesen zurckgeben
if( data.pMotionState->IsFixed() )
if( !data.pMotionState )
{
// Autonomen Zustand ableiten
CVAMotionState* pNewState = GetManager()->RequestMotionState();
// nderungszeit des bergeordneten Szenezustands bernehmen
double dCreationTime = GetModificationTime();
pNewState->Copy( data.pMotionState, dCreationTime );
data.pMotionState->RemoveReference();
data.pMotionState = pNewState;
data.pMotionState = GetManager()->RequestMotionState();
data.pMotionState->Initialize( GetModificationTime() );
}
else
{
if( data.pMotionState->IsFixed() )
{
// Autonomen Zustand ableiten
CVAMotionState* pNewState = GetManager()->RequestMotionState();
// nderungszeit des bergeordneten Szenezustands bernehmen
double dCreationTime = GetModificationTime();
pNewState->Copy( data.pMotionState, dCreationTime );
data.pMotionState->RemoveReference();
data.pMotionState = pNewState;
}
}
VA_TRACE( "SoundReceiverState", "Requested new motion state" );
return data.pMotionState;
}
......@@ -201,5 +219,4 @@ double CVAReceiverState::CVAAnthropometricParameter::GetHeadDepthParameterFromLU
b = 0;
return ( m_vvdHeadDepthParameterLUT[ a ][ b ] );
}
......@@ -218,6 +218,7 @@ CVASoundSourceState* CVASceneManager::RequestSoundSourceState()
{
CVASoundSourceState* pState = dynamic_cast< CVASoundSourceState* >( m_pPoolSourceStates->RequestObject() );
pState->SetManager( this );
assert( pState->GetNumReferences() == 1 );
return pState;
}
......
......@@ -142,7 +142,8 @@ CVASoundSourceState* CVASceneState::AlterSoundSourceState( const int iSourceID )
assert( pList );
// Zustand der Quelle fr Modifkation ableiten
if( pCurState->IsFixed() ) {
if( pCurState->IsFixed() )
{
// Autonomen Zustand ableiten
CVASoundSourceState* pNewState = GetManager()->RequestSoundSourceState();
......
......@@ -15,13 +15,10 @@
#include <VA.h>
#include "../Directivities/VADirectivity.h"
#include "../VALog.h"
#include "VASceneManager.h"
#include "VAMotionState.h"
#include <ITANumericUtils.h>
#include <cassert>
void CVASoundSourceState::Initialize( double dModificationTime )
......@@ -29,8 +26,8 @@ void CVASoundSourceState::Initialize( double dModificationTime )
data.pMotionState = nullptr; // undefined position
data.dSoundPower = g_dSoundPower_94dB_SPL_1m;
data.iAuraMode = IVAInterface::VA_AURAMODE_ALL;
data.iDirID = -1;
data.pDirData = nullptr;
data.iDirectivityID = -1;
data.pDirectivity = nullptr;
SetModificationTime( dModificationTime );
}
......@@ -43,7 +40,10 @@ void CVASoundSourceState::Copy( const CVASoundSourceState* pSrc, double dModific
// Abhngige Objekte des Vorlagenobjektes autonom referenzieren
if( pSrc->data.pMotionState )
{
assert( pSrc->data.pMotionState->GetNumReferences() > 0 );
pSrc->data.pMotionState->AddReference();
}
// Daten kopieren
data = pSrc->data;
......@@ -65,7 +65,11 @@ void CVASoundSourceState::PreRelease()
{
// Alle Referenzen auf abhngige Objekte entfernen
if( data.pMotionState )
{
assert( data.pMotionState->GetNumReferences() > 0 );
data.pMotionState->RemoveReference();
data.pMotionState = NULL;
}
// Funktion der Oberklasse aufrufen
CVASceneStateBase::PreRelease();
......@@ -128,25 +132,25 @@ double CVASoundSourceState::GetSoundPower() const
int CVASoundSourceState::GetDirectivityID() const
{
return data.iDirID;
return data.iDirectivityID;
}
const IVADirectivity* CVASoundSourceState::GetDirectivityData() const
{
return data.pDirData;
return data.pDirectivity;
}
void CVASoundSourceState::SetDirectivityID( int iDirectivityID )
{
assert( !IsFixed() );
data.iDirID = iDirectivityID;
data.iDirectivityID = iDirectivityID;
VA_VERBOSE( "SoundSourceState", "Directivity identifier changed" );
}
void CVASoundSourceState::SetDirectivityData( const IVADirectivity* pDirData )
{
assert( !IsFixed() );
data.pDirData = pDirData;
data.pDirectivity = pDirData;
VA_VERBOSE( "SoundSourceState", "Directivity dataset changed" );
}
......
......@@ -86,8 +86,8 @@ private:
CVAMotionState* pMotionState; //!< Motion state pointer
double dSoundPower; //!< Sound power [W]
int iAuraMode; //!< Current auralization mode
int iDirID; //!< Directivity identifier
const IVADirectivity* pDirData; //!< Pointer to directivity data set
int iDirectivityID; //!< Directivity identifier
const IVADirectivity* pDirectivity; //!< Pointer to directivity data set
CVAStruct oParams; //!< Sound source parameters for special implementations
} data;
......
......@@ -2034,27 +2034,22 @@ int CVACoreImpl::DeleteSoundSource( const int iSoundSourceID )
VA_TRY
{
m_pNewSceneState->RemoveSoundSource( iSoundSourceID );
int iResult = 0;
if( iResult == 0 )
{
// Ereignis generieren, wenn erfolgreich
CVAEvent ev;
ev.iEventType = CVAEvent::SOUND_SOURCE_DELETED;
ev.pSender = this;
ev.iObjectID = iSoundSourceID;
m_pEventManager->EnqueueEvent( ev );
}
// Ereignis generieren, wenn erfolgreich
CVAEvent ev;
ev.iEventType = CVAEvent::SOUND_SOURCE_DELETED;
ev.pSender = this;
ev.iObjectID = iSoundSourceID;
m_pEventManager->EnqueueEvent( ev );
if( !bSync )
UnlockUpdate();
VA_INFO( "Core", "Deleted sound source " << iSoundSourceID );
return iResult;
return 0;
}
VA_FINALLY
VA_FINALLY
{
if( !bSync )
UnlockUpdate();
......@@ -3174,7 +3169,7 @@ void CVACoreImpl::SetSoundReceiverDirectivity( const int iID, const int iDirecti
if( !bSync )
UnlockUpdate();
VA_INFO( "Core", "Linked sound receiver " + std::to_string( long( iID ) ) + " with HRIR dataset " + std::to_string( long( iDirectivityID ) ) );
VA_INFO( "Core", "Linked sound receiver " + std::to_string( long( iID ) ) + " with receiver directivity dataset " + std::to_string( long( iDirectivityID ) ) );
}
VA_RETHROW;
......
......@@ -7,7 +7,7 @@
using namespace std;
IVAInterface* core = NULL;
IVAInterface* va = NULL;
class EventBasedGenericRenderingController : public IVAEventHandler
{
......@@ -33,7 +33,7 @@ public:
oArgs[ "SourceID" ] = 1;
try
{
oReturn = core->CallModule( "GenericPath:MyGenericRenderer", oArgs );
oReturn = va->CallModule( "GenericPath:MyGenericRenderer", oArgs );
}
catch( CVAException& e )
{
......@@ -57,10 +57,76 @@ public:
};
CoreEventDumper dumper;
void bugfix_scene_pool_clearance_issue();
void TestModuleInterface();
void AudioRenderers();
void AudioReproductions();
void CreateHRIRs();
void CreateAudioSignals();
void CreateScene();
void ConnectSignals();
void TestSignalAndSourceConnections();
int main( int, char** )
{
try
{
va = VACore::CreateCoreInstance( "../conf/VACore.ini" );
//va = VACore::CreateCoreInstance( GetCoreConfig() );
// Attach (register) event handler
//va->AttachEventHandler( &dumper );
va->AttachEventHandler( &rendering_controller );
CVAVersionInfo ver;
va->GetVersionInfo( &ver );
cout << ver.ToString() << endl;
va->Initialize();
va->AddSearchPath( "../data" );
/*
TestModuleInterface();
AudioRenderers();
AudioReproductions();
CreateHRIRs();
CreateAudioSignals();
CreateScene();
//ConnectSignals();
TestSignalAndSourceConnections();
*/
bugfix_scene_pool_clearance_issue();