Skip to content

Commit 36f01f6

Browse files
committed
Merge branch 'release/M20180706'
2 parents 673b563 + 7d4e527 commit 36f01f6

6 files changed

Lines changed: 86 additions & 40 deletions

File tree

3dti_Toolkit/BinauralSpatializer/Environment.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -777,10 +777,10 @@ namespace Binaural {
777777
// HA Directionality in reverb path
778778
//////////////////////////////////////////////////////////
779779
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::LEFT)) {
780-
ProcessDirectionality(outBufferLeft, ownerCore->GetListener()->GetReverbDirectionalityAttenuation_dB(Common::T_ear::LEFT));
780+
ProcessDirectionality(outBufferLeft, ownerCore->GetListener()->GetReverbDirectionalityLinearAttenuation(Common::T_ear::LEFT));
781781
}
782782
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::RIGHT)) {
783-
ProcessDirectionality(outBufferRight, ownerCore->GetListener()->GetReverbDirectionalityAttenuation_dB(Common::T_ear::RIGHT));
783+
ProcessDirectionality(outBufferRight, ownerCore->GetListener()->GetReverbDirectionalityLinearAttenuation(Common::T_ear::RIGHT));
784784
}
785785

786786
// WATCHER
@@ -997,10 +997,10 @@ namespace Binaural {
997997
// HA Directionality in reverb path
998998
//////////////////////////////////////////////////////////
999999
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::LEFT)) {
1000-
ProcessDirectionality(outBufferLeft, ownerCore->GetListener()->GetReverbDirectionalityAttenuation_dB(Common::T_ear::LEFT));
1000+
ProcessDirectionality(outBufferLeft, ownerCore->GetListener()->GetReverbDirectionalityLinearAttenuation(Common::T_ear::LEFT));
10011001
}
10021002
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::RIGHT)) {
1003-
ProcessDirectionality(outBufferRight, ownerCore->GetListener()->GetReverbDirectionalityAttenuation_dB(Common::T_ear::RIGHT));
1003+
ProcessDirectionality(outBufferRight, ownerCore->GetListener()->GetReverbDirectionalityLinearAttenuation(Common::T_ear::RIGHT));
10041004
}
10051005

10061006
// WATCHER
@@ -1216,10 +1216,10 @@ namespace Binaural {
12161216
// HA Directionality in reverb path
12171217
//////////////////////////////////////////////////////////
12181218
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::LEFT)) {
1219-
ProcessDirectionality(outBufferLeft, ownerCore->GetListener()->GetReverbDirectionalityAttenuation_dB(Common::T_ear::LEFT));
1219+
ProcessDirectionality(outBufferLeft, ownerCore->GetListener()->GetReverbDirectionalityLinearAttenuation(Common::T_ear::LEFT));
12201220
}
12211221
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::RIGHT)) {
1222-
ProcessDirectionality(outBufferRight, ownerCore->GetListener()->GetReverbDirectionalityAttenuation_dB(Common::T_ear::RIGHT));
1222+
ProcessDirectionality(outBufferRight, ownerCore->GetListener()->GetReverbDirectionalityLinearAttenuation(Common::T_ear::RIGHT));
12231223
}
12241224

12251225
// WATCHER

3dti_Toolkit/BinauralSpatializer/Listener.cpp

