[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