Commit a206476d authored by Dipl.-Ing. Jonas Stienen's avatar Dipl.-Ing. Jonas Stienen

Finalizing merge for offline simulation feature

parents 2e7826d0 435ff750
...@@ -57,6 +57,10 @@ vista_use_package( Eigen REQUIRED ) ...@@ -57,6 +57,10 @@ vista_use_package( Eigen REQUIRED )
# Optional packages # Optional packages
vista_find_package( RavenNet QUIET ) vista_find_package( RavenNet QUIET )
if( ITA_VA_CORE_LIBS_FFT_USES_FFTW3 )
set( ITA_VA_COPYING_GNU_GPL ON PARENT_SCOPE )
endif( )
if( NOT DEFINED ITA_VACORE_VERSION_MAJOR ) if( NOT DEFINED ITA_VACORE_VERSION_MAJOR )
set( ITA_VACORE_VERSION_MAJOR "v2018" CACHE STRING "VACore version major (usually 'v' and year)" ) set( ITA_VACORE_VERSION_MAJOR "v2018" CACHE STRING "VACore version major (usually 'v' and year)" )
endif( ) endif( )
...@@ -116,8 +120,8 @@ endif( ) ...@@ -116,8 +120,8 @@ endif( )
if( NOT DEFINED ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO ) if( NOT DEFINED ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO )
set( ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO ON CACHE BOOL "Build VACore with Portaudio audio backend support" ) set( ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO ON CACHE BOOL "Build VACore with Portaudio audio backend support" )
endif( ) endif( )
if( NOT DEFINED ITA_VACORE_WITH_AUDIO_BACKEND_DUMMY ) if( NOT DEFINED ITA_VACORE_WITH_AUDIO_BACKEND_VIRTUAL )
set( ITA_VACORE_WITH_AUDIO_BACKEND_DUMMY OFF CACHE BOOL "Build VACore with dummy audio backend support" ) set( ITA_VACORE_WITH_AUDIO_BACKEND_VIRTUAL OFF CACHE BOOL "Build VACore with virtual audio backend support (for offline simulations)" )
endif( ) endif( )
...@@ -254,8 +258,8 @@ endif( ) ...@@ -254,8 +258,8 @@ endif( )
if( ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO ) if( ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO )
add_definitions( -DVACORE_WITH_AUDIO_BACKEND_PORTAUDIO ) add_definitions( -DVACORE_WITH_AUDIO_BACKEND_PORTAUDIO )
endif( ) endif( )
if( ITA_VACORE_WITH_AUDIO_BACKEND_DUMMY ) if( ITA_VACORE_WITH_AUDIO_BACKEND_VIRTUAL )
add_definitions( -DVACORE_WITH_AUDIO_BACKEND_DUMMY ) add_definitions( -DVACORE_WITH_AUDIO_BACKEND_VIRTUAL )
endif( ) endif( )
# Rendering definitions # Rendering definitions
......
...@@ -36,9 +36,7 @@ ...@@ -36,9 +36,7 @@
#include <sstream> #include <sstream>
CVAAudioSignalSourceManager::CVAAudioSignalSourceManager( CVACoreImpl* pParentCore, CVAAudioSignalSourceManager::CVAAudioSignalSourceManager( CVACoreImpl* pParentCore, const CVAAudioDriverConfig& oAudioDriverConfig, ITADatasource* pDeviceInputSource )
const CVAAudioDriverConfig& oAudioDriverConfig,
ITADatasource* pDeviceInputSource )
: m_pParentCore( pParentCore ), : m_pParentCore( pParentCore ),
m_dSamplerate( oAudioDriverConfig.dSampleRate ), m_dSamplerate( oAudioDriverConfig.dSampleRate ),
m_iBlocklength( oAudioDriverConfig.iBuffersize ), m_iBlocklength( oAudioDriverConfig.iBuffersize ),
......
...@@ -35,8 +35,8 @@ void CVAAudioDriverConfig::Init( const CVAStruct& oArgs ) ...@@ -35,8 +35,8 @@ void CVAAudioDriverConfig::Init( const CVAStruct& oArgs )
CVAConfigInterpreter conf( oArgs ); CVAConfigInterpreter conf( oArgs );
conf.OptNonEmptyString( "Driver", sDriver ); conf.OptNonEmptyString( "Driver", sDriver );
conf.OptString( "Device", sDevice, "AUTO" ); conf.OptString( "Device", sDevice, "AUTO" );
conf.OptNumber( "Samplerate", dSampleRate, DEFAULT_SAMPLERATE ); conf.OptNumber( "SampleRate", dSampleRate, DEFAULT_SAMPLERATE );
conf.OptInteger( "Buffersize", iBuffersize, AUTO, &lits ); conf.OptInteger( "BufferSize", iBuffersize, AUTO, &lits );
conf.OptInteger( "InputChannels", iInputChannels, AUTO, &lits ); conf.OptInteger( "InputChannels", iInputChannels, AUTO, &lits );
conf.OptInteger( "OutputChannels", iOutputChannels, AUTO, &lits ); conf.OptInteger( "OutputChannels", iOutputChannels, AUTO, &lits );
...@@ -48,9 +48,8 @@ void CVAAudioDriverConfig::Init( const CVAStruct& oArgs ) ...@@ -48,9 +48,8 @@ void CVAAudioDriverConfig::Init( const CVAStruct& oArgs )
VA_EXCEPT1( "Invalid buffersize specified" ); VA_EXCEPT1( "Invalid buffersize specified" );
if( ( iInputChannels < 0 ) && ( iInputChannels != AUTO ) ) if( ( iInputChannels < 0 ) && ( iInputChannels != AUTO ) )
VA_EXCEPT1( "Invalid number of input channels specified" ); VA_EXCEPT1( "Invalid number of input channels specified (autodetect = -1 or AUTO)" );
// @todo: really?! I don't see a point why single channel output shouldn't be supported. if( ( iOutputChannels < 1 ) && ( iOutputChannels != AUTO ) )
if( ( iOutputChannels < 2 ) && ( iOutputChannels != AUTO ) ) VA_EXCEPT1( "Invalid number of output channels specified (at least one required, if not using autodetect ... -1 or AUTO)" );
VA_EXCEPT1( "Invalid number of output channels specified (at least two)" );
} }
#include "VADummyAudioDriverBackend.h" #include "VAVirtualAudioDriverBackend.h"
#include "../../Utils/VADebug.h" #include "../../Utils/VADebug.h"
#include <VAException.h>
#include <ITAException.h> #include <ITAException.h>
#include <ITANumericUtils.h> #include <ITANumericUtils.h>
...@@ -8,8 +9,8 @@ ...@@ -8,8 +9,8 @@
#include <cassert> #include <cassert>
CVADummyAudioDriverBackend::CVADummyAudioDriverBackend( const CVAAudioDriverConfig* pConfig ) CVAVirtualAudioDriverBackend::CVAVirtualAudioDriverBackend( const CVAAudioDriverConfig* pConfig )
: CVAObject( "VirtualAudioDriver" ) : CVAObject( "VirtualAudioDevice" )
, m_oConfig( *pConfig ) , m_oConfig( *pConfig )
, m_pDataSource( NULL ) , m_pDataSource( NULL )
, m_bStarted( false ) , m_bStarted( false )
...@@ -19,72 +20,77 @@ CVADummyAudioDriverBackend::CVADummyAudioDriverBackend( const CVAAudioDriverConf ...@@ -19,72 +20,77 @@ CVADummyAudioDriverBackend::CVADummyAudioDriverBackend( const CVAAudioDriverConf
m_oOutputStreamProps.uiBlocklength = ( unsigned int ) m_oConfig.iBuffersize; m_oOutputStreamProps.uiBlocklength = ( unsigned int ) m_oConfig.iBuffersize;
} }
CVADummyAudioDriverBackend::~CVADummyAudioDriverBackend() CVAVirtualAudioDriverBackend::~CVAVirtualAudioDriverBackend()
{ {
} }
std::string CVADummyAudioDriverBackend::getDriverName() const std::string CVAVirtualAudioDriverBackend::getDriverName() const
{ {
return "Dummy"; return "Virtual";
} }
std::string CVADummyAudioDriverBackend::getDeviceName() const std::string CVAVirtualAudioDriverBackend::getDeviceName() const
{ {
return "Dummy"; return "Trigger";
} }
int CVADummyAudioDriverBackend::getNumberOfInputs() const int CVAVirtualAudioDriverBackend::getNumberOfInputs() const
{ {
return m_oConfig.iInputChannels; return m_oConfig.iInputChannels;
} }
const ITAStreamProperties* CVADummyAudioDriverBackend::getOutputStreamProperties() const const ITAStreamProperties* CVAVirtualAudioDriverBackend::getOutputStreamProperties() const
{ {
return &m_oOutputStreamProps; return &m_oOutputStreamProps;
} }
void CVADummyAudioDriverBackend::setOutputStreamDatasource( ITADatasource* pDatasource ) void CVAVirtualAudioDriverBackend::setOutputStreamDatasource( ITADatasource* pDatasource )
{ {
m_pDataSource = pDatasource; m_pDataSource = pDatasource;
} }
ITADatasource* CVADummyAudioDriverBackend::getInputStreamDatasource() const ITADatasource* CVAVirtualAudioDriverBackend::getInputStreamDatasource() const
{ {
return nullptr; return nullptr;
} }
void CVADummyAudioDriverBackend::initialize() void CVAVirtualAudioDriverBackend::initialize()
{ {
} }
void CVADummyAudioDriverBackend::finalize() void CVAVirtualAudioDriverBackend::finalize()
{ {
} }
void CVADummyAudioDriverBackend::startStreaming() void CVAVirtualAudioDriverBackend::startStreaming()
{ {
m_bStarted = true; m_bStarted = true;
} }
bool CVADummyAudioDriverBackend::isStreaming() bool CVAVirtualAudioDriverBackend::isStreaming()
{ {
return m_bStarted; return m_bStarted;
} }
void CVADummyAudioDriverBackend::stopStreaming() void CVAVirtualAudioDriverBackend::stopStreaming()
{ {
m_bStarted = false; m_bStarted = false;
} }
CVAStruct CVADummyAudioDriverBackend::CallObject( const CVAStruct& oArgs ) CVAStruct CVAVirtualAudioDriverBackend::CallObject( const CVAStruct& oArgs )
{ {
CVAStruct oReturn; CVAStruct oReturn;
if( oArgs.HasKey( "trigger" ) && m_pDataSource ) if( oArgs.HasKey( "trigger" ) && m_pDataSource )
{
// Trigger block pointer getter, then increment
for( int n = 0; n < (int) m_pDataSource->GetNumberOfChannels(); n++ )
m_pDataSource->GetBlockPointer( n, &m_oStreamInfo );
m_pDataSource->IncrementBlockPointer(); m_pDataSource->IncrementBlockPointer();
}
if( oArgs.HasKey( "help" ) || oArgs.HasKey( "info" ) ) if( oArgs.HasKey( "help" ) || oArgs.HasKey( "info" ) )
{ {
...@@ -93,3 +99,48 @@ CVAStruct CVADummyAudioDriverBackend::CallObject( const CVAStruct& oArgs ) ...@@ -93,3 +99,48 @@ CVAStruct CVADummyAudioDriverBackend::CallObject( const CVAStruct& oArgs )
return oReturn; return oReturn;
} }
CVAVirtualAudioDriverBackend::ManualClock::ManualClock()
: CVAObject( "ManualClock" )
, m_dTime( 0.0f )
{
}
CVAVirtualAudioDriverBackend::ManualClock::~ManualClock()
{
}
double CVAVirtualAudioDriverBackend::ManualClock::getTime()
{
m_csTime.enter();
double dTime = m_dTime;
m_csTime.leave();
return dTime;
}
void CVAVirtualAudioDriverBackend::ManualClock::SetTime( double dNow )
{
m_csTime.enter();
assert( m_dTime < dNow );
m_dTime = dNow;
m_csTime.leave();
}
CVAStruct CVAVirtualAudioDriverBackend::ManualClock::CallObject( const CVAStruct& oArgs )
{
if( oArgs.HasKey( "info" ) || oArgs.HasKey( "help" ) )
{
CVAStruct oRet;
oRet[ "usage" ] = "Set the manual clock with the key 'time' and a floating point value. Time has to be strict monotonously increasing";
return oRet;
}
else if( oArgs.HasKey( "time" ) )
{
SetTime( oArgs[ "time" ] );
return CVAStruct();
}
else
{
VA_EXCEPT2( INVALID_PARAMETER, "Could npt understand call, 'time' key missing. use 'help' for more information" );
}
}
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
* -------------------------------------------------------------------------------------------- * --------------------------------------------------------------------------------------------
*/ */
#ifndef IW_VACORE_DUMMY_AUDIO_DRIVER_BACKEND #ifndef IW_VACORE_VIRTUAL_AUDIO_DRIVER_BACKEND
#define IW_VACORE_DUMMY_AUDIO_DRIVER_BACKEND #define IW_VACORE_VIRTUAL_AUDIO_DRIVER_BACKEND
#include "VAAudioDriverBackend.h" #include "VAAudioDriverBackend.h"
#include "VAAudioDriverConfig.h" #include "VAAudioDriverConfig.h"
...@@ -21,14 +21,17 @@ ...@@ -21,14 +21,17 @@
#include <ITAStreamProperties.h> #include <ITAStreamProperties.h>
#include <ITADatasource.h> #include <ITADatasource.h>
#include <ITACriticalSection.h>
#include <ITAClock.h>
#include <ITAStreamInfo.h>
#pragma warning( disable : 4512 ) // yep no copy constructor #pragma warning( disable : 4512 ) // yep no copy constructor
class CVADummyAudioDriverBackend : public IVAAudioDriverBackend, public CVAObject class CVAVirtualAudioDriverBackend : public IVAAudioDriverBackend, public CVAObject
{ {
public: public:
CVADummyAudioDriverBackend( const CVAAudioDriverConfig* pConfig ); CVAVirtualAudioDriverBackend( const CVAAudioDriverConfig* pConfig );
~CVADummyAudioDriverBackend(); ~CVAVirtualAudioDriverBackend();
std::string getDriverName() const; std::string getDriverName() const;
std::string getDeviceName() const; std::string getDeviceName() const;
...@@ -45,11 +48,28 @@ public: ...@@ -45,11 +48,28 @@ public:
CVAStruct CallObject( const CVAStruct& oArgs ); CVAStruct CallObject( const CVAStruct& oArgs );
class ManualClock : public ITAClock, public CVAObject
{
public:
ManualClock();
~ManualClock();
inline std::string getName() const { return "ManualClock"; };
inline double getResolution() const { return -1.0f; };
double getFrequency() const { return -1.0f; };
inline double getTime();
inline void SetTime( const double dManualNow );
CVAStruct CallObject( const CVAStruct& oArgs );
private:
ITACriticalSection m_csTime;
double m_dTime;
};
private: private:
const CVAAudioDriverConfig m_oConfig; const CVAAudioDriverConfig m_oConfig;
ITAStreamProperties m_oOutputStreamProps; ITAStreamProperties m_oOutputStreamProps;
ITAStreamInfo m_oStreamInfo;
ITADatasource* m_pDataSource; ITADatasource* m_pDataSource;
bool m_bStarted; bool m_bStarted;
}; };
#endif // IW_VACORE_DUMMY_AUDIO_DRIVER_BACKEND #endif // IW_VACORE_VIRTUAL_AUDIO_DRIVER_BACKEND
...@@ -17,8 +17,8 @@ endif( ) ...@@ -17,8 +17,8 @@ endif( )
if( ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO ) if( ITA_VACORE_WITH_AUDIO_BACKEND_PORTAUDIO )
list( APPEND DirFiles VAPortaudioBackend.cpp VAPortaudioBackend.h ) list( APPEND DirFiles VAPortaudioBackend.cpp VAPortaudioBackend.h )
endif( ) endif( )
if( ITA_VACORE_WITH_AUDIO_BACKEND_DUMMY ) if( ITA_VACORE_WITH_AUDIO_BACKEND_VIRTUAL )
list( APPEND DirFiles VADummyAudioDriverBackend.cpp VADummyAudioDriverBackend.h ) list( APPEND DirFiles VAVirtualAudioDriverBackend.cpp VAVirtualAudioDriverBackend.h )
endif( ) endif( )
set( DirFiles_SourceGroup "${RelativeSourceGroup}" ) set( DirFiles_SourceGroup "${RelativeSourceGroup}" )
......
...@@ -334,7 +334,7 @@ void CVAAmbisonicsFreeFieldAudioRenderer::Reset() ...@@ -334,7 +334,7 @@ void CVAAmbisonicsFreeFieldAudioRenderer::Reset()
VA_VERBOSE( "AmbisonicsFreeFieldAudioRenderer", "Received reset call, indicating reset now" ); VA_VERBOSE( "AmbisonicsFreeFieldAudioRenderer", "Received reset call, indicating reset now" );
ctxAudio.m_iResetFlag = 1; // Request reset ctxAudio.m_iResetFlag = 1; // Request reset
if( ctxAudio.m_iStatus == 0 ) if( ctxAudio.m_iStatus == 0 || m_oParams.bOfflineRendering )
{ {
VA_VERBOSE( "AmbisonicsFreeFieldAudioRenderer", "Was not streaming, will reset manually" ); VA_VERBOSE( "AmbisonicsFreeFieldAudioRenderer", "Was not streaming, will reset manually" );
// if no streaming active, reset manually // if no streaming active, reset manually
......
...@@ -410,7 +410,7 @@ void CVABinauralAirTrafficNoiseAudioRenderer::Reset() ...@@ -410,7 +410,7 @@ void CVABinauralAirTrafficNoiseAudioRenderer::Reset()
{ {
ctxAudio.m_iResetFlag = 1; // Request reset ctxAudio.m_iResetFlag = 1; // Request reset
if( ctxAudio.m_iStatus == 0 ) if( ctxAudio.m_iStatus == 0 || m_oParams.bOfflineRendering )
{ {
// if no streaming active, reset manually // if no streaming active, reset manually
//SyncInternalData(); //SyncInternalData();
......
...@@ -491,7 +491,7 @@ void CVABinauralArtificialReverbAudioRenderer::Reset() ...@@ -491,7 +491,7 @@ void CVABinauralArtificialReverbAudioRenderer::Reset()
{ {
ctxAudio.m_iResetFlag = 1; // Request reset ctxAudio.m_iResetFlag = 1; // Request reset
if( ctxAudio.m_iStatus == 0 ) if( ctxAudio.m_iStatus == 0 || m_oParams.bOfflineRendering )
{ {
// if no streaming active, reset manually // if no streaming active, reset manually
ResetInternalData(); ResetInternalData();
......
...@@ -188,19 +188,20 @@ private: ...@@ -188,19 +188,20 @@ private:
friend class CVABFFSoundPathFactory; friend class CVABFFSoundPathFactory;
}; };
class CVABFFSoundPathFactory : public IVAPoolObjectFactory { class CVABFFSoundPathFactory : public IVAPoolObjectFactory
{
public: public:
CVABFFSoundPathFactory( double dSamplerate, int iBlocklength, int iHRIRFilterLength, int iDirFilterLength ) CVABFFSoundPathFactory( double dSamplerate, int iBlocklength, int iHRIRFilterLength, int iDirFilterLength )
: m_dSamplerate( dSamplerate ) : m_dSamplerate( dSamplerate )
, m_iBlocklength( iBlocklength ) , m_iBlocklength( iBlocklength )
, m_iHRIRFilterLength( iHRIRFilterLength ) , m_iHRIRFilterLength( iHRIRFilterLength )
, m_iDirFilterLength( iDirFilterLength ) , m_iDirFilterLength( iDirFilterLength )
{} {};
CVAPoolObject* CreatePoolObject() CVAPoolObject* CreatePoolObject()
{ {
return new CVABFFSoundPath( m_dSamplerate, m_iBlocklength, m_iHRIRFilterLength, m_iDirFilterLength ); return new CVABFFSoundPath( m_dSamplerate, m_iBlocklength, m_iHRIRFilterLength, m_iDirFilterLength );
} };
private: private:
double m_dSamplerate; //!< Abtastrate double m_dSamplerate; //!< Abtastrate
...@@ -362,7 +363,7 @@ void CVABinauralFreeFieldAudioRenderer::Reset() ...@@ -362,7 +363,7 @@ void CVABinauralFreeFieldAudioRenderer::Reset()
VA_VERBOSE( "BinauralFreeFieldAudioRenderer", "Received reset call, indicating reset now" ); VA_VERBOSE( "BinauralFreeFieldAudioRenderer", "Received reset call, indicating reset now" );
ctxAudio.m_iResetFlag = 1; // Request reset ctxAudio.m_iResetFlag = 1; // Request reset
if( ctxAudio.m_iStatus == 0 ) if( ctxAudio.m_iStatus == 0 || m_oParams.bOfflineRendering )
{ {
VA_VERBOSE( "BinauralFreeFieldAudioRenderer", "Was not streaming, will reset manually" ); VA_VERBOSE( "BinauralFreeFieldAudioRenderer", "Was not streaming, will reset manually" );
// if no streaming active, reset manually // if no streaming active, reset manually
...@@ -1391,6 +1392,17 @@ CVAStruct CVABinauralFreeFieldAudioRenderer::CallObject( const CVAStruct& oArgs ...@@ -1391,6 +1392,17 @@ CVAStruct CVABinauralFreeFieldAudioRenderer::CallObject( const CVAStruct& oArgs
VA_EXCEPT2( INVALID_PARAMETER, "Invalid command (\"" + sCommandOrg + "\")" ); VA_EXCEPT2( INVALID_PARAMETER, "Invalid command (\"" + sCommandOrg + "\")" );
} }
void CVABinauralFreeFieldAudioRenderer::SetParameters( const CVAStruct& oParams )
{
// Only delegate
CallObject( oParams );
}
CVAStruct CVABinauralFreeFieldAudioRenderer::GetParameters( const CVAStruct& )
{
return CVAStruct( *m_oParams.pConfig );
}
void CVABinauralFreeFieldAudioRenderer::onStartDumpListeners( const std::string& sFilenameFormat ) void CVABinauralFreeFieldAudioRenderer::onStartDumpListeners( const std::string& sFilenameFormat )
{ {
if( m_bDumpListeners ) if( m_bDumpListeners )
......
...@@ -118,6 +118,8 @@ public: ...@@ -118,6 +118,8 @@ public:
// --= Module interface =-- // --= Module interface =--
CVAStruct CallObject( const CVAStruct& oArgs ); CVAStruct CallObject( const CVAStruct& oArgs );
void SetParameters( const CVAStruct& oParams );
CVAStruct GetParameters( const CVAStruct& );
void onStartDumpListeners( const std::string& sFilenameFormat ); void onStartDumpListeners( const std::string& sFilenameFormat );
void onStopDumpListeners(); void onStopDumpListeners();
......
...@@ -370,7 +370,7 @@ void CVAPrototypeFreeFieldAudioRenderer::Reset() ...@@ -370,7 +370,7 @@ void CVAPrototypeFreeFieldAudioRenderer::Reset()
VA_VERBOSE( "PrototypeFreeFieldAudioRenderer", "Received reset call, indicating reset now" ); VA_VERBOSE( "PrototypeFreeFieldAudioRenderer", "Received reset call, indicating reset now" );
ctxAudio.m_iResetFlag = 1; // Request reset ctxAudio.m_iResetFlag = 1; // Request reset
if( ctxAudio.m_iStatus == 0 ) if( ctxAudio.m_iStatus == 0 || m_oParams.bOfflineRendering )
{ {
VA_VERBOSE( "PrototypeFreeFieldAudioRenderer", "Was not streaming, will reset manually" ); VA_VERBOSE( "PrototypeFreeFieldAudioRenderer", "Was not streaming, will reset manually" );
// if no streaming active, reset manually // if no streaming active, reset manually
......
...@@ -120,9 +120,9 @@ private: ...@@ -120,9 +120,9 @@ private:
int m_iIRFilterLengthSamples; //!< Length of the HRIR filter DSP module int m_iIRFilterLengthSamples; //!< Length of the HRIR filter DSP module
int m_iNumChannels; //!< Number of channels per sound path int m_iNumChannels; //!< Number of channels per sound path
int m_iFilterDelaySamples; //!< Filter delay in samples
bool m_bOutputMonitoring; //!< Shows output infos / warnings if the overall listener output is zero (no filter loaded) bool m_bOutputMonitoring; //!< Shows output infos / warnings if the overall listener output is zero (no filter loaded)
ITADatasourceRealization* m_pOutput; ITADatasourceRealization* m_pOutput;
ITASampleBuffer m_sfTempBuffer;
class CVAPTGPUpdateMessage : public CVAPoolObject class CVAPTGPUpdateMessage : public CVAPoolObject
{ {
...@@ -179,6 +179,7 @@ private: ...@@ -179,6 +179,7 @@ private:
void UpdateGenericSoundPath( int iListenerID, int iSourceID, int iChannel, const std::string& sIRFilePath ); void UpdateGenericSoundPath( int iListenerID, int iSourceID, int iChannel, const std::string& sIRFilePath );
void UpdateGenericSoundPath( int iListenerID, int iSourceID, ITASampleFrame& sfIR ); void UpdateGenericSoundPath( int iListenerID, int iSourceID, ITASampleFrame& sfIR );
void UpdateGenericSoundPath( int iListenerID, int iSourceID, int iChannel, ITASampleBuffer& sbIR ); void UpdateGenericSoundPath( int iListenerID, int iSourceID, int iChannel, ITASampleBuffer& sbIR );
void UpdateGenericSoundPath( const int iListenerID, const int iSourceID, const double dDelaySeconds );
friend class CVAPTGenericSoundPath; friend class CVAPTGenericSoundPath;
friend class CVAPTGPListenerPoolFactory; friend class CVAPTGPListenerPoolFactory;
......
...@@ -405,7 +405,7 @@ void CVAPTHearingAidRenderer::Reset() ...@@ -405,7 +405,7 @@ void CVAPTHearingAidRenderer::Reset()
{ {
ctxAudio.m_iResetFlag = 1; // Request reset ctxAudio.m_iResetFlag = 1; // Request reset
if( ctxAudio.m_iStatus == 0 ) if( ctxAudio.m_iStatus == 0 || m_oParams.bOfflineRendering )
{