Lines changed: 47 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ namespace Binaural
3535
listenerHeadRadius{_listenerHeadRadius},
3636
listenerILDAttenutationDB{ ILDATTENUATION },
3737
enableDirectionality {false, false},
38-
anechoicDirectionalityAttenuation{0.0f, 0.0f},
39-
reverbDirectionalityAttenuation{ 0.0f, 0.0f }
38+
anechoicDirectionalityLinearAttenuation{0.0f, 0.0f},
39+
reverbDirectionalityLinearAttenuation{ 0.0f, 0.0f }
4040
{
4141
std::unique_ptr<CHRTF> a(new CHRTF(this)); // HRTF of listener
4242
listenerHRTF = std::move(a);
@@ -222,60 +222,86 @@ namespace Binaural
222222
}
223223
if (ear == Common::T_ear::LEFT)
224224
{
225-
anechoicDirectionalityAttenuation.left = _directionalityAttenuation;
226-
reverbDirectionalityAttenuation.left = CalculateReverbDirectionalityAttenuation(_directionalityAttenuation);
225+
anechoicDirectionalityLinearAttenuation.left = std::pow(10, _directionalityAttenuation / 20);
226+
reverbDirectionalityLinearAttenuation.left = CalculateReverbDirectionalityLinearAttenuation(_directionalityAttenuation);
227227
}
228228
if (ear == Common::T_ear::RIGHT)
229229
{
230-
anechoicDirectionalityAttenuation.right = _directionalityAttenuation;
231-
reverbDirectionalityAttenuation.right = CalculateReverbDirectionalityAttenuation(_directionalityAttenuation);
230+
anechoicDirectionalityLinearAttenuation.right = std::pow(10, _directionalityAttenuation / 20);
231+
reverbDirectionalityLinearAttenuation.right = CalculateReverbDirectionalityLinearAttenuation(_directionalityAttenuation);
232232
}
233233
}
234234

235235
float CListener::GetAnechoicDirectionalityAttenuation_dB(Common::T_ear ear) const
236236
{
237237
if (ear == Common::T_ear::LEFT)
238-
return anechoicDirectionalityAttenuation.left;
238+
return 20 * std::log(anechoicDirectionalityLinearAttenuation.left);
239239
if (ear == Common::T_ear::RIGHT)
240-
return anechoicDirectionalityAttenuation.right;
240+
return 20 * std::log(anechoicDirectionalityLinearAttenuation.right);
241241
return -1.0f;
242242
}
243-
243+
244+
float CListener::GetAnechoicDirectionalityLinearAttenuation(Common::T_ear ear) const
245+
{
246+
if (ear == Common::T_ear::LEFT)
247+
return anechoicDirectionalityLinearAttenuation.left;
248+
if (ear == Common::T_ear::RIGHT)
249+
return anechoicDirectionalityLinearAttenuation.right;
250+
return -1.0f;
251+
}
252+
244253
float CListener::GetReverbDirectionalityAttenuation_dB(Common::T_ear ear) const
245254
{
246255
if (ear == Common::T_ear::LEFT)
247-
return reverbDirectionalityAttenuation.left;
256+
return 20 * std::log(reverbDirectionalityLinearAttenuation.left);
248257
if (ear == Common::T_ear::RIGHT)
249-
return reverbDirectionalityAttenuation.right;
258+
return 20 * std::log(reverbDirectionalityLinearAttenuation.right);
250259
return -1.0f;
251260
}
252261

253-
float CListener::CalculateReverbDirectionalityAttenuation(float directionalityExtend_dB)
262+
float CListener::GetReverbDirectionalityLinearAttenuation(Common::T_ear ear) const
263+
{
264+
if (ear == Common::T_ear::LEFT)
265+
return reverbDirectionalityLinearAttenuation.left;
266+
if (ear == Common::T_ear::RIGHT)
267+
return reverbDirectionalityLinearAttenuation.right;
268+
return -1.0f;
269+
}
270+
271+
float CListener::CalculateReverbDirectionalityLinearAttenuation(float directionalityExtend_dB)
254272
{
255273

256274
float angle_rad = 0;
257275
float angleStep = M_PI / (float)NUM_STEPS_TO_INTEGRATE_CARDIOID_FOR_REVERB;
258276
float v = 0;
277+
259278
for (int c = 0; c <= NUM_STEPS_TO_INTEGRATE_CARDIOID_FOR_REVERB; c++)
260279
{
261-
v += CalculateDirectionalityAttenuation(directionalityExtend_dB, angle_rad) * std::sin(angle_rad);
280+
// Weighted sum of the directionality of the sphere rings
281+
v += std::pow(CalculateDirectionalityLinearAttenuation(directionalityExtend_dB, angle_rad),2) * std::sin(angle_rad);
262282
angle_rad += angleStep;
263283
}
264-
265-
v = 0.5 * v / (NUM_STEPS_TO_INTEGRATE_CARDIOID_FOR_REVERB + 1);
266-
267-
v = std::pow(10.0, v / 20.0);
284+
// Normalizing (making omnidirectional non-attenuating)
285+
v = std::sqrt(v /(2 * (NUM_STEPS_TO_INTEGRATE_CARDIOID_FOR_REVERB + 1)));
268286

269287
return v;
270288
}
271289

