From e4e8cca5a3bb6c15028bc5000e82645f957aa97a Mon Sep 17 00:00:00 2001
From: Jonas Stienen <jst@akustik.rwth-aachen.de>
Date: Wed, 31 Aug 2016 07:33:22 +0200
Subject: [PATCH] Changing API removing sweet spot widening factor and adding
 cross-talk cancellation factor and wave incidence angle factor (+
 getter/setter)

---
 include/ITANCTC.h | 26 ++++++++++++++++++++------
 src/ITANCTC.cpp   | 21 ++++++++++++++++-----
 2 files changed, 36 insertions(+), 11 deletions(-)

diff --git a/include/ITANCTC.h b/include/ITANCTC.h
index c507080..63ecb7b 100644
--- a/include/ITANCTC.h
+++ b/include/ITANCTC.h
@@ -119,7 +119,8 @@ public:
 		double dSampleRate;		//!< Sampling rate
 		float fSpeedOfSound;	//!< Speed of sound, m/s
 		int iOptimization;		//!< Optimization algorithm (future work, see features/room_compensation)
-		float fSweetSpotWideningFactor; //!< Factor for sweet spot widening (none = 0.0, max_wide = 1.0)
+		float fCrossTalkCancellationFactor; //!< Factor for cross-talk cancellation (none = 0.0, full = 1.0)
+		float fWaveIncidenceAngleCompensationFactor; //!< Factor for cross-talk cancellation (none = 0.0, full = 1.0)
 
 		class ITA_CTC_API Loudspeaker
 		{
@@ -175,17 +176,29 @@ public:
 	*/
 	void SetBeta( float fBeta );
 
-	//! Get sweet spot widening factor
+	//! Get cross-talk cancellation factor
 	/**
 	* \return Factor [0..1]
 	*/
-	float GetSweetSpotWideningFactor();
+	float GetCrossTalkCancellationFactor();
 
-	//! Set sweet spot widening parameter
+	//! Set cross-talk cancellation factor
 	/**
 	* \param fFactor number between [0..1] (none: 0, max range = 1.0)
 	*/
-	void SetSweetSpotWideningFactor( float fFactor );
+	void SetCrossTalkCancellationFactor( float fFactor );
+
+	//! Get cross-talk cancellation factor
+	/**
+	* \return Factor [0..1]
+	*/
+	float GetWaveIncidenceAngleCompensation();
+
+	//! Set cross-talk cancellation factor
+	/**
+	* \param fFactor number between [0..1] (none: 0, max range = 1.0)
+	*/
+	void SetWaveIncidenceAngleCompensationFactor( float fFactor );
 
 	//! Get additional delay parameter
 	/**
@@ -282,7 +295,8 @@ private:
 	std::atomic< float > m_fBeta;		//!< Beta parameter (regularization)
 	std::vector< float > m_vfDelayTime;	//!< Add a delay [seconds] to the resulting CTC filter (individual channels)
 	std::atomic <int > m_iOptimization;	//!< Optimization (see Config enum)
-	std::atomic< float > m_fSweetSpotWideningFactor;		//!< Factor for sweet spot widening (none = 0.0, max_wide = 1.0)
+	std::atomic< float > m_fCrossTalkCancellationFactor;		//!< Factor for cross-talk cancellation (none = 0.0, full = 1.0)
+	std::atomic< float > m_fWaveIncidenceAngleCompensationFactor;		//!< Factor for cross-talk cancellation (none = 0.0, full = 1.0)
 	const DAFFContentIR* m_pHRIR;	//!< HRIR dataset pointer
 	
 	Pose m_oHeadPose;				//!< Current head Pose data
diff --git a/src/ITANCTC.cpp b/src/ITANCTC.cpp
index 69503f8..87e0c0e 100644
--- a/src/ITANCTC.cpp
+++ b/src/ITANCTC.cpp
@@ -23,7 +23,8 @@ ITANCTC::ITANCTC( const Config& oNCTCConfig )
 	m_fBeta = float( 1e-4 );
 
 	m_iOptimization = m_oConfig.iOptimization;
-	m_fSweetSpotWideningFactor = m_oConfig.fSweetSpotWideningFactor;
+	m_fCrossTalkCancellationFactor = m_oConfig.fCrossTalkCancellationFactor;
+	m_fWaveIncidenceAngleCompensationFactor = m_oConfig.fWaveIncidenceAngleCompensationFactor;
 
 	m_oHeadPose.vPos.SetToZeroVector();
 	m_oHeadPose.vView.SetValues( 0, 0, -1.0f );
@@ -361,14 +362,24 @@ float ITANCTC::GetBeta()
 	return m_fBeta;
 }
 
-void ITANCTC::SetSweetSpotWideningFactor( float fFactor )
+void ITANCTC::SetCrossTalkCancellationFactor( float fFactor )
 {
-	m_fSweetSpotWideningFactor = fFactor;
+	m_fCrossTalkCancellationFactor = fFactor;
 }
 
-float ITANCTC::GetSweetSpotWideningFactor()
+float ITANCTC::GetCrossTalkCancellationFactor()
 {
-	return m_fSweetSpotWideningFactor;
+	return m_fCrossTalkCancellationFactor;
+}
+
+void ITANCTC::SetWaveIncidenceAngleCompensationFactor( float fFactor )
+{
+	m_fWaveIncidenceAngleCompensationFactor = fFactor;
+}
+
+float ITANCTC::GetWaveIncidenceAngleCompensation()
+{
+	return m_fWaveIncidenceAngleCompensationFactor;
 }
 
 void ITANCTC::SetDelayTime( float fDelayTime )
-- 
GitLab