[LAD] Mixing audio: Implementing pan and balance

Raphaël BOLLEN raphael.bollen at mobistar.be
Sun Mar 24 08:06:59 UTC 2013


On 03/23/2013 06:05 PM, Raphaël BOLLEN wrote:
> On 03/16/2013 07:23 PM, Fons Adriaensen wrote:
>> On Sat, Mar 16, 2013 at 09:25:46AM -0400, Paul Davis wrote:
>>> On Sat, Mar 16, 2013 at 9:25 AM, John Rigg <ladev4 at jrigg.co.uk> wrote:
>>>
>>>>
>>>> A lot of mixing consoles don't provide a mono switch, but it's usually
>>>> possible to work around it with sub groups. I still have to work out a
>>>> convenient method for mono checking in Ardour 3.
>>>>
>>>
>>> which means i need to write up a page or two for http://manual.ardour.org/
>>
>> And which reminds me of an app I've been using for years but
>> never released.
>>
>> Zita-mu1 is a simple Jack client used to organise stereo monitoring
>> during recording and mixing. More here:
>> <http://kokkinizita.linuxaudio.org/linuxaudio/zita-mu1-doc/quickguide.html>
>> and download from
>> <http://kokkinizita.linuxaudio.org/linuxaudio/downloads/zita-mu1-0.2.0.tar.bz2>
>>
>> Ciao,
>>
>
> Awesome, however cpu usage is ~12% on my system when playing silence and drops to ~2% with some
> audio going through.

This patch solves the problem for me.

--- /home/rapha/Downloads/kokkinizita/zita-mu1-0.2.0/source/jclient.cc.orig
+++ /home/rapha/Downloads/kokkinizita/zita-mu1-0.2.0/source/jclient.cc
@@ -207,38 +207,43 @@
      {
  	k = prepare (frames);

-	q0 = selout [0];
-	q1 = selout [1];
-	for (i = 0; i < 4; i++)
-	{	
-	    m = _inpstat [i].state ();
-	    if (m)
-	    {
-	        p0 = moninp [2 * i];
-	        p1 = moninp [2 * i + 1];
-	        if (m == DelayAct::ON)
-		{
-		    for (j = 0; j < k; j++)
-		    {
-			q0 [j] += p0 [j];
-			q1 [j] += p1 [j];
-		    }
-		}
-		else
-		{
-		    g = _ipg [i];
-		    t = (m == DelayAct::UP) ? 1.0f : 0.0f;
-		    d = (t - g) / _frcnt;
-		    for (j = 0; j < k; j++)
-		    {
-			g += d;
-			q0 [j] += g * p0 [j];
-			q1 [j] += g * p1 [j];
-		    }
-		    _ipg [i] = g;
-		}
-	    }
-	}
+        q0 = selout [0];
+        q1 = selout [1];
+        for (i = 0; i < 4; i++)
+        {
+            m = _inpstat [i].state ();
+            p0 = moninp [2 * i];
+            p1 = moninp [2 * i + 1];
+            for (j = 0; j < k; j++)
+            {
+                p0[j] += 1e-20;
+                p1[j] += 1e-20;
+            }
+            if (m)
+            {
+                if (m == DelayAct::ON)
+                {
+                    for (j = 0; j < k; j++)
+                    {
+                        q0 [j] += p0 [j];
+                        q1 [j] += p1 [j];
+                    }
+                }
+                else
+                {
+                    g = _ipg [i];
+                    t = (m == DelayAct::UP) ? 1.0f : 0.0f;
+                    d = (t - g) / _frcnt;
+                    for (j = 0; j < k; j++)
+                    {
+                        g += d;
+                        q0 [j] += g * p0 [j];
+                        q1 [j] += g * p1 [j];
+                    }
+                    _ipg [i] = g;
+                }
+            }
+        }

  	_kmdsp [0].process (q0, k);
  	_kmdsp [1].process (q1, k);


Cheers

--
Raphaël.


More information about the Linux-audio-dev mailing list