[xiph-commits] r8581 - trunk/postfish

xiphmont at motherfish-iii.xiph.org xiphmont at motherfish-iii.xiph.org
Sun Jan 2 19:41:06 PST 2005


Author: xiphmont
Date: 2005-01-02 19:41:05 -0800 (Sun, 02 Jan 2005)
New Revision: 8581

Modified:
   trunk/postfish/README
   trunk/postfish/mix.c
   trunk/postfish/mixpanel.c
   trunk/postfish/version.h
Log:
Modify reverb routing in the mixdown panels.

In previous versions of Postfish, the stereo reverb output of a
channel reverb had to be explicitly mixed into an output channel using
the direct mixdown blocks or the reverb is inaudible.  You needed to
use the direct mixdown blocks to get reverb even when otherwise only
using the stereo crossplacer to produce a mixdown.

As of now, when using the Crossplacer in a mixdown panel, a channel's
reverb A output will be mixed directly into all active 'output A'
outputs, and the channel's reverb B output likewise mixed directly
into all active 'output B' outputs.  It is mixed according to the
master delay/attenuation sliders on the attenuation panel, but it does
not use the delay/attenuation settings of the crossplacer; this way
the channel can be mixed anywhere into a stereo image and the reverb
will still present the same image of space.



Modified: trunk/postfish/README
===================================================================
--- trunk/postfish/README	2005-01-03 02:25:51 UTC (rev 8580)
+++ trunk/postfish/README	2005-01-03 03:41:05 UTC (rev 8581)
@@ -131,22 +131,12 @@
   A-B slider then controls how far the input apparently images toward
   the A output bank or the B output bank.  
 
-  The mixdown blocks can also be configured to take as input not only
-  the input channel, but also each channel's left (A) or right (B)
-  reverb output.  For example, reverb left can be mixed to the left
-  output, the reverb right mixed to the right channel and the original
-  input crossplaced somewhere between left or right.  The input
-  placement can be altered on the fly thus apparently moving the
-  input's location while the impression of space the reverb creates
-  holds still. For even more realism, adding an additional delay of 10
-  ms or so to the reverb (sound travels roughly one meter in 3 ms) can
-  pull the original image closer without losing the impression of
-  reverberation in a medium-to-large hall.  A reverb delay also allows
-  the use of a faster/tighter reverb time without losing the
-  the impression of size.
+  The direct mixdown blocks allow additional manual control over the
+  input->output matrix; the direct mixdown blocks run in parallel with
+  the crossplacer and all may be active simultaneously.
 
-  Of course, with eight channels, one can begin imaging/mastering for
-  more than just stereo...
+  Of course, with eight output channels, one can begin
+  imaging/mastering for more than just stereo...
 
 >>>> Don't we already have several free apps that do this sort of thing?
 
@@ -270,11 +260,13 @@
   Only two things are probably impossible to figure out just from
   an afternoon of playing around:
 