272-
float CListener::CalculateDirectionalityAttenuation( float directionalityExtend, float angleToForwardAxis_rad)
290+
float CListener::CalculateDirectionalityLinearAttenuation(float directionalityExtend, float angleToForwardAxis_rad)
273291
{
274-
if (directionalityExtend > 30) directionalityExtend = 30.0f;
292+
if (directionalityExtend > 30) directionalityExtend = 30.0f;
293+
else if (directionalityExtend < 0) directionalityExtend = 0.0f;
294+
275295
float directionalityFactor = 0.5f - 0.5f * std::pow(10, -directionalityExtend / 20);
276-
float directionalityAttenuation = 1 - directionalityFactor + (directionalityFactor)* std::cos(angleToForwardAxis_rad);
277-
return (20 * std::log10(directionalityAttenuation));
296+
297+
return 1 - directionalityFactor + directionalityFactor * std::cos(angleToForwardAxis_rad);
278298
}
299+
300+
float CListener::CalculateDirectionalityAttenuation_dB(float directionalityExtend, float angleToForwardAxis_rad)
301+
{
302+
return 20.0f * log10(CalculateDirectionalityLinearAttenuation(directionalityExtend, angleToForwardAxis_rad));
303+
}
304+
279305

280306
int CListener::GetHRTFResamplingStep() const
281307
{

3dti_Toolkit/BinauralSpatializer/Listener.h

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,13 @@ class CHRTF;
186186
*/
187187
float GetReverbDirectionalityAttenuation_dB(Common::T_ear ear) const;
188188

189-
/** \brief returns the attenuation in dB due to directionality
190-
* \param [in] directionalityExtend (typical values 0 - 30 dBs)
189+
/** \brief returns the linear attenuation due to directionality
190+
* \param [in] directionalityExtend sets the directionality front-back ratio (restricted values from 0 to 30 dBs)
191191
* \param [in] angleToForwardAxis_rad angle in radians between the forward direction and the vector to the sound source
192192
* \retval attenuation attenuation in dB
193193
* \eh Nothing is reported to the error handler.
194194
*/
195-
float CalculateDirectionalityAttenuation(float directionalityExtend, float angleToForwardAxis_rad);
195+
float CalculateDirectionalityAttenuation_dB(float directionalityExtend, float angleToForwardAxis_rad);
196196

197197
/** \brief Get HRTF resampling step from owner core
198198
* \retval HRTF resampling step, in degress
@@ -207,7 +207,17 @@ class CHRTF;
207207
// Calculate the HRTF resampling and FFT again
208208
void CalculateHRTF();
209209

210-
float CalculateReverbDirectionalityAttenuation(float directionalityExtend_dB);
210+
// Gets reverb directionality linear attenuation
211+
float GetReverbDirectionalityLinearAttenuation(Common::T_ear ear) const;
212+
213+
// Gets reverb directionality linear attenuation
214+
float GetAnechoicDirectionalityLinearAttenuation(Common::T_ear ear) const;
215+
216+
// Calculates reverb directionality linear attenuation
217+
float CalculateDirectionalityLinearAttenuation(float directionalityExtend, float angleToForwardAxis_rad);
218+
219+
// Calculates reverb directionality linear attenuation
220+
float CalculateReverbDirectionalityLinearAttenuation(float directionalityExtend_dB);
211221

212222
// Reset HRTF
213223
void ResetHRTF();
@@ -228,12 +238,15 @@ class CHRTF;
228238

229239
float listenerILDAttenutationDB; // Attenuation to apply when the ILD is in use (HighPerformance)
230240

231-
Common::CEarPair<float> anechoicDirectionalityAttenuation; // Max value for directionality attenuation in dBs for each channel
232-
Common::CEarPair<float> reverbDirectionalityAttenuation; // Max value for directionality attenuation in dBs for each channel
241+
Common::CEarPair<float> anechoicDirectionalityLinearAttenuation; // Max value for directionality attenuation in dBs for each channel
242+
Common::CEarPair<float> reverbDirectionalityLinearAttenuation; // Max value for directionality attenuation in dBs for each channel
233243
Common::CEarPair<bool> enableDirectionality; // True when current settings for directionality will be applied to each channel (left or right)
234244

235245
friend class CHRTF; //Friend Class definition
236246
friend class CCore; //Friend Class definition
247+
friend class CEnvironment; //Friend Class definition
248+
friend class CSingleSourceDSP; //Friend Class definition
249+
friend class CListener; //Friend Class definition
237250
};
238251
}
239252
#endif

3dti_Toolkit/BinauralSpatializer/SingleSourceDSP.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -570,22 +570,19 @@ namespace Binaural {
570570
{
571571
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::LEFT))
572572
{
573-
ProcessDirectionality(leftBuffer, ownerCore->GetListener()->GetAnechoicDirectionalityAttenuation_dB(Common::T_ear::LEFT), angleToForwardAxisRadians);
573+
ProcessDirectionality(leftBuffer, ownerCore->GetListener()->GetAnechoicDirectionalityLinearAttenuation(Common::T_ear::LEFT), angleToForwardAxisRadians);
574574
}
575575
if (ownerCore->GetListener()->IsDirectionalityEnabled(Common::T_ear::RIGHT))
576576
{
577-
ProcessDirectionality(rightBuffer, ownerCore->GetListener()->GetAnechoicDirectionalityAttenuation_dB(Common::T_ear::RIGHT), angleToForwardAxisRadians);
577+
ProcessDirectionality(rightBuffer, ownerCore->GetListener()->GetAnechoicDirectionalityLinearAttenuation(Common::T_ear::RIGHT), angleToForwardAxisRadians);
578578
}
579579
}
580580

581581
void CSingleSourceDSP::ProcessDirectionality(CMonoBuffer<float> &buffer, float directionalityAttenutaion, float angleToForwardAxis_rad)
582582
{
583-
float attL = ownerCore->GetListener()->CalculateDirectionalityAttenuation(directionalityAttenutaion, angleToForwardAxis_rad);
584-
attL = std::pow(10.0, attL / 20.0);
585-
buffer.ApplyGain(attL);
583+
buffer.ApplyGain(ownerCore->GetListener()->CalculateDirectionalityLinearAttenuation(directionalityAttenutaion, angleToForwardAxis_rad));
586584
}
587585

588-
589586
// Apply doppler effect simulation
590587
void CSingleSourceDSP::ProcessAddDelay_ExpansionMethod(CMonoBuffer<float>& input, CMonoBuffer<float>& output, CMonoBuffer<float>& delayBuffer, int newDelay)
591588
{

CHANGELOG.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@ All notable changes to the 3DTuneIn Toolkit will be documented in this file.
33

44
The format is based on [Keep a Changelog](http://keepachangelog.com/).
55

6+
## [M20180706] - AudioToolkit_v1.2_20180706
7+
8+
### Binaural
9+
10+
`Changed`
11+
- Modified CalculateDirectionalityAttenuation function name:
12+
* old: float CalculateDirectionalityAttenuation(float directionalityExtend, float angleToForwardAxis_rad);
13+
* new: float CalculateDirectionalityAttenuation**_dB**(float directionalityExtend, float angleToForwardAxis_rad);
14+
15+
616
## [M20180705] - AudioToolkit_v1.1_20180705
717

818
### Binaural
@@ -53,7 +63,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/).
5363

5464
- Modified ProcessHRTF to calculate a more precise ITD
5565

56-
- Modied the return value of the following methods:
66+
- Modified the return value of the following methods:
5767
* change: const **std::vector<CMonoBuffer<float>>** CalculateHRIR_partitioned_FromBarycentricCoordinates(Common::T_ear ear, TBarycentricCoordinatesStruct barycentricCoordinates, orientation orientation_pto1, orientation orientation_pto2, orientation orientation_pto3)const;
5868
* change: const **std::vector<CMonoBuffer<float>>** GetHRIR_partitioned_InterpolationMethod(Common::T_ear ear, float _azimuth, float _elevation) const;
5969

228 KB
Binary file not shown.

0 commit comments

Comments
 (0)