[xiph-commits] r8578 - trunk/postfish
xiphmont at motherfish-iii.xiph.org
xiphmont at motherfish-iii.xiph.org
Sun Jan 2 12:21:02 PST 2005
Author: xiphmont
Date: 2005-01-02 12:21:01 -0800 (Sun, 02 Jan 2005)
New Revision: 8578
Added:
trunk/postfish/internal.h
trunk/postfish/linkage.c
Removed:
trunk/postfish/reverb.c
trunk/postfish/reverb.h
Modified:
trunk/postfish/Makefile
trunk/postfish/README
trunk/postfish/bessel.c
trunk/postfish/bessel.h
trunk/postfish/clippanel.c
trunk/postfish/clippanel.h
trunk/postfish/compandpanel.c
trunk/postfish/compandpanel.h
trunk/postfish/config.c
trunk/postfish/config.h
trunk/postfish/declip.c
trunk/postfish/declip.h
trunk/postfish/deverb.c
trunk/postfish/deverb.h
trunk/postfish/deverbpanel.c
trunk/postfish/deverbpanel.h
trunk/postfish/eq.c
trunk/postfish/eq.h
trunk/postfish/eqpanel.c
trunk/postfish/eqpanel.h
trunk/postfish/feedback.c
trunk/postfish/feedback.h
trunk/postfish/follower.c
trunk/postfish/follower.h
trunk/postfish/freq.c
trunk/postfish/freq.h
trunk/postfish/input.c
trunk/postfish/input.h
trunk/postfish/limit.c
trunk/postfish/limit.h
trunk/postfish/limitpanel.c
trunk/postfish/limitpanel.h
trunk/postfish/lpc.c
trunk/postfish/lpc.h
trunk/postfish/main.c
trunk/postfish/mainpanel.c
trunk/postfish/mainpanel.h
trunk/postfish/mix.c
trunk/postfish/mix.h
trunk/postfish/mixpanel.c
trunk/postfish/mixpanel.h
trunk/postfish/multibar.c
trunk/postfish/multibar.h
trunk/postfish/multicompand.c
trunk/postfish/multicompand.h
trunk/postfish/mute.c
trunk/postfish/mute.h
trunk/postfish/outpanel.c
trunk/postfish/outpanel.h
trunk/postfish/output.c
trunk/postfish/output.h
trunk/postfish/postfish.h
trunk/postfish/readout.c
trunk/postfish/readout.h
trunk/postfish/reconstruct.c
trunk/postfish/reconstruct.h
trunk/postfish/reverbpanel.c
trunk/postfish/reverbpanel.h
trunk/postfish/singlecomp.c
trunk/postfish/singlecomp.h
trunk/postfish/singlepanel.c
trunk/postfish/singlepanel.h
trunk/postfish/subband.c
trunk/postfish/subband.h
trunk/postfish/subpanel.c
trunk/postfish/subpanel.h
trunk/postfish/version.h
trunk/postfish/window.c
trunk/postfish/window.h
trunk/postfish/windowbutton.c
trunk/postfish/windowbutton.h
Log:
Update copyrights
Replace existing SWH reverb unit with an extension of Freeverb3
Modified: trunk/postfish/Makefile
===================================================================
--- trunk/postfish/Makefile 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/Makefile 2005-01-02 20:21:01 UTC (rev 8578)
@@ -6,17 +6,16 @@
# Use the below line to build for PowerPC
# The PPC build *must* use -maltivec, even if the target is a non-altivec machine
-#ADD_DEF= -DUGLY_IEEE754_FLOAT32_HACK=1 -maltivec -mcpu=7400
+ADD_DEF= -DUGLY_IEEE754_FLOAT32_HACK=1 -maltivec -mcpu=7400
# use the below for x86 and most other platforms where 'float' is 32 bit IEEE754
-ADD_DEF= -DUGLY_IEEE754_FLOAT32_HACK=1
+#ADD_DEF= -DUGLY_IEEE754_FLOAT32_HACK=1
# use the below for anything without IEE754 floats (eg, VAX)
# ADD_DEF=
-
CC=gcc
LD=gcc
INSTALL=install
@@ -29,14 +28,15 @@
declip.c reconstruct.c multicompand.c windowbutton.c subpanel.c \
feedback.c freq.c eq.c eqpanel.c compandpanel.c subband.c lpc.c \
bessel.c deverbpanel.c deverb.c singlecomp.c singlepanel.c \
- limit.c limitpanel.c mute.c mixpanel.c mix.c reverb.c reverbpanel.c \
- outpanel.c config.c window.c follower.c
+ limit.c limitpanel.c mute.c mixpanel.c mix.c freeverb.c reverbpanel.c \
+ outpanel.c config.c window.c follower.c linkage.c
OBJ = main.o mainpanel.o multibar.o readout.o input.o output.o clippanel.o \
declip.o reconstruct.o multicompand.o windowbutton.o subpanel.o \
feedback.o freq.o eq.o eqpanel.o compandpanel.o subband.o lpc.o \
bessel.o deverbpanel.o deverb.o singlecomp.o singlepanel.o \
- limit.o limitpanel.o mute.o mixpanel.o mix.o reverb.o reverbpanel.o \
- outpanel.o config.o window.o follower.o
+ limit.o limitpanel.o mute.o mixpanel.o mix.o freeverb.o reverbpanel.o \
+ outpanel.o config.o window.o follower.o linkage.o
+
GCF = -DETCDIR=\\\"$(ETCDIR)\\\" `pkg-config --cflags gtk+-2.0` -DG_DISABLE_DEPRECATED -DGDK_DISABLE_DEPRECATED -DGTK_DISABLE_DEPRECATED -DGDK_PIXBUF_DISABLE_DEPRECATED
all:
Modified: trunk/postfish/README
===================================================================
--- trunk/postfish/README 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/README 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,4 +1,4 @@
-This README file covers the 2004-05-29 pre-release of the Postfish by
+This README file covers the 2005-01-01 pre-release of the Postfish by
Xiph.Org.
>>>> What is the Postfish?
@@ -17,7 +17,9 @@
optionally providing a configurable audio playback monitor via a
sound device. If the input audio is being taken from files,
Postfish also provides simple forward/back/cue seeking and A-B
- looping control.
+ looping control. The next major update of Postfish will also
+ include automation to allow mixdown settings to be 'recorded' and
+ applied automatically during rendering.
>>>> What is the Postfish for?
@@ -25,26 +27,26 @@
basic filters needed to produce a good mixdown from audio recorded
'in the field'. The filter set also comprises the fundamentals
needed for master mixdown in a small studio. It is not an editor;
- for that reason, it's intended to be used with an audio editor, such
+ for that reason, it is intended to be used with an audio editor such
as Audacity.
- If, for example, you've just multi-track recorded a rehearsal of
- your troupe's current rock opera and the Director then appears out
- of nowhere (they always do) and says "Have a mix for my review by
+ If, for example, you've just multi-tracked a rehearsal of your
+ troupe's current rock opera and the Director then appears out of
+ nowhere (they always do) and says "Have a mix ready for my review by
morning", the Postfish is all you need.
Or, as another example, you've recorded for a band who'd like to put
out a CD of the live performance... All the band FX are already in
the multi-track, so the Postfish plus Audacity is all you need.
- In a studio situation, tracks usually get recorded dry, so there's
- generally multiple mixdown stages of adding effects. Postfish
- (obviously) does not give you a large array of instrument or
- situation-specific effects and it never will (dammit). What it does
- give you is the effects necessary to take the tracks from earlier
- mixing and produce intermediate mixes and final masters. Of course,
- if you already have $100k of analog rack... you likely won't be
- using Postfish. But hey, who knows....
+ In a studio, tracks usually get recorded dry, so there's generally
+ multiple mixdown stages of adding effects. Postfish (obviously)
+ does not give you a large array of instrument or situation-specific
+ effects and it never will. What it does give you is the effects
+ necessary to take the tracks from earlier mixing and produce preview
+ mixes and final masters. Of course, if you already have $100k of
+ analog rack... you likely won't be using Postfish. If you don't
+ have that rack already, Postfish means you won't need it.
>>>> What effects does the Postfish include?
@@ -94,12 +96,13 @@
Live recordings have a tendency to end up with too much reverb,
especially when one is forced to use ambient miking. The
- deverberator dries out overly 'wet' live signals.
+ deverberator dries out overly 'wet' live signals. Also good for
+ taking unwanted room echo out of speech recordings.
Reverberator:
...for adding reverb to signals that are too 'dry', especially to
- even out apparent depth when mixing close miked signals (like
+ even out apparent stage depth when mixing close miked signals (like
vocals) to an ambient-miked signal.
The Postfish provides a stereo reverb per input channel and a mono
@@ -150,10 +153,9 @@
The short/wrong answer is maybe. The complicated answer is no.
.) I needed a specific set of filters
- .) I needed them in one place working together
- .) I needed to hear changes I made to settings as I made them
- .) I needed to be able to absolutely trust the filters would function
- as expected
+ .) I needed them in one place working together 'out of the box'
+ .) I needed to instantly hear changes I made to settings as I made them
+ .) I needed to be able to absolutely trust the filters
.) I needed it all to be convenient to use
Given my specific requirements, nothing else came close to filling
@@ -163,16 +165,16 @@
Both the Postfish UI and the filter functionality are intended to be
the most usable day-to-day set, rather than sporting the maximum
- number of buttons in the smallest space or more features than the
- next app (or the slickest skin).
+ number of buttons in the smallest space, pack in more features than
+ the next app, or sport the slickest 'skin'.
Postfish is the way it is because I need it, and I use it for the
core basics of mixing that I absolutely cannot afford to screw up.
Some filters (like the declipper and deverberator) are unique. Even
- among those that aren't, Postfish as implemented deliberately sets
- speed/quality tradeoff much higher than most existing apps.
+ among those that aren't, Postfish deliberately sets speed/quality
+ tradeoff much higher than most existing apps.
- The multiband compander is a case in point; other free apps do
+ The multiband compander is a case in point; other free apps
implement this effect. To my knowledge, all use the simplest/fastest
method, operating directly on the FFT of a windowed block. An
FFT-based multicompander is fast, but the aliasing and frequency
@@ -194,13 +196,15 @@
Seriously, this is a very CPU hungry app because of the
aforementioned speed/quality tradeoff. I can do simple mixdown of 8
channels to stereo with a few effects in realtime on my G3-400, but
- the machine is crying. The dual Athlon 2600 keeps up much better,
+ the machine is crying. My dual Athlon 2600 keeps up much better,
but it's still possible to overwhelm it by lighting up all the
effects and feeding it enough input channels. The declipper,
especially, eats CPU on heavily damaged audio. The multiband
- compander is runner up in 'absurd levels of CPU usage'.
+ compander is runner up in 'absurd levels of CPU usage'. If you
+ don't have fast AGP video, the EQ panel alone will probably kill
+ your machine.
- Postfish, BTW, is designed to scale to dual CPUs. A dual
+ Postfish, BTW, is designed to scale to multiple CPUs. A dual
Athlon/Pentium/UltraSparc/PowerPC runs Postfish much better than a
single processor.
@@ -208,9 +212,8 @@
Because it's not finished. A few things are more obvious than others:
- 1) The 'cue sheet' and 'settings list' panels are still
- unimplemented. These are the only inactive features on the UI,
- but they're right on the main panel.
+ 1) A number of panels are still unimplemented. These are the only
+ inactive features on the UI, but they're right on the main panel.
2) Postfish *should* be a JACK-able app, but isn't. That too should
be done for a real release.
@@ -220,21 +223,16 @@
asynchronous UI, the source isn't entirely arranged that way. It
should be. It will be for final release.
- 4) The stereo reverb code used by Postfish is Steve Harris's GPL
- plate reverb from LADSPA. Although this is a solid, reliable
- reverb implementation, it's also a bit thinner on final output
- results than I'd like. Don't get me wrong, this reverb is
- excellent code, but it places emphasis more toward 'fast' rather
- than my desired 'best possible results given unlimited CPU'. I'm
- evaluating other reverb implementations; this is a case where
- others have achieved clearly better results than I would, and
- thus I plan to use the best available to me.
-
- 5) This code is just now seeing light of day. It is probably *full*
+ 4) This code is just now seeing light of day. It is probably *full*
of simple bugs. I'm confident in the audio pipeline itself (I've
hammered on it mercilessly) but there's certainly many UI
interconnection bugs left to find.
+ 5) The automation robot isn't there yet. Right now a user has to
+ frob knobs in realtime to make settings adjustments during a
+ render. That's not really acceptible. All teh setttings changes
+ must be preprogrammable; they will be.
+
6) Everyone knows a release requires documentation. There is no
documentation.
@@ -242,13 +240,20 @@
Not yet; good documentation requires effort and time.
- That said, if read the list of effects, knew what they were, and
+ That said, if you read the list of effects, knew what they were, and
knew basically how to use them, you should be able to pick up the
- Postfish and do useful work in a few minutes of playing around.
+ Postfish and do useful work in a few minutes of playing around.
I took care to establish and follow conventions in the UI: If you're
using the shipped postfish-gtkrc theme, square blue buttons turn
- things on. Triangular blue buttons pop configuration windows.
+ things on. Triangular blue buttons pop configuration windows.
+
+ (If you're running a nonstandard system-wide Gtk2 'theme' that skins
+ a set of custom widget renderers into Gtk, well, I'll let you deal
+ with figuring the convention out as I use a number of custom widgets
+ subclassed from 'stock' Gtk and so you'll see a mixmash of classic
+ Gtk and your skin. Sorry, no way around it other than to purpousely
+ defeat your 'theme' which you probably won't like either.)
The grid of buttons on the right in the 'channel' frame are the
effects for the input channels. The square blue buttons turn a
@@ -259,7 +264,7 @@
Further right is the "master" panel; these controls work the same
way for effects on the output channels after mixdown.
- Finally, postfish -h will tell you how to get audio in and read
+ Finally, postfish -h will tell you how to get audio in and reroute
audio out.
Only two things are probably impossible to figure out just from
Modified: trunk/postfish/bessel.c
===================================================================
--- trunk/postfish/bessel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/bessel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/bessel.h
===================================================================
--- trunk/postfish/bessel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/bessel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/clippanel.c
===================================================================
--- trunk/postfish/clippanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/clippanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/clippanel.h
===================================================================
--- trunk/postfish/clippanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/clippanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/compandpanel.c
===================================================================
--- trunk/postfish/compandpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/compandpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/compandpanel.h
===================================================================
--- trunk/postfish/compandpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/compandpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/config.c
===================================================================
--- trunk/postfish/config.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/config.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/config.h
===================================================================
--- trunk/postfish/config.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/config.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/declip.c
===================================================================
--- trunk/postfish/declip.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/declip.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/declip.h
===================================================================
--- trunk/postfish/declip.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/declip.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/deverb.c
===================================================================
--- trunk/postfish/deverb.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/deverb.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/deverb.h
===================================================================
--- trunk/postfish/deverb.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/deverb.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/deverbpanel.c
===================================================================
--- trunk/postfish/deverbpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/deverbpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/deverbpanel.h
===================================================================
--- trunk/postfish/deverbpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/deverbpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/eq.c
===================================================================
--- trunk/postfish/eq.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/eq.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/eq.h
===================================================================
--- trunk/postfish/eq.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/eq.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/eqpanel.c
===================================================================
--- trunk/postfish/eqpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/eqpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/eqpanel.h
===================================================================
--- trunk/postfish/eqpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/eqpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/feedback.c
===================================================================
--- trunk/postfish/feedback.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/feedback.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/feedback.h
===================================================================
--- trunk/postfish/feedback.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/feedback.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/follower.c
===================================================================
--- trunk/postfish/follower.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/follower.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/follower.h
===================================================================
--- trunk/postfish/follower.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/follower.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/freq.c
===================================================================
--- trunk/postfish/freq.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/freq.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/freq.h
===================================================================
--- trunk/postfish/freq.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/freq.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/input.c
===================================================================
--- trunk/postfish/input.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/input.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/input.h
===================================================================
--- trunk/postfish/input.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/input.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,3 +1,26 @@
+/*
+ *
+ * postfish
+ *
+ * Copyright (C) 2002-2005 Monty
+ *
+ * Postfish is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * Postfish is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Postfish; see the file COPYING. If not, write to the
+ * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
extern void input_Acursor_set(off_t c);
extern void input_Bcursor_set(off_t c);
extern off_t input_time_to_cursor(const char *t);
Added: trunk/postfish/internal.h
===================================================================
--- trunk/postfish/internal.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/internal.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -0,0 +1,31 @@
+/*
+ *
+ * postfish
+ *
+ * Copyright (C) 2002-2005 Monty
+ *
+ * Postfish is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * Postfish is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Postfish; see the file COPYING. If not, write to the
+ * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
+extern void time_linkage_init(time_linkage *new,int ch);
+extern int time_linkage_copy(time_linkage *dest,time_linkage *src);
+extern int time_linkage_channels(time_linkage *in);
+extern int time_linkage_samples(time_linkage *in);
+extern int time_linkage_init_alias_split(time_linkage *in,time_linkage *out);
+extern void time_linkage_init_alias_combine(time_linkage *in,time_linkage *out,int ch);
+extern void time_linkage_swap(time_linkage *a, time_linkage *b);
+extern void time_linkage_clear(time_linkage *in);
Modified: trunk/postfish/limit.c
===================================================================
--- trunk/postfish/limit.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/limit.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/limit.h
===================================================================
--- trunk/postfish/limit.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/limit.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/limitpanel.c
===================================================================
--- trunk/postfish/limitpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/limitpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/limitpanel.h
===================================================================
--- trunk/postfish/limitpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/limitpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Added: trunk/postfish/linkage.c
===================================================================
--- trunk/postfish/linkage.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/linkage.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -0,0 +1,118 @@
+/*
+ *
+ * postfish
+ *
+ * Copyright (C) 2002-2005 Monty
+ *
+ * Postfish is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * Postfish is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Postfish; see the file COPYING. If not, write to the
+ * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
+#include "postfish.h"
+#include "internal.h"
+
+void time_linkage_init(time_linkage *new,int ch){
+ int i;
+
+ new->samples=0;
+ new->channels=ch;
+ new->active=0;
+ new->alias=0;
+ new->data=malloc(ch*sizeof(*new->data));
+
+ for(i=0;i<ch;i++)
+ new->data[i]=malloc(input_size*sizeof(*new->data));
+}
+
+int time_linkage_channels(time_linkage *in){
+ return in->channels;
+}
+
+int time_linkage_samples(time_linkage *in){
+ return in->samples;
+}
+
+/* in: pointer to single initialized time_linkage structure
+ out: pointer to array of (in->channels) time_linkage structures */
+
+int time_linkage_init_alias_split(time_linkage *in,time_linkage *out){
+ int i;
+ int ch=in->channels;
+
+ for(i=0;i<ch;i++){
+ out[i].samples=0;
+ out[i].channels=1;
+ out[i].active=0;
+ out[i].alias=1;
+ out[i].data=malloc(sizeof(*out->data));
+ out[i].data[0]=in->data[i];
+ }
+ return 0;
+}
+
+/* in: pointer to array of ch initialized time_linkage structs
+ out: pointer to single uninitialized time_linkage struct
+ ch: number of input linkages, number of channels in output linkage */
+
+void time_linkage_init_alias_combine(time_linkage *in,time_linkage *out,int ch){
+ int i;
+
+ out->alias=1;
+ out->samples=0;
+ out->channels=ch;
+ out->active=0;
+ out->data=malloc(ch*sizeof(*out->data));
+
+ for(i=0;i<ch;i++)
+ out->data[i]=in[i].data[0];
+}
+
+void time_linkage_swap(time_linkage *a, time_linkage *b){
+ float **dtmp=a->data;
+ int ctmp=a->channels;
+ int stmp=a->samples;
+ u_int32_t atmp=a->active;
+
+ a->data=b->data;
+ b->data=dtmp;
+
+ a->channels=b->channels;
+ b->channels=ctmp;
+
+ a->samples=b->samples;
+ b->samples=stmp;
+
+ a->active=b->active;
+ b->active=atmp;
+}
+
+void time_linkage_clear(time_linkage *in){
+ int i;
+ for(i=0;i<in->channels;i++)
+ memset(in->data[i],0,sizeof(**in->data)*input_size);
+}
+
+int time_linkage_copy(time_linkage *dest,time_linkage *src){
+ int i;
+ if(dest->channels != src->channels)return -1;
+
+ for(i=0;i<dest->channels;i++)
+ memcpy(dest->data[i],src->data[i],input_size*sizeof(**src->data));
+ dest->samples=src->samples;
+ dest->active=src->active;
+
+ return 0;
+}
Modified: trunk/postfish/lpc.c
===================================================================
--- trunk/postfish/lpc.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/lpc.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish.c
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/lpc.h
===================================================================
--- trunk/postfish/lpc.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/lpc.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/main.c
===================================================================
--- trunk/postfish/main.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/main.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2003 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -43,7 +43,7 @@
#include "limit.h"
#include "mute.h"
#include "mix.h"
-#include "reverb.h"
+#include "freeverb.h"
#include "version.h"
#include "config.h"
#include "mainpanel.h"
@@ -342,7 +342,7 @@
if(limit_load(OUTPUT_CHANNELS))exit(1);
if(mute_load())exit(1);
if(mix_load(OUTPUT_CHANNELS))exit(1);
- if(plate_load(OUTPUT_CHANNELS))exit(1);
+ if(p_reverb_load())exit(1);
/* easiest way to inform gtk of changes and not deal with locking
issues around the UI */
Modified: trunk/postfish/mainpanel.c
===================================================================
--- trunk/postfish/mainpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mainpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mainpanel.h
===================================================================
--- trunk/postfish/mainpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mainpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mix.c
===================================================================
--- trunk/postfish/mix.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mix.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mix.h
===================================================================
--- trunk/postfish/mix.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mix.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mixpanel.c
===================================================================
--- trunk/postfish/mixpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mixpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mixpanel.h
===================================================================
--- trunk/postfish/mixpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mixpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/multibar.c
===================================================================
--- trunk/postfish/multibar.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/multibar.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/multibar.h
===================================================================
--- trunk/postfish/multibar.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/multibar.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/multicompand.c
===================================================================
--- trunk/postfish/multicompand.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/multicompand.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/multicompand.h
===================================================================
--- trunk/postfish/multicompand.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/multicompand.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mute.c
===================================================================
--- trunk/postfish/mute.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mute.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/mute.h
===================================================================
--- trunk/postfish/mute.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/mute.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/outpanel.c
===================================================================
--- trunk/postfish/outpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/outpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/outpanel.h
===================================================================
--- trunk/postfish/outpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/outpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/output.c
===================================================================
--- trunk/postfish/output.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/output.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2003 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -36,7 +36,7 @@
#include "limit.h"
#include "mute.h"
#include "mix.h"
-#include "reverb.h"
+#include "freeverb.h"
output_settings outset;
@@ -71,7 +71,7 @@
limit_reset(); /* clear any persistent lapping state */
output_reset(); /* clear any persistent lapping state */
mix_reset();
- plate_reset();
+ p_reverb_reset();
}
typedef struct output_feedback{
@@ -847,7 +847,7 @@
{
time_linkage *reverbA;
time_linkage *reverbB;
- link=plate_read_channel(link,&reverbA,&reverbB);
+ link=p_reverb_read_channel(link,&reverbA,&reverbB);
link=mix_read(link,reverbA,reverbB);
result|=link->samples;
@@ -860,7 +860,7 @@
result|=link->samples;
link=eq_read_master(link);
result|=link->samples;
- link=plate_read_master(link);
+ link=p_reverb_read_master(link);
result|=link->samples;
if(!result)break;
Modified: trunk/postfish/output.h
===================================================================
--- trunk/postfish/output.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/output.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/postfish.h
===================================================================
--- trunk/postfish/postfish.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/postfish.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2003 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -95,10 +95,14 @@
}
static inline float fromdB_a(float x){
- int y=(x < -300 ? 0 : 1.39331762961e+06f*(x+764.6161886f));
+ int y=(x < -300.f ? 0 : 1.39331762961e+06f*(x+764.6161886f));
return *(float *)&y;
}
+static inline void underguard(float *x){
+ if(((*(int32_t *) &x) & 0x7f800000)==0) *x=0.0f;
+}
+
#else
static inline float todB_a(const float *x){
@@ -109,6 +113,10 @@
return fromdB(x);
}
+static inline void underguard(float *x){
+ if(*x<1e-30f && *x>-1e-30f) x=0.0f;
+}
+
#endif
#ifndef max
@@ -121,13 +129,20 @@
#define toBark(n) (13.1f*atan(.00074f*(n))+2.24f*atan((n)*(n)*1.85e-8f)+1e-4f*(n))
#define fromBark(z) (102.f*(z)-2.f*pow(z,2.f)+.4f*pow(z,3.f)+pow(1.46f,z)-1.f)
+typedef struct postfish_instance {
+ int blocksize;
+ int rate;
+} postfish_instance;
+
typedef struct time_linkage {
+ int alias;
int samples; /* normally same as size; exception is EOF */
int channels;
float **data;
u_int32_t active; /* active channel bitmask */
} time_linkage;
+
extern sig_atomic_t loop_active;
extern sig_atomic_t playback_active;
extern sig_atomic_t playback_exit;
Modified: trunk/postfish/readout.c
===================================================================
--- trunk/postfish/readout.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/readout.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/readout.h
===================================================================
--- trunk/postfish/readout.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/readout.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/reconstruct.c
===================================================================
--- trunk/postfish/reconstruct.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/reconstruct.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/reconstruct.h
===================================================================
--- trunk/postfish/reconstruct.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/reconstruct.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Deleted: trunk/postfish/reverb.c
===================================================================
--- trunk/postfish/reverb.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/reverb.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,536 +0,0 @@
-/*
- *
- * postfish
- *
- * Copyright (C) 2002-2004 Monty
- *
- * Postfish is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * Postfish is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Postfish; see the file COPYING. If not, write to the
- * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- */
-
-/* The plate reverb implementation in this file is originally the work
- of Steve Harris, released under the GPL2 as part of the SWH plugins
- package. In the interests of proper attribution, the 'AUTHORS' file
- from SWH is reproduced here:
-
- "[Authors] In no particular order:
-
- Steve Harris - general stuff
- Frank Neumann - documentation, proofreading, DSP code
- Juhana Sadeharju - DSP code
- Joern Nettingsmeier - DSP code, bug reports and inspiration
- Mark Knecht - testesting, docuementation
- Pascal Haakmat - bugfixes, testing
- Marcus Andersson - DSP code
- Paul Winkler - documentation
- Matthias Nagorni - testing, inspiration
- Nathaniel Virgo - bugfixes
- Patrick Shirkey - testing, inspiration
-
- Project maintainted by Steve Harris, Southampton UK.
- steve at plugin.org.uk or swh at ecs.soton.ac.uk
-
- Plugin website at http://plugin.org.uk/"
-*/
-
-#include "postfish.h"
-#include "reverb.h"
-#include "window.h"
-
-typedef struct {
- int size;
- float *buffer[2];
- int ptr;
- int dptr;
- int dptr_pending;
- int delay;
- int delay_pending;
- float fc;
- float lp[2];
- float a1a;
- float a1b;
- float zm1[2];
-} waveguide_nl;
-
-typedef struct {
- float *outbuffer;
- waveguide_nl w[8];
- int prevwet;
- int initstate;
-} plate;
-
-typedef struct {
- time_linkage out;
- time_linkage outA;
- time_linkage outB;
-
- plate *plates;
- int *prevactive;
- int fillstate;
-} plate_state;
-
-extern int input_size;
-extern int input_ch;
-
-float *window;
-plate_set *plate_channel_set;
-plate_set plate_master_set;
-
-static plate_state channel;
-static plate_state master;
-
-/* linear waveguide model */
-
-static void waveguide_init(waveguide_nl *wg,
- int size, float fc, float da, float db){
- wg->size = size;
- wg->delay_pending = size;
- wg->delay = -1;
- wg->buffer[0] = calloc(size, sizeof(float));
- wg->buffer[1] = calloc(size, sizeof(float));
- wg->ptr = 0;
- wg->dptr = 0;
- wg->dptr_pending = 0;
- wg->fc = fc;
- wg->lp[0] = 0.0f;
- wg->lp[1] = 0.0f;
- wg->zm1[0] = 0.0f;
- wg->zm1[1] = 0.0f;
- wg->a1a = (1.0f - da) / (1.0f + da);
- wg->a1b = (1.0f - db) / (1.0f + db);
-
-}
-
-static void waveguide_nl_reset(waveguide_nl *wg){
- memset(wg->buffer[0], 0, wg->size * sizeof(**wg->buffer));
- memset(wg->buffer[1], 0, wg->size * sizeof(**wg->buffer));
- wg->lp[0] = 0.0f;
- wg->lp[1] = 0.0f;
- wg->zm1[0] = 0.0f;
- wg->zm1[1] = 0.0f;
-
- wg->ptr=0;
- wg->dptr = wg->delay;
- wg->dptr_pending = wg->delay_pending;
-}
-
-static void waveguide_nl_set_delay(waveguide_nl *wg, int delay){
- if (delay > wg->size) {
- wg->delay_pending = wg->size;
- } else if (delay < 1) {
- wg->delay_pending = 1;
- } else {
- wg->delay_pending = delay;
- }
-
- wg->dptr_pending = wg->ptr + wg->delay_pending;
- if(wg->dptr_pending >= wg->size) wg->dptr_pending -= wg->size;
- if(wg->dptr==-1){
- wg->delay=wg->delay_pending;
- wg->dptr=wg->dptr_pending;
- }
-}
-
-static void waveguide_nl_set_fc(waveguide_nl *wg, float fc){
- wg->fc = fc;
-}
-
-static void waveguide_nl_process_lin(waveguide_nl *wg, float in0, float in1,
- float *out0, float *out1, int i){
- float tmp;
-
- *out0 = wg->buffer[0][wg->dptr];
- *out0 = wg->lp[0] * (wg->fc - 1.0f) + wg->fc * *out0;
- wg->lp[0] = *out0;
- tmp = *out0 * -(wg->a1a) + wg->zm1[0];
- wg->zm1[0] = tmp * wg->a1a + *out0;
- *out0 = tmp;
-
- *out1 = wg->buffer[1][wg->dptr];
- *out1 = wg->lp[1] * (wg->fc - 1.0f) + wg->fc * *out1;
- wg->lp[1] = *out1;
- tmp = *out1 * -(wg->a1a) + wg->zm1[1];
- wg->zm1[1] = tmp * wg->a1a + *out1;
- *out1 = tmp;
-
- wg->buffer[0][wg->ptr] = in0;
- wg->buffer[1][wg->ptr] = in1;
- wg->ptr--;
- wg->dptr--;
- if (wg->ptr < 0) wg->ptr += wg->size;
- if (wg->dptr < 0) wg->dptr += wg->size;
-}
-
-static void waveguide_nl_process_trans(waveguide_nl *wg, float in0, float in1,
- float *out0, float *out1, int i){
- float tmp;
-
- *out0 = wg->buffer[0][wg->dptr]*(1.-window[i]) +
- wg->buffer[0][wg->dptr_pending]*window[i];
- *out0 = wg->lp[0] * (wg->fc - 1.0f) + wg->fc * *out0;
- wg->lp[0] = *out0;
- tmp = *out0 * -(wg->a1a) + wg->zm1[0];
- wg->zm1[0] = tmp * wg->a1a + *out0;
- *out0 = tmp;
-
- *out1 = wg->buffer[1][wg->dptr]*(1.-window[i]) +
- wg->buffer[1][wg->dptr_pending]*window[i];
- *out1 = wg->lp[1] * (wg->fc - 1.0f) + wg->fc * *out1;
- wg->lp[1] = *out1;
- tmp = *out1 * -(wg->a1a) + wg->zm1[1];
- wg->zm1[1] = tmp * wg->a1a + *out1;
- *out1 = tmp;
-
- wg->buffer[0][wg->ptr] = in0;
- wg->buffer[1][wg->ptr] = in1;
- wg->ptr--;
- wg->dptr--;
- wg->dptr_pending--;
- if (wg->ptr < 0) wg->ptr += wg->size;
- if (wg->dptr < 0) wg->dptr += wg->size;
- if (wg->dptr_pending < 0) wg->dptr_pending += wg->size;
-}
-
-/* model the plate reverb as a set of eight linear waveguides */
-
-#define LP_INNER 0.96f
-#define LP_OUTER 0.983f
-
-#define RUN_WG(n, junct_a, junct_b, i) process(&w[n], junct_a - out[n*2+1], junct_b - out[n*2], out+n*2, out+n*2+1, i)
-
-static void plate_reset_helper(plate_state *ps){
- ps->fillstate=0;
-}
-
-void plate_reset(void){
- plate_reset_helper(&master);
- plate_reset_helper(&channel);
-}
-
-static void plate_init(plate *p){
- memset(p,0,sizeof(*p));
- p->outbuffer = calloc(32, sizeof(*p->outbuffer));
-
- waveguide_init(&p->w[0], 2389, LP_INNER, 0.04f, 0.0f);
- waveguide_init(&p->w[1], 4742, LP_INNER, 0.17f, 0.0f);
- waveguide_init(&p->w[2], 4623, LP_INNER, 0.52f, 0.0f);
- waveguide_init(&p->w[3], 2142, LP_INNER, 0.48f, 0.0f);
- waveguide_init(&p->w[4], 5597, LP_OUTER, 0.32f, 0.0f);
- waveguide_init(&p->w[5], 3692, LP_OUTER, 0.89f, 0.0f);
- waveguide_init(&p->w[6], 5611, LP_OUTER, 0.28f, 0.0f);
- waveguide_init(&p->w[7], 3703, LP_OUTER, 0.29f, 0.0f);
-
-}
-
-int plate_load(int outch){
- int i;
-
- /* setting storage */
- memset(&plate_master_set,0,sizeof(plate_master_set));
- plate_channel_set=calloc(input_ch,sizeof(*plate_channel_set));
-
- /* output linkages for master and channels */
-
- master.out.channels=outch;
- master.out.data=malloc(outch*sizeof(*master.out.data));
- for(i=0;i<outch;i++)
- master.out.data[i]=malloc(input_size*sizeof(**master.out.data));
-
- channel.out.channels=input_ch;
- channel.outA.channels=input_ch;
- channel.outB.channels=input_ch;
- channel.out.data=malloc(input_ch*sizeof(*channel.out.data));
- channel.outA.data=malloc(input_ch*sizeof(*channel.outA.data));
- channel.outB.data=malloc(input_ch*sizeof(*channel.outB.data));
- for(i=0;i<input_ch;i++){
- channel.out.data[i]=malloc(input_size*sizeof(**master.out.data));
- channel.outA.data[i]=malloc(input_size*sizeof(**master.outA.data));
- channel.outB.data[i]=malloc(input_size*sizeof(**master.outB.data));
- }
-
- /* allocate/initialize plates */
- channel.plates=calloc(input_ch,sizeof(*channel.plates));
- for(i=0;i<input_ch;i++)
- plate_init(&channel.plates[i]);
-
- master.plates=calloc(outch,sizeof(*master.plates));
- for(i=0;i<outch;i++)
- plate_init(&master.plates[i]);
-
- channel.prevactive=calloc(input_ch,sizeof(*channel.prevactive));
- master.prevactive=calloc(1,sizeof(*master.prevactive));
-
- window=window_get(1,input_size);
- return 0;
-}
-
-static void plate_compute(plate_set *p, plate *ps, float *in,
- float *outA, float *outB, float *outC,
- int count){
-
- waveguide_nl *w = ps->w;
- float *out=ps->outbuffer;
-
- void (*process)(waveguide_nl *, float, float, float*, float*, int)=
- waveguide_nl_process_lin;
-
- int pos;
- const float scale = powf(p->time*.0009999f, 1.34f);
- const float lpscale = 1.0f - p->damping*.001f * 0.93f;
- int curwet=p->wet;
- float wet;
- float wet_e;
-
- if(ps->initstate==0){
- wet = fromdB(curwet*.1f);
- wet_e = 1.;
- ps->initstate=1;
- }else{
- wet = fromdB(ps->prevwet*.1f);
- wet_e = fromdB((curwet-ps->prevwet)*.1f/count);
- }
-
- /* waveguide reconfig */
- for (pos=0; pos<8; pos++)
- waveguide_nl_set_delay(&w[pos], w[pos].size * scale);
- for (pos=0; pos<4; pos++)
- waveguide_nl_set_fc(&w[pos], LP_INNER * lpscale);
- for (; pos<8; pos++)
- waveguide_nl_set_fc(&w[pos], LP_OUTER * lpscale);
-
- if(w[0].delay!=w[0].delay_pending)
- process=waveguide_nl_process_trans;
-
- for (pos = 0; pos < count; pos++) {
- const float alpha = (out[0] + out[2] + out[4] + out[6]) * 0.5f +
- (in?in[pos]:0.f);
- const float beta = (out[1] + out[9] + out[14]) * 0.666666666f;
- const float gamma = (out[3] + out[8] + out[11]) * 0.666666666f;
- const float delta = (out[5] + out[10] + out[13]) * 0.666666666f;
- const float epsilon = (out[7] + out[12] + out[15]) * 0.666666666f;
-
- RUN_WG(0, beta, alpha, pos);
- RUN_WG(1, gamma, alpha, pos);
- RUN_WG(2, delta, alpha, pos);
- RUN_WG(3, epsilon, alpha, pos);
- RUN_WG(4, beta, gamma, pos);
- RUN_WG(5, gamma, delta, pos);
- RUN_WG(6, delta, epsilon, pos);
- RUN_WG(7, epsilon, beta, pos);
-
- if(!outB || !outC){
- outA[pos]= beta * wet;
- }else{
- outB[pos]= beta * wet;
- outC[pos]= gamma * wet;
- }
- wet*=wet_e;
- }
- ps->prevwet=curwet;
-
- if(w[0].delay!=w[0].delay_pending){
- int i;
- for(i=0;i<8;i++){
- w[i].delay=w[i].delay_pending;
- w[i].dptr=w[i].dptr_pending;
- }
- }
-}
-
-time_linkage *plate_read_channel(time_linkage *in,
- time_linkage **revA,
- time_linkage **revB){
- int i,j,ch=in->channels;
- plate_state *ps=&channel;
- int active[ch];
-
- *revA=&ps->outA;
- *revB=&ps->outB;
-
- if(in->samples==0){
- ps->out.samples=0;
- ps->outA.samples=0;
- ps->outB.samples=0;
- return &ps->out;
- }
-
- for(i=0;i<ch;i++)
- active[i]=plate_channel_set[i].panel_active;
-
- ps->outA.active=0;
- ps->outB.active=0;
-
- if(ps->fillstate==0){
- for(i=0;i<ch;i++)
- ps->prevactive[i]=active[i];
- }
-
- for(i=0;i<ch;i++){
- if(active[i] || ps->prevactive[i]){
- float *x=in->data[i];
- float *y=ps->out.data[i];
- float *yA=ps->outA.data[i];
- float *yB=ps->outB.data[i];
-
- /* clear the waveguides of old state if they were inactive */
- if (!ps->prevactive[i] || !ps->fillstate){
- for (j = 0; j < 8; j++)
- waveguide_nl_reset(&ps->plates[i].w[j]);
- ps->plates[i].initstate=0;
- memset(ps->plates[i].outbuffer,0,
- 32*sizeof(*ps->plates[i].outbuffer));
- }
-
- /* process this plate */
- if(mute_channel_muted(in->active,i)){
- plate_compute(&plate_channel_set[i], &ps->plates[i],
- 0,0,yA,yB,input_size);
- }else{
-
- /* state transition? If so, the input needs to be smoothed to
- avoid a step transition ringing through the plate */
- if(!ps->fillstate ||
- !active[i] ||
- !ps->prevactive[i]){
-
- memcpy(y,x,sizeof(*x)*input_size);
- if(!active[i]){
- /* transition to inactive */
- for(j=0;j<input_size;j++)
- x[j] *= (1.f - window[j]);
-
- }else if (!ps->prevactive[i] || !ps->fillstate){
- /* transition to active */
- for(j=0;j<input_size;j++)
- x[j]*= window[j];
- }
- }else{
- ps->out.data[i]=x;
- in->data[i]=y;
- }
-
- plate_compute(&plate_channel_set[i], &ps->plates[i],
- x,0,yA,yB,input_size);
-
-
- }
-
- if(!active[i]){
- /* transition to inactive */
- for(j=0;j<input_size;j++){
- yA[j] *= (1.f - window[j]);
- yB[j] *= (1.f - window[j]);
- }
- }
-
- ps->outA.active |= 1<<i;
- ps->outB.active |= 1<<i;
-
- }else{
- /* fully inactive */
- float *temp=ps->out.data[i];
- ps->out.data[i]=in->data[i];
- in->data[i]=temp;
- }
- ps->prevactive[i]=active[i];
- }
-
- ps->out.active=in->active;
- ps->out.samples=in->samples;
- ps->outA.samples=in->samples;
- ps->outB.samples=in->samples;
- ps->fillstate=1;
- return &ps->out;
-}
-
-time_linkage *plate_read_master(time_linkage *in){
- int i,j,ch=in->channels;
- plate_state *ps=&master;
- int active=plate_master_set.panel_active;
-
- if(in->samples==0){
- ps->out.samples=0;
- return &ps->out;
- }
-
- if(ps->fillstate==0){
- ps->prevactive[0]=active;
- }
-
- for(i=0;i<ch;i++){
- if(active || ps->prevactive[0]){
- float *x=in->data[i];
- float *y=ps->out.data[i];
-
- /* clear the waveguides of old state if they were inactive */
- if (!ps->prevactive[0] || !ps->fillstate){
- for (j = 0; j < 8; j++)
- waveguide_nl_reset(&ps->plates[i].w[j]);
- memset(ps->plates[i].outbuffer,0,
- 32*sizeof(*ps->plates[i].outbuffer));
- }
-
- /* process this plate */
- if(mute_channel_muted(in->active,i)){
- plate_compute(&plate_master_set, &ps->plates[i],
- 0,y,0,0,input_size);
- }else{
-
- memcpy(y,x,sizeof(*x)*input_size);
-
- /* must be done to the input, else the transition impulse
- will ring through the plate */
- if(!active){
- /* transition to inactive */
- for(j=0;j<input_size;j++)
- y[j] *= (1.f - window[j]);
-
- }else if (!ps->prevactive[0] || !ps->fillstate){
- /* transition to active */
- for(j=0;j<input_size;j++)
- y[j]*= window[j];
- }
-
- plate_compute(&plate_master_set, &ps->plates[i],
- y,y,0,0,input_size);
- }
-
- if(!active){
- /* transition to inactive */
- for(j=0;j<input_size;j++)
- y[j]*= 1.f - window[j];
-
- }
- if(!mute_channel_muted(in->active,i))
- for(j=0;j<input_size;j++)
- y[j]+=x[j];
-
- ps->out.active |= 1<<i;
-
- }else{
- /* fully inactive */
- float *temp=ps->out.data[i];
- ps->out.data[i]=in->data[i];
- in->data[i]=temp;
- ps->out.active |= in->active & (1<<i);
- }
- }
- ps->prevactive[0]=active;
-
- ps->out.samples=in->samples;
- ps->fillstate=1;
- return &ps->out;
-}
Deleted: trunk/postfish/reverb.h
===================================================================
--- trunk/postfish/reverb.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/reverb.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,42 +0,0 @@
-/*
- *
- * postfish
- *
- * Copyright (C) 2002-2004 Monty
- *
- * Postfish is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * Postfish is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Postfish; see the file COPYING. If not, write to the
- * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- *
- */
-
-typedef struct {
- sig_atomic_t panel_active;
- sig_atomic_t panel_visible;
-
- sig_atomic_t time; /* 1-1000 */
- sig_atomic_t damping; /* 0.-1. * 1000 */
- sig_atomic_t wet; /* 0.-1. * 1000 */
-} plate_set;
-
-extern void plate_reset(void);
-extern int plate_load(int outch);
-extern time_linkage *plate_read_channel(time_linkage *in,
- time_linkage **revA,
- time_linkage **revB);
-extern time_linkage *plate_read_master(time_linkage *in);
-
-extern plate_set *plate_channel_set;
-extern plate_set plate_master_set;
-
Modified: trunk/postfish/reverbpanel.c
===================================================================
--- trunk/postfish/reverbpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/reverbpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -28,7 +28,7 @@
#include "multibar.h"
#include "mainpanel.h"
#include "subpanel.h"
-#include "reverb.h"
+#include "freeverb.h"
#include "reverbpanel.h"
#include "config.h"
@@ -40,52 +40,69 @@
typedef struct{
subpanel_generic *panel;
- slider_readout_pair *time;
- slider_readout_pair *damp;
+
+ slider_readout_pair *roomsize;
+ slider_readout_pair *liveness;
+ slider_readout_pair *hfdamp;
slider_readout_pair *wet;
+ slider_readout_pair *width;
+ slider_readout_pair *delay;
+
} reverb_panel_state;
reverb_panel_state *master_panel;
reverb_panel_state **channel_panel;
-static void reverbpanel_state_to_config_helper(int bank,plate_set *s,int A){
- config_set_integer("reverb_active",bank,A,0,0,0,s->panel_active);
+static void reverbpanel_state_to_config_helper(int bank,reverb_settings *s,int A){
+ config_set_integer("reverb_active",bank,A,0,0,0,s->active);
- config_set_integer("reverb_set",bank,A,0,0,0,s->time);
- config_set_integer("reverb_set",bank,A,0,0,1,s->damping);
- config_set_integer("reverb_set",bank,A,0,0,2,s->wet);
+ config_set_integer("reverb_set",bank,A,0,0,3,s->roomsize);
+ config_set_integer("reverb_set",bank,A,0,0,4,s->liveness);
+ config_set_integer("reverb_set",bank,A,0,0,5,s->wet);
+ config_set_integer("reverb_set",bank,A,0,0,6,s->width);
+ config_set_integer("reverb_set",bank,A,0,0,7,s->delay);
+ config_set_integer("reverb_set",bank,A,0,0,8,s->hfdamp);
}
void reverbpanel_state_to_config(int bank){
int i;
- reverbpanel_state_to_config_helper(bank,&plate_master_set,0);
+ reverbpanel_state_to_config_helper(bank,&reverb_masterset,0);
for(i=0;i<input_ch;i++)
- reverbpanel_state_to_config_helper(bank,plate_channel_set+i,i+1);
+ reverbpanel_state_to_config_helper(bank,reverb_channelset+i,i+1);
}
-static void reverbpanel_state_from_config_helper(int bank,plate_set *s,
+static void reverbpanel_state_from_config_helper(int bank,reverb_settings *s,
reverb_panel_state *p,int A){
- config_get_sigat("reverb_active",bank,A,0,0,0,&s->panel_active);
- gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(p->panel->subpanel_activebutton[0]),s->panel_active);
+ config_get_sigat("reverb_active",bank,A,0,0,0,&s->active);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(p->panel->subpanel_activebutton[0]),s->active);
- config_get_sigat("reverb_set",bank,A,0,0,0,&s->time);
- multibar_thumb_set(MULTIBAR(p->time->s),s->time,0);
+ config_get_sigat("reverb_set",bank,A,0,0,3,&s->roomsize);
+ multibar_thumb_set(MULTIBAR(p->roomsize->s),s->roomsize,0);
- config_get_sigat("reverb_set",bank,A,0,0,1,&s->damping);
- multibar_thumb_set(MULTIBAR(p->damp->s),s->damping,0);
+ config_get_sigat("reverb_set",bank,A,0,0,4,&s->liveness);
+ multibar_thumb_set(MULTIBAR(p->liveness->s),s->liveness,0);
- config_get_sigat("reverb_set",bank,A,0,0,2,&s->wet);
+ config_get_sigat("reverb_set",bank,A,0,0,5,&s->wet);
multibar_thumb_set(MULTIBAR(p->wet->s),s->wet,0);
+ config_get_sigat("reverb_set",bank,A,0,0,6,&s->width);
+ multibar_thumb_set(MULTIBAR(p->width->s),s->width,0);
+
+ config_get_sigat("reverb_set",bank,A,0,0,7,&s->delay);
+ multibar_thumb_set(MULTIBAR(p->delay->s),s->delay,0);
+
+ config_get_sigat("reverb_set",bank,A,0,0,8,&s->hfdamp);
+ multibar_thumb_set(MULTIBAR(p->hfdamp->s),s->hfdamp,0);
+
}
void reverbpanel_state_from_config(int bank){
int i;
- reverbpanel_state_from_config_helper(bank,&plate_master_set,master_panel,0);
+ reverbpanel_state_from_config_helper(bank,&reverb_masterset,master_panel,0);
for(i=0;i<input_ch;i++)
- reverbpanel_state_from_config_helper(bank,plate_channel_set+i,channel_panel[i],i+1);
+ reverbpanel_state_from_config_helper(bank,reverb_channelset+i,channel_panel[i],i+1);
}
static void slider_change(GtkWidget *w,gpointer in){
@@ -93,7 +110,7 @@
slider_readout_pair *p=(slider_readout_pair *)in;
float val=multibar_get_value(MULTIBAR(p->s),0);
- sprintf(buffer," %5.2f",val*.01);
+ sprintf(buffer,"%5.2f",val*.01);
readout_set(READOUT(p->r),buffer);
*p->val=rint(val);
@@ -104,7 +121,7 @@
slider_readout_pair *p=(slider_readout_pair *)in;
float val=multibar_get_value(MULTIBAR(p->s),0);
- sprintf(buffer,"%+4.1fdB",val*.1);
+ sprintf(buffer,"%+4.1f",val*.1);
readout_set(READOUT(p->r),buffer);
*p->val=rint(val);
@@ -112,22 +129,28 @@
static reverb_panel_state *reverbpanel_create_helper (postfish_mainpanel *mp,
subpanel_generic *panel,
- plate_set *ps){
+ reverb_settings *ps, int stereop){
- char *labels[11]={"","1","2","3","4","5","6","7","8","9"," 10"};
+ char *labels[11]={"","1","2","3","4","5","6","7","8","9","10"};
float levels[11]={0,100,200,300,400,500,600,700,800,900,1000};
- char *labelsdB[11]={"","-40","-20","-10","-3","0","+3","+10","+20","+40"," +80"};
+ char *labelsdB[11]={"","-40","-20","-10","-3","0dB","+3","+10","+20","+40","+80"};
float levelsdB[11]={-800,-400,-200,-100,-30,0,30,100,200,400,800};
- GtkWidget *table=gtk_table_new(3,3,0);
+ GtkWidget *table=gtk_table_new(7,3,0);
slider_readout_pair *p1=malloc(sizeof(*p1));
slider_readout_pair *p2=malloc(sizeof(*p2));
slider_readout_pair *p3=malloc(sizeof(*p3));
+ slider_readout_pair *p4=malloc(sizeof(*p4));
+ slider_readout_pair *p5=malloc(sizeof(*p5));
+ slider_readout_pair *p6=malloc(sizeof(*p6));
- GtkWidget *l1=gtk_label_new("Plate size ");
- GtkWidget *l2=gtk_label_new("Damping ");
- GtkWidget *l3=gtk_label_new("Wet level ");
+ GtkWidget *l1=gtk_label_new("Room Size ");
+ GtkWidget *l2=gtk_label_new("Room Liveness ");
+ GtkWidget *l3=gtk_label_new("High Damping ");
+ GtkWidget *l4=gtk_label_new("Predelay ");
+ GtkWidget *l5=gtk_label_new("Stereo Width ");
+ GtkWidget *l6=gtk_label_new("Wet Level ");
reverb_panel_state *p=calloc(1,sizeof(*p));
p->panel=panel;
@@ -135,22 +158,41 @@
gtk_misc_set_alignment(GTK_MISC(l1),1,.5);
gtk_misc_set_alignment(GTK_MISC(l2),1,.5);
gtk_misc_set_alignment(GTK_MISC(l3),1,.5);
+ gtk_misc_set_alignment(GTK_MISC(l4),1,.5);
+ gtk_misc_set_alignment(GTK_MISC(l5),1,.5);
+ gtk_misc_set_alignment(GTK_MISC(l6),1,.5);
- p->time=p1;
+ p->roomsize=p1;
p1->s=multibar_slider_new(11,labels,levels,1);
- p1->r=readout_new("10.00");
- p1->val=&ps->time;
+ p1->r=readout_new(" 10.00 ");
+ p1->val=&ps->roomsize;
- p->damp=p2;
+ p->liveness=p2;
p2->s=multibar_slider_new(11,labels,levels,1);
- p2->r=readout_new("10.00");
- p2->val=&ps->damping;
+ p2->r=readout_new(" 10.00 ");
+ p2->val=&ps->liveness;
- p->wet=p3;
- p3->s=multibar_slider_new(11,labelsdB,levelsdB,1);
- p3->r=readout_new("10.00");
- p3->val=&ps->wet;
+ p->hfdamp=p3;
+ p3->s=multibar_slider_new(11,labels,levels,1);
+ p3->r=readout_new(" 10.00 ");
+ p3->val=&ps->hfdamp;
+ p->delay=p4;
+ p4->s=multibar_slider_new(11,labels,levels,1);
+ p4->r=readout_new(" 10.00 ");
+ p4->val=&ps->delay;
+
+ p->width=p5;
+ p5->s=multibar_slider_new(11,labels,levels,1);
+ p5->r=readout_new(" 10.00 ");
+ p5->val=&ps->width;
+
+ p->wet=p6;
+ p6->s=multibar_slider_new(11,labelsdB,levelsdB,1);
+ p6->r=readout_new("+10.0 dB");
+ p6->val=&ps->wet;
+
+
gtk_table_attach(GTK_TABLE(table),l1,0,1,0,1,
GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
gtk_table_attach(GTK_TABLE(table),p1->s,1,2,0,1,
@@ -172,19 +214,51 @@
gtk_table_attach(GTK_TABLE(table),p3->r,2,3,2,3,
GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),l4,0,1,3,4,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),p4->s,1,2,3,4,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),p4->r,2,3,3,4,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+
+ if(stereop){
+ gtk_table_attach(GTK_TABLE(table),l5,0,1,4,5,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),p5->s,1,2,4,5,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),p5->r,2,3,4,5,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ }
+
+ gtk_table_attach(GTK_TABLE(table),l6,0,1,6,7,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),p6->s,1,2,6,7,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+ gtk_table_attach(GTK_TABLE(table),p6->r,2,3,6,7,
+ GTK_FILL,GTK_FILL|GTK_EXPAND,2,0);
+
gtk_container_add(GTK_CONTAINER(panel->subpanel_box),table);
-
+
multibar_callback(MULTIBAR(p1->s),slider_change,p1);
multibar_callback(MULTIBAR(p2->s),slider_change,p2);
- multibar_callback(MULTIBAR(p3->s),slider_change_dB,p3);
+ multibar_callback(MULTIBAR(p3->s),slider_change,p3);
+ multibar_callback(MULTIBAR(p4->s),slider_change,p4);
+ multibar_callback(MULTIBAR(p5->s),slider_change,p5);
+ multibar_callback(MULTIBAR(p6->s),slider_change_dB,p6);
- multibar_thumb_set(MULTIBAR(p1->s),200,0);
- multibar_thumb_set(MULTIBAR(p2->s),200,0);
- multibar_thumb_set(MULTIBAR(p3->s),0,0);
+ multibar_thumb_set(MULTIBAR(p1->s),5000,0);
+ multibar_thumb_set(MULTIBAR(p2->s),400,0);
+ multibar_thumb_set(MULTIBAR(p3->s),800,0);
+ multibar_thumb_set(MULTIBAR(p4->s),0,0);
+ multibar_thumb_set(MULTIBAR(p5->s),500,0);
+ multibar_thumb_set(MULTIBAR(p6->s),0,0);
multibar_thumb_increment(MULTIBAR(p1->s),1,10);
multibar_thumb_increment(MULTIBAR(p2->s),1,10);
multibar_thumb_increment(MULTIBAR(p3->s),1,10);
+ multibar_thumb_increment(MULTIBAR(p4->s),1,10);
+ multibar_thumb_increment(MULTIBAR(p5->s),1,10);
+ multibar_thumb_increment(MULTIBAR(p6->s),1,10);
subpanel_show_all_but_toplevel(panel);
return p;
@@ -196,11 +270,11 @@
char *shortcut[]={" r "};
subpanel_generic *panel=subpanel_create(mp,windowbutton,&activebutton,
- &plate_master_set.panel_active,
- &plate_master_set.panel_visible,
- "_Plate Reverb (master)",shortcut,
+ &reverb_masterset.active,
+ &reverb_masterset.visible,
+ "_Reverb (master)",shortcut,
0,1);
- master_panel=reverbpanel_create_helper(mp,panel,&plate_master_set);
+ master_panel=reverbpanel_create_helper(mp,panel,&reverb_masterset,0);
}
void reverbpanel_create_channel(postfish_mainpanel *mp,
@@ -214,15 +288,14 @@
subpanel_generic *panel;
char buffer[80];
- sprintf(buffer,"_Plate Reverb (channel %d)",i+1);
+ sprintf(buffer,"_Reverb (channel %d)",i+1);
panel=subpanel_create(mp,windowbutton[i],activebutton+i,
- &plate_channel_set[i].panel_active,
- &plate_channel_set[i].panel_visible,
+ &reverb_channelset[i].active,
+ &reverb_channelset[i].visible,
buffer,NULL,
i,1);
- channel_panel[i]=reverbpanel_create_helper(mp,panel,plate_channel_set+i);
+ channel_panel[i]=reverbpanel_create_helper(mp,panel,reverb_channelset+i,1);
}
}
-
Modified: trunk/postfish/reverbpanel.h
===================================================================
--- trunk/postfish/reverbpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/reverbpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/singlecomp.c
===================================================================
--- trunk/postfish/singlecomp.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/singlecomp.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/singlecomp.h
===================================================================
--- trunk/postfish/singlecomp.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/singlecomp.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/singlepanel.c
===================================================================
--- trunk/postfish/singlepanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/singlepanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/singlepanel.h
===================================================================
--- trunk/postfish/singlepanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/singlepanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/subband.c
===================================================================
--- trunk/postfish/subband.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/subband.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/subband.h
===================================================================
--- trunk/postfish/subband.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/subband.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/subpanel.c
===================================================================
--- trunk/postfish/subpanel.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/subpanel.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/subpanel.h
===================================================================
--- trunk/postfish/subpanel.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/subpanel.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty
+ * Copyright (C) 2002-2005 Monty
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/version.h
===================================================================
--- trunk/postfish/version.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/version.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,2 +1,2 @@
#define VERSION "$Id$ "
-/* DO NOT EDIT: Automated versioning hack [Sat Oct 16 19:01:00 EDT 2004] */
+/* DO NOT EDIT: Automated versioning hack [Sun Jan 2 15:25:34 EST 2005] */
Modified: trunk/postfish/window.c
===================================================================
--- trunk/postfish/window.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/window.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/window.h
===================================================================
--- trunk/postfish/window.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/window.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -2,7 +2,7 @@
*
* postfish
*
- * Copyright (C) 2002-2004 Monty and Xiph.Org
+ * Copyright (C) 2002-2005 Monty and Xiph.Org
*
* Postfish is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
Modified: trunk/postfish/windowbutton.c
===================================================================
--- trunk/postfish/windowbutton.c 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/windowbutton.c 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,3 +1,26 @@
+/*
+ *
+ * postfish
+ *
+ * Copyright (C) 2002-2005 Monty
+ *
+ * Postfish is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * Postfish is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Postfish; see the file COPYING. If not, write to the
+ * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
#include "windowbutton.h"
static GtkCheckButtonClass *parent_class = NULL;
Modified: trunk/postfish/windowbutton.h
===================================================================
--- trunk/postfish/windowbutton.h 2005-01-02 14:44:44 UTC (rev 8577)
+++ trunk/postfish/windowbutton.h 2005-01-02 20:21:01 UTC (rev 8578)
@@ -1,3 +1,26 @@
+/*
+ *
+ * postfish
+ *
+ * Copyright (C) 2002-2005 Monty
+ *
+ * Postfish is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * Postfish is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Postfish; see the file COPYING. If not, write to the
+ * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ *
+ */
+
#ifndef __WINDOWBUTTON_H__
#define __WINDOWBUTTON_H__
More information about the commits
mailing list