-  1) Output from a reverb effect in the "channel" panel is sent to a
-     separate internal stereo bus.  The reverb has to be explicitly
-     mixed into the output on a 'mix' panel.  When postfish starts for
-     the first time, the default setup mixes one side of the reverb
-     pair back into left or right.
+  1) When Postfish starts for the first time, all input channels are
+     mixed into the center of a two channel output.  If, for example,
+     the input is already two stereo channels and the output should be
+     the same, the proper mixdown configuration is to go to the
+     mixdown panels for channel 1 and channel 2 and then set input
+     channel 1 to mix only into output channel 1 and input channel 2
+     to only output channel 2.
  
   2) Turning "Atten/Mix" off for any channel will mute it completely
      in all input effects, not just in the mixdown (this obviously

Modified: trunk/postfish/mix.c
===================================================================
--- trunk/postfish/mix.c	2005-01-03 02:25:51 UTC (rev 8580)
+++ trunk/postfish/mix.c	2005-01-03 03:41:05 UTC (rev 8581)
@@ -349,43 +349,6 @@
     int placer=ms.curr[i].placer_place;
     int placerP=ms.prev[i].placer_place;
 
-    float relA=(placer>100 ? placer*.01-1. : 0.);
-    float relB=(placer<100 ? 1.-placer*.01 : 0.);
-    float relAP=(placerP>100 ? placerP*.01-1. : 0.);
-    float relBP=(placerP<100 ? 1.-placerP*.01 : 0.);
-
-    float attA=
-      fromdB((ms.curr[i].master_att +
-	      ms.curr[i].placer_att * relA)*.1);
-    
-    float attB=
-      fromdB((ms.curr[i].master_att +
-	      ms.curr[i].placer_att * relB)*.1);
-    
-    int delA=
-      rint((ms.curr[i].master_delay +
-	    ms.curr[i].placer_delay * relA)*.00001*input_rate);
-
-    int delB=
-      rint((ms.curr[i].master_delay +
-	    ms.curr[i].placer_delay * relB)*.00001*input_rate);
-
-    float attAP=
-      fromdB((ms.prev[i].master_att +
-	      ms.prev[i].placer_att * relAP)*.1);
-    
-    float attBP=
-      fromdB((ms.prev[i].master_att +
-	      ms.prev[i].placer_att * relBP)*.1);
-    
-    int delAP=
-      rint((ms.prev[i].master_delay +
-	    ms.prev[i].placer_delay * relAP)*.00001*input_rate);
-
-    int delBP=
-      rint((ms.prev[i].master_delay +
-	    ms.prev[i].placer_delay * relBP)*.00001*input_rate);
-
     /* place mix */
     {
       int mixedA=0,mixedB=0;
@@ -401,10 +364,26 @@
 	  outactive[j]=1;
 	  
 	  if(!mixedA){
+	    float relA=(placer>100 ? placer*.01-1. : 0.);
+	    float relAP=(placerP>100 ? placerP*.01-1. : 0.);
+
+	    float attA=fromdB((ms.curr[i].master_att + ms.curr[i].placer_att * relA)*.1);
+	    float attAP=fromdB((ms.prev[i].master_att + ms.prev[i].placer_att * relAP)*.1);
+	    int delA=rint((ms.curr[i].master_delay + ms.curr[i].placer_delay * relA)*.00001*input_rate);
+	    int delAP=rint((ms.prev[i].master_delay + ms.prev[i].placer_delay * relAP)*.00001*input_rate);
+
+	    float attA_r=fromdB(ms.curr[i].master_att*.1);
+	    float attAP_r=fromdB(ms.prev[i].master_att*.1);
+	    int delA_r=rint(ms.curr[i].master_delay*.00001*input_rate);
+	    int delAP_r=rint(ms.prev[i].master_delay*.00001*input_rate);
+
 	    memset(mixA,0,sizeof(mixA));
 	    mixwork(in->data[i],ms.cacheP[i],ms.cachePP[i],
 		    mixA,attA,delA,0,attAP,delAP,0);
+	    mixwork(inA->data[i],ms.cachePA[i],ms.cachePPA[i],
+		    mixA,attA_r,delA_r,0,attAP_r,delAP_r,0);
 	    mixedA=1;
+
 	  }
 	  mixadd(mixA,ms.out.data[j],destA,destAP);
 	}
@@ -412,9 +391,24 @@
 	  outactive[j]=1;
 	  
 	  if(!mixedB){
+	    float relB=(placer<100 ? 1.-placer*.01 : 0.);
+	    float relBP=(placerP<100 ? 1.-placerP*.01 : 0.);
+
+	    float attB=fromdB((ms.curr[i].master_att + ms.curr[i].placer_att * relB)*.1);
+	    float attBP=fromdB((ms.prev[i].master_att + ms.prev[i].placer_att * relBP)*.1);
+	    int delB=rint((ms.curr[i].master_delay + ms.curr[i].placer_delay * relB)*.00001*input_rate);
+	    int delBP= rint((ms.prev[i].master_delay + ms.prev[i].placer_delay * relBP)*.00001*input_rate);
+
+	    float attB_r=fromdB(ms.curr[i].master_att*.1);
+	    float attBP_r=fromdB(ms.prev[i].master_att*.1);
+	    int delB_r=rint(ms.curr[i].master_delay*.00001*input_rate);
+	    int delBP_r= rint(ms.prev[i].master_delay*.00001*input_rate);
+	    
 	    memset(mixB,0,sizeof(mixB));
 	    mixwork(in->data[i],ms.cacheP[i],ms.cachePP[i],
 		    mixB,attB,delB,0,attBP,delBP,0);
+	    mixwork(inB->data[i],ms.cachePB[i],ms.cachePPB[i],
+		    mixB,attB_r,delB_r,0,attBP_r,delBP_r,0);
 	    mixedB=1;
 	  }
 	  mixadd(mixB,ms.out.data[j],destB,destBP);

Modified: trunk/postfish/mixpanel.c
===================================================================
--- trunk/postfish/mixpanel.c	2005-01-03 02:25:51 UTC (rev 8580)
+++ trunk/postfish/mixpanel.c	2005-01-03 03:41:05 UTC (rev 8581)
@@ -351,6 +351,9 @@
       ps->destA[i]=bA;
       ps->destB[i]=bB;
     }
+
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ps->destA[0]),1);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ps->destB[1]),1);
     
     gtk_table_attach(GTK_TABLE(table),lA,0,2,6,7,
 		     0,0,0,0);
@@ -469,11 +472,6 @@
 		      G_CALLBACK (toggle_callback), 
 		      (gpointer)&m->insert_source[i][2]);
 
-    if(i==0){
-      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bM),1);
-      gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(bA),1);
-    }
-
     for(j=0;j<OUTPUT_CHANNELS;j++){
       char buffer[80];
       GtkWidget *b;
@@ -485,9 +483,6 @@
 			G_CALLBACK (toggle_callback), 
 			(gpointer)&m->insert_dest[i][j]);
 
-      if(thisch%2 == j && i == 0)
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(b),1);
-
       ps->insert_dest[i][j]=b;
 
       gtk_box_pack_start(GTK_BOX(boxB),b,1,1,0);

Modified: trunk/postfish/version.h
===================================================================
--- trunk/postfish/version.h	2005-01-03 02:25:51 UTC (rev 8580)
+++ trunk/postfish/version.h	2005-01-03 03:41:05 UTC (rev 8581)
@@ -1,2 +1,2 @@
 #define VERSION "$Id$ "
-/* DO NOT EDIT: Automated versioning hack [Sun Jan  2 21:30:12 EST 2005] */
+/* DO NOT EDIT: Automated versioning hack [Sun Jan  2 22:19:56 EST 2005] */



More information about the commits mailing list