[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51613] trunk/blender/intern/audaspace/ intern/AUD_ChannelMapperReader.cpp: Audaspace:
Joerg Mueller
nexyon at gmail.com
Thu Oct 25 12:25:32 CEST 2012
Revision: 51613
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51613
Author: nexyon
Date: 2012-10-25 10:25:30 +0000 (Thu, 25 Oct 2012)
Log Message:
-----------
Audaspace:
Fix for channel mapping bug. Now 7.1 channels should get mapped correctly.
Modified Paths:
--------------
trunk/blender/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
Modified: trunk/blender/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
===================================================================
--- trunk/blender/intern/audaspace/intern/AUD_ChannelMapperReader.cpp 2012-10-25 10:14:35 UTC (rev 51612)
+++ trunk/blender/intern/audaspace/intern/AUD_ChannelMapperReader.cpp 2012-10-25 10:25:30 UTC (rev 51613)
@@ -67,10 +67,12 @@
float AUD_ChannelMapperReader::angleDistance(float alpha, float beta)
{
- alpha = fabs(alpha - beta);
+ alpha = beta - alpha;
if(alpha > M_PI)
- alpha = fabs(alpha - 2 * M_PI);
+ alpha -= 2 * M_PI;
+ if(alpha < -M_PI)
+ alpha += 2 * M_PI;
return alpha;
}
@@ -107,8 +109,8 @@
if(m_source_channels == AUD_CHANNELS_MONO)
source_angles = &m_mono_angle;
- int channel_min1, channel_min2;
- float angle_min1, angle_min2, angle;
+ int channel_left, channel_right;
+ float angle_left, angle_right, angle;
for(int i = 0; i < m_source_channels; i++)
{
@@ -120,38 +122,46 @@
continue;
}
- channel_min1 = channel_min2 = -1;
- angle_min1 = angle_min2 = 2 * M_PI;
+ channel_left = channel_right = -1;
+ angle_left = -2 * M_PI;
+ angle_right = 2 * M_PI;
for(int j = 0; j < m_target_channels; j++)
{
if(j == lfe)
continue;
angle = angleDistance(source_angles[i], target_angles[j]);
- if(angle < angle_min1)
+ if(angle < 0)
{
- channel_min2 = channel_min1;
- angle_min2 = angle_min1;
-
- channel_min1 = j;
- angle_min1 = angle;
+ if(angle > angle_left)
+ {
+ angle_left = angle;
+ channel_left = j;
+ }
}
- else if(angle < angle_min2)
+ else
{
- channel_min2 = j;
- angle_min2 = angle;
+ if(angle < angle_right)
+ {
+ angle_right = angle;
+ channel_right = j;
+ }
}
}
- angle = angle_min1 + angle_min2;
- if(channel_min2 == -1 || angle == 0)
+ angle = angle_right - angle_left;
+ if(channel_right == -1 || angle == 0)
{
- m_mapping[channel_min1 * m_source_channels + i] = 1;
+ m_mapping[channel_left * m_source_channels + i] = 1;
}
+ else if(channel_left == -1)
+ {
+ m_mapping[channel_right * m_source_channels + i] = 1;
+ }
else
{
- m_mapping[channel_min1 * m_source_channels + i] = cos(M_PI_2 * angle_min1 / angle);
- m_mapping[channel_min2 * m_source_channels + i] = cos(M_PI_2 * angle_min2 / angle);
+ m_mapping[channel_left * m_source_channels + i] = cos(M_PI_2 * angle_left / angle);
+ m_mapping[channel_right * m_source_channels + i] = cos(M_PI_2 * angle_right / angle);
}
}
More information about the Bf-blender-cvs
mailing list