changeset 12:87dc3d84c120

Addressed the load program defaults over user settings 'feature'. Removed isChild on objects that are added before the frame creation since a)they're always there and b) doesn't write to all displays present.
author martinm_home <martin.morrell@eecs.qmul.ac.uk>
date Thu, 27 Sep 2012 23:29:16 +0100
parents 76e2e62635b4
children 989865d55c73
files Classic Ambisonics Decoder VST.xcodeproj/project.pbxproj Classic Ambisonics Decoder VST.xcodeproj/project.xcworkspace/xcuserdata/momont.xcuserdatad/UserInterfaceState.xcuserstate Classic Ambisonics Decoder VST.xcodeproj/xcuserdata/momont.xcuserdatad/xcschemes/Classic Ambisonics Decoder VST.xcscheme Info.plist Source/.DS_Store Source/ClassicAmbiDec.cpp Source/ClassicAmbiDec.h Source/ClassicAmbiDecMain.cpp Source/ClassicAmbiDecParameters.h Source/Decoder.cpp Source/Decoder.h Source/GUI.cpp Source/GUI.h Source/MyPlot.cpp Source/MyPlot.h Source/SoundField.cpp Source/SoundField.h Source/SoundFieldMain.cpp Source/SoundFieldParameters.h Source/Version.h Source/modded_plot/PolarPlot.cpp Source/modded_plot/PolarPlot.hpp
diffstat 22 files changed, 1758 insertions(+), 2242 deletions(-) [+]
line wrap: on
line diff
--- a/Classic Ambisonics Decoder VST.xcodeproj/project.pbxproj	Thu Sep 27 12:33:46 2012 +0100
+++ b/Classic Ambisonics Decoder VST.xcodeproj/project.pbxproj	Thu Sep 27 23:29:16 2012 +0100
@@ -12,8 +12,8 @@
 		0C54F6F015F8B99400953CE0 /* aeffguieditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F6ED15F8B99400953CE0 /* aeffguieditor.cpp */; };
 		0C54F70A15F8BB4D00953CE0 /* Decoder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F70015F8BB4C00953CE0 /* Decoder.cpp */; };
 		0C54F70B15F8BB4D00953CE0 /* GUI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F70215F8BB4C00953CE0 /* GUI.cpp */; };
-		0C54F70D15F8BB4D00953CE0 /* SoundField.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F70615F8BB4C00953CE0 /* SoundField.cpp */; };
-		0C54F70E15F8BB4D00953CE0 /* SoundFieldMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F70815F8BB4C00953CE0 /* SoundFieldMain.cpp */; };
+		0C54F70D15F8BB4D00953CE0 /* ClassicAmbiDec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F70615F8BB4C00953CE0 /* ClassicAmbiDec.cpp */; };
+		0C54F70E15F8BB4D00953CE0 /* ClassicAmbiDecMain.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0C54F70815F8BB4C00953CE0 /* ClassicAmbiDecMain.cpp */; };
 		0C54F71815F8BB7500953CE0 /* 360_knob.png in Resources */ = {isa = PBXBuildFile; fileRef = 0C54F70F15F8BB7500953CE0 /* 360_knob.png */; };
 		0C54F71915F8BB7500953CE0 /* blue_knob.png in Resources */ = {isa = PBXBuildFile; fileRef = 0C54F71015F8BB7500953CE0 /* blue_knob.png */; };
 		0C54F71A15F8BB7500953CE0 /* mode2_knob.png in Resources */ = {isa = PBXBuildFile; fileRef = 0C54F71115F8BB7500953CE0 /* mode2_knob.png */; };
@@ -50,10 +50,10 @@
 		0C54F70315F8BB4C00953CE0 /* GUI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GUI.h; path = Source/GUI.h; sourceTree = "<group>"; };
 		0C54F70415F8BB4C00953CE0 /* MyPlot.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MyPlot.cpp; path = Source/MyPlot.cpp; sourceTree = "<group>"; };
 		0C54F70515F8BB4C00953CE0 /* MyPlot.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MyPlot.h; path = Source/MyPlot.h; sourceTree = "<group>"; };
-		0C54F70615F8BB4C00953CE0 /* SoundField.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SoundField.cpp; path = Source/SoundField.cpp; sourceTree = "<group>"; };
-		0C54F70715F8BB4C00953CE0 /* SoundField.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SoundField.h; path = Source/SoundField.h; sourceTree = "<group>"; };
-		0C54F70815F8BB4C00953CE0 /* SoundFieldMain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SoundFieldMain.cpp; path = Source/SoundFieldMain.cpp; sourceTree = "<group>"; };
-		0C54F70915F8BB4C00953CE0 /* SoundFieldParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SoundFieldParameters.h; path = Source/SoundFieldParameters.h; sourceTree = "<group>"; };
+		0C54F70615F8BB4C00953CE0 /* ClassicAmbiDec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClassicAmbiDec.cpp; path = Source/ClassicAmbiDec.cpp; sourceTree = "<group>"; };
+		0C54F70715F8BB4C00953CE0 /* ClassicAmbiDec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClassicAmbiDec.h; path = Source/ClassicAmbiDec.h; sourceTree = "<group>"; };
+		0C54F70815F8BB4C00953CE0 /* ClassicAmbiDecMain.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ClassicAmbiDecMain.cpp; path = Source/ClassicAmbiDecMain.cpp; sourceTree = "<group>"; };
+		0C54F70915F8BB4C00953CE0 /* ClassicAmbiDecParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ClassicAmbiDecParameters.h; path = Source/ClassicAmbiDecParameters.h; sourceTree = "<group>"; };
 		0C54F70F15F8BB7500953CE0 /* 360_knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = 360_knob.png; path = Resources/360_knob.png; sourceTree = "<group>"; };
 		0C54F71015F8BB7500953CE0 /* blue_knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = blue_knob.png; path = Resources/blue_knob.png; sourceTree = "<group>"; };
 		0C54F71115F8BB7500953CE0 /* mode2_knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = mode2_knob.png; path = Resources/mode2_knob.png; sourceTree = "<group>"; };
@@ -62,7 +62,6 @@
 		0C54F71415F8BB7500953CE0 /* red_blue_knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = red_blue_knob.png; path = Resources/red_blue_knob.png; sourceTree = "<group>"; };
 		0C54F71515F8BB7500953CE0 /* red_knob.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = red_knob.png; path = Resources/red_knob.png; sourceTree = "<group>"; };
 		0C54F71715F8BB7500953CE0 /* zoom.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = zoom.png; path = Resources/zoom.png; sourceTree = "<group>"; };
-		0C54F72315F9144500953CE0 /* Version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Version.h; path = Source/Version.h; sourceTree = "<group>"; };
 		0C7C2412159860DE0050E903 /* aeffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aeffect.h; path = ../../../../../Users/momont/libraries/vstsdk2.4/pluginterfaces/vst2.x/aeffect.h; sourceTree = "<group>"; };
 		0C7C2413159860DE0050E903 /* aeffectx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = aeffectx.h; path = ../../../../../Users/momont/libraries/vstsdk2.4/pluginterfaces/vst2.x/aeffectx.h; sourceTree = "<group>"; };
 		0C7C2414159860DE0050E903 /* vstfxstore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = vstfxstore.h; path = ../../../../../Users/momont/libraries/vstsdk2.4/pluginterfaces/vst2.x/vstfxstore.h; sourceTree = "<group>"; };
@@ -151,11 +150,10 @@
 				0C54F70315F8BB4C00953CE0 /* GUI.h */,
 				0C54F70415F8BB4C00953CE0 /* MyPlot.cpp */,
 				0C54F70515F8BB4C00953CE0 /* MyPlot.h */,
-				0C54F70615F8BB4C00953CE0 /* SoundField.cpp */,
-				0C54F70715F8BB4C00953CE0 /* SoundField.h */,
-				0C54F70815F8BB4C00953CE0 /* SoundFieldMain.cpp */,
-				0C54F70915F8BB4C00953CE0 /* SoundFieldParameters.h */,
-				0C54F72315F9144500953CE0 /* Version.h */,
+				0C54F70615F8BB4C00953CE0 /* ClassicAmbiDec.cpp */,
+				0C54F70715F8BB4C00953CE0 /* ClassicAmbiDec.h */,
+				0C54F70815F8BB4C00953CE0 /* ClassicAmbiDecMain.cpp */,
+				0C54F70915F8BB4C00953CE0 /* ClassicAmbiDecParameters.h */,
 				F405CDF90B0487F1008E3886 /* vstsdk2.4 */,
 				F405CDC00B048719008E3886 /* vstgui-4.0.1 */,
 			);
@@ -296,8 +294,8 @@
 				0C54F6F015F8B99400953CE0 /* aeffguieditor.cpp in Sources */,
 				0C54F70A15F8BB4D00953CE0 /* Decoder.cpp in Sources */,
 				0C54F70B15F8BB4D00953CE0 /* GUI.cpp in Sources */,
-				0C54F70D15F8BB4D00953CE0 /* SoundField.cpp in Sources */,
-				0C54F70E15F8BB4D00953CE0 /* SoundFieldMain.cpp in Sources */,
+				0C54F70D15F8BB4D00953CE0 /* ClassicAmbiDec.cpp in Sources */,
+				0C54F70E15F8BB4D00953CE0 /* ClassicAmbiDecMain.cpp in Sources */,
 				0CC1308516045FA400DFB900 /* MyPlot.cpp in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
Binary file Classic Ambisonics Decoder VST.xcodeproj/project.xcworkspace/xcuserdata/momont.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- a/Classic Ambisonics Decoder VST.xcodeproj/xcuserdata/momont.xcuserdatad/xcschemes/Classic Ambisonics Decoder VST.xcscheme	Thu Sep 27 12:33:46 2012 +0100
+++ b/Classic Ambisonics Decoder VST.xcodeproj/xcuserdata/momont.xcuserdatad/xcschemes/Classic Ambisonics Decoder VST.xcscheme	Thu Sep 27 23:29:16 2012 +0100
@@ -35,7 +35,7 @@
       selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
       launchStyle = "0"
       useCustomWorkingDirectory = "NO"
-      buildConfiguration = "Debug"
+      buildConfiguration = "Release"
       ignoresPersistentStateOnLaunch = "NO"
       debugDocumentVersioning = "YES"
       allowLocationSimulation = "YES">
--- a/Info.plist	Thu Sep 27 12:33:46 2012 +0100
+++ b/Info.plist	Thu Sep 27 23:29:16 2012 +0100
@@ -19,9 +19,9 @@
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<string>1.0.0.0</string>
 	<key>CFBundleShortVersionString</key>
-	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<string>1.0.0.0</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
Binary file Source/.DS_Store has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/ClassicAmbiDec.cpp	Thu Sep 27 23:29:16 2012 +0100
@@ -0,0 +1,1464 @@
+#ifndef __ClassicAmbiDec__
+#include "ClassicAmbiDec.h"
+#endif
+//C++ Headers
+#include <stdio.h>
+#include <string.h>
+#include <cmath>
+
+//GUI Headers
+#include "aeffguieditor.h"
+
+
+//-----------------------------------------------------------------------------
+ClassicAmbiDecProgram::ClassicAmbiDecProgram()
+{
+    
+}
+
+
+
+//-----------------------------------------------------------------------------
+ClassicAmbiDec::ClassicAmbiDec (audioMasterCallback audioMaster)
+: AudioEffectX (audioMaster, kNumPrograms, kNumParameters)
+{	
+    
+    
+    //Set the number of input and output channels
+	setNumInputs (4);	// 4 Channel Classic B-Format Input
+	setNumOutputs (MAX_CHANNELS);	// MAX_CHANNELS 5.1 Output
+    
+    //Initially set the number of inputs and outputs incase (set|get)SpeakerArrangement isn't called
+    numberInputs=4;
+    numberOutputs=MAX_CHANNELS;
+    allocateArrangement (&myInputArrangement, 4);
+    myInputArrangement->type = kSpeakerArr31Cine;
+    
+	setUniqueID ('MMca');
+    canDoubleReplacing(); //Plugin can use process double replacing
+    canProcessReplacing(); //Plugin can use process replacing
+    noTail ();
+    
+    bool bit64 = setProcessPrecision(kVstProcessPrecision64);
+    if (bit64==true) {
+        bits=64;
+    }
+    else{
+        bits=32;
+    }
+    
+
+    //  Declare any variables to their default values
+    fMode = 0.f;
+    fWidth = 0.5f;
+    fPattern = 0.5f;
+    fRotate = 0.5f;
+    fTilt = 0.5f;
+	fTumble = 0.5f;
+	fZoom = 0.5f;
+	fZoomMethod = 0.f;
+	fRearVerb = 0.f;
+	fHiVerb = 0.f;
+    fCentrePattern =0.5f;
+    fCentreGain = 0.75f;
+    fSubGain = 0.75f;
+    fFc = 5.0f/11.0f;
+    fSurroundMode = 0.f;
+    fSurroundPattern = 0.5;
+    fSurroundWidth = 2.f/3.f;
+    fSurroundGain = 0.75f;
+    fDecoderMode = 0.f;
+    fChannelOrder = 1.f;
+
+    myDecoder.Fs = sampleRate;
+    myDecoder.filterCoefs();
+    
+    
+    programs_20 = new ClassicAmbiDecProgram[kNumParameters];
+    programs_21 = new ClassicAmbiDecProgram[kNumParameters];
+    programs_40 = new ClassicAmbiDecProgram[kNumParameters];
+    programs_50 = new ClassicAmbiDecProgram[kNumParameters];
+    programs_51 = new ClassicAmbiDecProgram[kNumParameters];
+
+    //Initailise all the programs
+    //Stereo Mode
+        //Name
+        vst_strncpy (programs_20[0].name, "Stereo XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_20[1].name, "Stereo MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_20[2].name, "Stereo Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs_20[3].name, "Stereo XY with 'Verb",kVstMaxProgNameLen);
+        vst_strncpy (programs_20[4].name, "Stereo MS with 'Verb",kVstMaxProgNameLen);
+        //Mode
+        programs_20[0].mode = 0.f;
+        programs_20[1].mode = 1.f;
+        programs_20[2].mode = 0.f;
+        programs_20[3].mode = 0.f;
+        programs_20[4].mode = 1.f;
+        //Width
+        programs_20[0].width = (1.f/3.f);
+        programs_20[1].width = (1.f/3.f);
+        programs_20[2].width = 0.5f;
+        programs_20[3].width = (1.f/3.f);
+        programs_20[4].width = (1.f/3.f);
+        //Pattern
+        programs_20[0].pattern = 0.5f;
+        programs_20[1].pattern = 0.5f;
+        programs_20[2].pattern = 0.f;
+        programs_20[3].pattern = 0.5f;
+        programs_20[4].pattern = 0.5f;
+        //RearVerb
+        programs_20[0].rearVerb = 0.f;
+        programs_20[1].rearVerb = 0.f;
+        programs_20[2].rearVerb = 0.f;
+        programs_20[3].rearVerb = 0.75f;
+        programs_20[4].rearVerb = 0.75f;
+        //HiVerb
+        programs_20[0].hiVerb = 0.f;
+        programs_20[1].hiVerb = 0.f;
+        programs_20[2].hiVerb = 0.f;
+        programs_20[3].hiVerb = 0.25f;
+        programs_20[4].hiVerb = 0.25f;
+    
+    
+    //2.1 Mode
+        //Name
+        vst_strncpy (programs_21[0].name, "2.1 XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_21[1].name, "2.1 MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_21[2].name, "2.1 Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs_21[3].name, "2.1 XY with 'Verb",kVstMaxProgNameLen);
+        vst_strncpy (programs_21[4].name, "2.1 MS with 'Verb",kVstMaxProgNameLen);
+        //Mode
+        programs_21[0].mode = 0.f;
+        programs_21[1].mode = 1.f;
+        programs_21[2].mode = 0.f;
+        programs_21[3].mode = 0.f;
+        programs_21[4].mode = 1.f;
+        //Width
+        programs_21[0].width = (1.f/3.f);
+        programs_21[1].width = (1.f/3.f);
+        programs_21[2].width = 0.5f;
+        programs_21[3].width = (1.f/3.f);
+        programs_21[4].width = (1.f/3.f);
+        //Pattern
+        programs_21[0].pattern = 0.5f;
+        programs_21[1].pattern = 0.5f;
+        programs_21[2].pattern = 0.f;
+        programs_21[3].pattern = 0.5f;
+        programs_21[4].pattern = 0.5f;
+        //RearVerb
+        programs_21[0].rearVerb = 0.f;
+        programs_21[1].rearVerb = 0.f;
+        programs_21[2].rearVerb = 0.f;
+        programs_21[3].rearVerb = 0.75f;
+        programs_21[4].rearVerb = 0.75f;
+        //HiVerb
+        programs_21[0].hiVerb = 0.f;
+        programs_21[1].hiVerb = 0.f;
+        programs_21[2].hiVerb = 0.f;
+        programs_21[3].hiVerb = 0.25f;
+        programs_21[4].hiVerb = 0.25f;
+        //SubGain
+        programs_21[0].subGain = 0.75f;
+        programs_21[1].subGain = 0.75f;
+        programs_21[2].subGain = 0.75f;
+        programs_21[3].subGain = 0.75f;
+        programs_21[4].subGain = 0.75f;
+        //FC
+        programs_21[0].fc = 5.0f/11.0f;
+        programs_21[1].fc = 5.0f/11.0f;
+        programs_21[2].fc = 5.0f/11.0f;
+        programs_21[3].fc = 5.0f/11.0f;
+        programs_21[4].fc = 5.0f/11.0f;
+    
+    
+    
+    //Quad Mode
+        //Name
+        vst_strncpy (programs_40[0].name, "Quad XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_40[1].name, "Quad MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_40[2].name, "Quad Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs_40[3].name, "Quad XY with MS",kVstMaxProgNameLen);
+        vst_strncpy (programs_40[4].name, "Quad MS with XY",kVstMaxProgNameLen);
+        //Mode
+        programs_40[0].mode = 0.f;
+        programs_40[1].mode = 1.f;
+        programs_40[2].mode = 0.f;
+        programs_40[3].mode = 0.f;
+        programs_40[4].mode = 1.f;
+        //Width
+        programs_40[0].width = (1.f/3.f);
+        programs_40[1].width = (1.f/3.f);
+        programs_40[2].width = 0.5f;
+        programs_40[3].width = (1.f/3.f);
+        programs_40[4].width = (1.f/3.f);
+        //Pattern
+        programs_40[0].pattern = 0.5f;
+        programs_40[1].pattern = 0.5f;
+        programs_40[2].pattern = 0.f;
+        programs_40[3].pattern = 0.5f;
+        programs_40[4].pattern = 0.5f;
+        //Surround Mode
+        programs_40[0].surroundMode = 0.f;
+        programs_40[1].surroundMode = 1.f;
+        programs_40[2].surroundMode = 0.f;
+        programs_40[3].surroundMode = 1.f;
+        programs_40[4].surroundMode = 0.f;
+        //Surround Width
+        programs_40[0].surroundWidth = (5.5f/9.f);
+        programs_40[1].surroundWidth = (5.5f/9.f);
+        programs_40[2].surroundWidth = 0.5f;
+        programs_40[3].surroundWidth = (5.5f/9.f);
+        programs_40[4].surroundWidth = (5.5f/9.f);
+        //Surround Pattern
+        programs_40[0].surroundPattern = 0.5;
+        programs_40[1].surroundPattern = 0.5;
+        programs_40[2].surroundPattern = 0.0;
+        programs_40[0].surroundPattern = 0.25;
+        programs_40[0].surroundPattern = 0.75;
+        //Surround Gain
+        programs_40[0].surroundGain = 0.75f;
+        programs_40[1].surroundGain = 0.75f;
+        programs_40[2].surroundGain = 0.75f;
+        programs_40[3].surroundGain = 0.75f;
+        programs_40[4].surroundGain = 0.75f;
+
+    
+    //5.0 Mode
+        //Name
+        vst_strncpy (programs_50[0].name, "5.0 XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_50[1].name, "5.0 MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_50[2].name, "5.0 Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs_50[3].name, "5.0 Heller et. al. 1",kVstMaxProgNameLen);
+        vst_strncpy (programs_50[4].name, "5.0 Heller et. al. 2",kVstMaxProgNameLen);
+        //Mode
+        programs_50[0].mode = 0.f;
+        programs_50[1].mode = 1.f;
+        programs_50[2].mode = 0.f;
+        //Width
+        programs_50[0].width = (1.f/3.f);
+        programs_50[1].width = (1.f/3.f);
+        programs_50[2].width = 0.5f;
+        //Pattern
+        programs_50[0].pattern = 0.5f;
+        programs_50[1].pattern = 0.5f;
+        programs_50[2].pattern = 0.f;
+        //Centre Pattern
+        programs_50[0].centrePattern = 0.5f;
+        programs_50[1].centrePattern = 0.5f;
+        programs_50[2].centrePattern = 0.0f;
+        //Centre Gain
+        programs_50[0].centreGain = 0.75f;
+        programs_50[1].centreGain = 0.75f;
+        programs_50[2].centreGain = 0.75f;
+        //Surround Mode
+        programs_50[0].surroundMode = 0.f;
+        programs_50[1].surroundMode = 1.f;
+        programs_50[2].surroundMode = 0.f;
+        //Surround Width
+        programs_50[0].surroundWidth = (5.5f/9.f);
+        programs_50[1].surroundWidth = (5.5f/9.f);
+        programs_50[2].surroundWidth = 0.5f;
+        //Surround Pattern
+        programs_50[0].surroundPattern = 0.5;
+        programs_50[1].surroundPattern = 0.5;
+        programs_50[2].surroundPattern = 0.0;
+        //Surround Gain
+        programs_50[0].surroundGain = 0.75f;
+        programs_50[1].surroundGain = 0.75f;
+        programs_50[2].surroundGain = 0.75f;
+    
+    
+    //5.1 Mode
+        //Name
+        vst_strncpy (programs_51[0].name, "5.1 XY Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_51[1].name, "5.1 MS Microphones",kVstMaxProgNameLen);
+        vst_strncpy (programs_51[2].name, "5.1 Blumlein Fig8s",kVstMaxProgNameLen);
+        vst_strncpy (programs_51[3].name, "5.1 Heller et. al. 1",kVstMaxProgNameLen);
+        vst_strncpy (programs_51[4].name, "5.1 Heller et. al. 2",kVstMaxProgNameLen);
+        //Mode
+        programs_51[0].mode = 0.f;
+        programs_51[1].mode = 1.f;
+        programs_51[2].mode = 0.f;
+        //Width
+        programs_51[0].width = (1.f/3.f);
+        programs_51[1].width = (1.f/3.f);
+        programs_51[2].width = 0.5f;
+        //Pattern
+        programs_51[0].pattern = 0.5f;
+        programs_51[1].pattern = 0.5f;
+        programs_51[2].pattern = 0.f;
+        //Centre Pattern
+        programs_51[0].centrePattern = 0.5f;
+        programs_51[1].centrePattern = 0.5f;
+        programs_51[2].centrePattern = 0.0f;
+        //Centre Gain
+        programs_51[0].centreGain = 0.75f;
+        programs_51[1].centreGain = 0.75f;
+        programs_51[2].centreGain = 0.75f;
+        //SubGain
+        programs_51[0].subGain = 0.75f;
+        programs_51[1].subGain = 0.75f;
+        programs_51[2].subGain = 0.75f;
+        programs_51[3].subGain = 0.75f;
+        programs_51[4].subGain = 0.75f;
+        //FC
+        programs_51[0].fc = 5.0f/11.0f;
+        programs_51[1].fc = 5.0f/11.0f;
+        programs_51[2].fc = 5.0f/11.0f;
+        programs_51[3].fc = 5.0f/11.0f;
+        programs_51[4].fc = 5.0f/11.0f;
+        //Surround Mode
+        programs_51[0].surroundMode = 0.f;
+        programs_51[1].surroundMode = 1.f;
+        programs_51[2].surroundMode = 0.f;
+        //Surround Width
+        programs_51[0].surroundWidth = (5.5f/9.f);
+        programs_51[1].surroundWidth = (5.5f/9.f);
+        programs_51[2].surroundWidth = 0.5f;
+        //Surround Pattern
+        programs_51[0].surroundPattern = 0.5;
+        programs_51[1].surroundPattern = 0.5;
+        programs_51[2].surroundPattern = 0.0;
+        //Surround Gain
+        programs_51[0].surroundGain = 0.75f;
+        programs_51[1].surroundGain = 0.75f;
+        programs_51[2].surroundGain = 0.75f;
+
+    
+    //Load GUI
+    extern AEffGUIEditor* createEditor (AudioEffectX*);
+	setEditor (createEditor (this));
+    
+	resume ();		// flush buffer
+    
+    //Load Program0 default
+    if (programs_20||programs_21||programs_40||programs_50||programs_51) {
+        setProgram(0);
+    }
+}
+
+
+void ClassicAmbiDec::suspend()
+{
+    myDecoder.clearFilter();
+    
+    if (editor){
+        ((AEffGUIEditor*)editor)->setParameter (100, 0);
+    }
+}
+
+void ClassicAmbiDec::close()
+{
+}
+
+
+void ClassicAmbiDec::open()
+{
+}
+
+
+
+
+
+//------------------------------------------------------------------------
+bool ClassicAmbiDec::setSpeakerArrangement (VstSpeakerArrangement* pluginInput,
+                                        VstSpeakerArrangement* pluginOutput)
+{
+    numberInputs = pluginInput->numChannels;
+    numberOutputs = pluginOutput->numChannels;
+    
+    
+    bool result;//What to return, true for acceptable speaker arrangement
+    
+    switch (pluginOutput->type) {
+        case kSpeakerArr51://5.1 Output
+        {
+            if (pluginInput->type==kSpeakerArr31Cine) {
+                result = true;
+                }
+            else {
+                allocateArrangement (&myInputArrangement, 4);
+                myInputArrangement->type = kSpeakerArr31Cine;
+                result = false;
+            }
+            break;
+        }
+            
+        case kSpeakerArr50://NOT WORKING AS INTENDED
+        {
+            if (pluginInput->numChannels==4) {
+                result = true;
+            }
+            else {
+                allocateArrangement (&myInputArrangement, 4);
+                myInputArrangement->type = kSpeakerArr31Cine;
+                result = false;
+            }
+            break;
+        }
+            
+        case kSpeakerArr40Cine://4.0 Output (LRCS)
+        {
+            if (pluginInput->type==kSpeakerArr40Cine) {
+                result = true;
+            }
+            else {
+                allocateArrangement (&myInputArrangement, 4);
+                myInputArrangement->type = kSpeakerArr40Cine;
+                result = false;
+            }
+            break;
+        }
+            
+        case kSpeakerArr40Music://4.0 Output (Music)
+        {
+            if (pluginInput->type==kSpeakerArr40Music) {
+                result = true;
+            }
+            else {
+                allocateArrangement (&myInputArrangement, 4);
+                myInputArrangement->type = kSpeakerArr40Music;
+                result = false;
+            }
+            break;
+        }
+            
+        case kSpeakerArrStereo://Stereo
+        {
+            if (pluginInput->type==kSpeakerArr40Music) {
+                result = true;
+            }
+            else {
+                result = false;
+            }
+            break;
+        }
+            
+            
+        default:
+        {
+            if (pluginInput->type==kSpeakerArr31Cine) {
+                result = true;
+            }
+            else {
+                allocateArrangement (&myInputArrangement, 4);
+                myInputArrangement->type = kSpeakerArr31Cine;
+                result = false;
+            }
+            break;
+        }
+    }
+    
+    return result;
+}
+
+
+//------------------------------------------------------------------------
+bool ClassicAmbiDec::getSpeakerArrangement(VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput)
+{
+	*pluginInput  = myInputArrangement;    
+    return true;
+}
+
+
+
+//------------------------------------------------------------------------
+VstInt32 ClassicAmbiDec::getVstVersion()
+{
+    return kVstVersion;
+}
+
+
+//------------------------------------------------------------------------
+ClassicAmbiDec::~ClassicAmbiDec () //clears protected variables
+{
+	deallocateArrangement (&myInputArrangement);
+    
+    if (programs_20)
+		delete[] programs_20;
+    if (programs_21)
+		delete[] programs_21;
+    if (programs_40)
+		delete[] programs_40;
+    if (programs_50)
+		delete[] programs_50;
+    if (programs_51)
+		delete[] programs_51;
+}
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::resume ()  //Do this on a resume from the host
+{
+	AudioEffectX::resume ();
+    if (editor){
+        ((AEffGUIEditor*)editor)->setParameter (101, 0);
+    }
+}
+
+
+//------------------------------------------------------------------------
+bool ClassicAmbiDec::getProgramNameIndexed(VstInt32 category, VstInt32 index, char *text)
+{
+    switch (myDecoder.decoderMode) {
+        case 2:
+            strcpy(text, programs_20[index].name);
+            break;
+        case 3:
+            strcpy(text, programs_21[index].name);
+            break;
+        case 4:
+            strcpy(text, programs_40[index].name);
+            break;
+        case 5:
+            strcpy(text, programs_50[index].name);
+            break;
+        case 6:
+            strcpy(text, programs_51[index].name);
+            break;
+            
+        default:
+            break;
+    }
+
+    return true;
+}
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::setProgram(VstInt32 program)
+{
+    ClassicAmbiDecProgram* curProg;
+    curProgram = program;
+
+    switch (myDecoder.decoderMode) {
+        case 2:
+            curProg = &programs_20[program];
+            setParameter(kMode, curProg->mode);
+            setParameter(kWidth, curProg->width);
+            setParameter(kPattern, curProg->pattern);
+            setParameter(kRearVerb, curProg->rearVerb);
+            setParameter(kHiVerb, curProg->hiVerb);
+            break;
+            
+        case 3:
+            curProg = &programs_21[program];
+            setParameter(kMode, curProg->mode);
+            setParameter(kWidth, curProg->width);
+            setParameter(kPattern, curProg->pattern);
+            setParameter(kRearVerb, curProg->rearVerb);
+            setParameter(kHiVerb, curProg->hiVerb);
+            setParameter(kSubGain, curProg->subGain);
+            setParameter(kFc, curProg->fc);
+            break;
+            
+        case 4:
+            curProg = &programs_40[program];
+            setParameter(kMode, curProg->mode);
+            setParameter(kWidth, curProg->width);
+            setParameter(kPattern, curProg->pattern);
+            setParameter(kSurroundMode, curProg->surroundMode);
+            setParameter(kSurroundWidth, curProg->surroundWidth);
+            setParameter(kSurroundPattern, curProg->surroundPattern);
+            setParameter(kSurroundGain, curProg->surroundGain);
+            break;
+
+        case 5:
+            curProg = &programs_50[program];
+            if (program<3) {
+                myDecoder.mode5x=0;
+                setParameter(kMode, curProg->mode);
+                setParameter(kWidth, curProg->width);
+                setParameter(kPattern, curProg->pattern);
+                setParameter(kCentrePattern, curProg->centrePattern);
+                setParameter(kCentreGain, curProg->centreGain);
+                setParameter(kSurroundMode, curProg->surroundMode);
+                setParameter(kSurroundWidth, curProg->surroundWidth);
+                setParameter(kSurroundPattern, curProg->surroundPattern);
+                setParameter(kSurroundGain, curProg->surroundGain);
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
+                }
+            }
+            else if (program==3) {
+                myDecoder.mode5x=1;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
+                }
+            }
+            else if (program==4) {
+                myDecoder.mode5x=2;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
+                }
+            }
+            break;
+        case 6:
+            curProg = &programs_51[program];
+            if (program<3) {
+                myDecoder.mode5x=0;
+                setParameter(kMode, curProg->mode);
+                setParameter(kWidth, curProg->width);
+                setParameter(kPattern, curProg->pattern);
+                setParameter(kCentrePattern, curProg->centrePattern);
+                setParameter(kCentreGain, curProg->centreGain);
+                setParameter(kSubGain, curProg->subGain);
+                setParameter(kFc, curProg->fc);
+                setParameter(kSurroundMode, curProg->surroundMode);
+                setParameter(kSurroundWidth, curProg->surroundWidth);
+                setParameter(kSurroundPattern, curProg->surroundPattern);
+                setParameter(kSurroundGain, curProg->surroundGain);
+                
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
+                }
+            }
+            else if (program==3) {
+                //Only set the sub
+                setParameter(kSubGain, curProg->subGain);
+                setParameter(kFc, curProg->fc);
+                myDecoder.mode5x=1;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
+                }
+            }
+            else if (program==4) {
+                //Only set the sub
+                setParameter(kSubGain, curProg->subGain);
+                setParameter(kFc, curProg->fc);
+                myDecoder.mode5x=2;
+                if (editor){
+                    ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
+                }
+            }
+            break;
+            
+        default:
+            curProg = &programs_20[program];
+            break;
+    }
+}
+
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::setProgramName (char *name)
+{
+    switch (myDecoder.decoderMode) {
+        case 2:
+            strcpy (programs_20[curProgram].name, name);
+            break;
+        case 3:
+            strcpy (programs_21[curProgram].name, name);
+            break;
+        case 4:
+            strcpy (programs_40[curProgram].name, name);
+            break;
+        case 5:
+            strcpy (programs_50[curProgram].name, name);
+            break;
+        case 6:
+            strcpy (programs_51[curProgram].name, name);
+            break;
+            
+        default:
+            break;
+    }
+}
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::getProgramName (char *name)
+{
+    switch (myDecoder.decoderMode) {
+        case 2:
+            strcpy (name, programs_20[curProgram].name);
+            break;
+        case 3:
+            strcpy (name, programs_21[curProgram].name);
+            break;
+        case 4:
+            strcpy (name, programs_40[curProgram].name);
+            break;
+        case 5:
+            strcpy (name, programs_50[curProgram].name);
+            break;
+        case 6:
+            strcpy (name, programs_51[curProgram].name);
+            break;
+            
+        default:
+            break;
+    }
+}
+
+
+
+
+//------------------------------------------------------------------------
+//VstInt32 ClassicAmbiDec::getProgram()
+//{
+//    return curProgram;
+//}
+
+
+
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::setParameter (VstInt32 index, float value) // SET Parameter value from host
+{
+    ClassicAmbiDecProgram* curProg;
+    switch (myDecoder.decoderMode) {
+        case 2:
+            curProg = &programs_20[curProgram];
+            break;
+        case 3:
+            curProg = &programs_21[curProgram];
+            break;
+        case 4:
+            curProg = &programs_40[curProgram];
+            break;
+        case 5:
+            curProg = &programs_50[curProgram];
+            break;
+        case 6:
+            curProg = &programs_51[curProgram];
+            break;
+            
+        default:
+            curProg = &programs_20[curProgram];
+            break;
+    }
+    
+    
+	switch (index)
+	{
+        case kMode :
+			fMode = curProg->mode = value;
+			if (value<=0.5f) {
+				myDecoder.Mode = 0;
+			}
+			else {
+				myDecoder.Mode = 1;
+			}
+            break;
+		case kWidth:
+			fWidth = curProg->width = value;
+			myDecoder.Width = (double)value*90;
+			break;
+		case kPattern:
+			fPattern = curProg->pattern = value;
+			myDecoder.Pattern = (double)value;
+			break;
+		case kRotate :
+			fRotate = value;
+			if (value==0.5f) {
+				myDecoder.Rotate=0.0;
+			}
+			else {
+				myDecoder.Rotate = (double)value*-360+180;
+			}
+			break;
+		case kTilt:
+			fTilt = value;
+			if (value==0.5f) {
+				myDecoder.Tilt=0.0;
+			}
+			else {
+				myDecoder.Tilt = (double)value*-360+180;
+			}
+			break;
+		case kTumble:
+			fTumble = value;
+			if (value==0.5f) {
+				myDecoder.Tumble=0.00;
+			}
+			else {
+				myDecoder.Tumble = (double)value*-360+180;
+			}
+			break;
+		case kZoom:
+			fZoom = value;
+			myDecoder.Zoom = (double)value*200-100;
+			break;
+		case kZoomMethod:
+			fZoomMethod = value;
+			if (value<=0.2f) {
+				myDecoder.ZoomMethod = 0;
+			}
+			else if (value>0.2f && value<=0.5f) {
+				myDecoder.ZoomMethod = 1;
+			}
+			else if (value>0.5f && value<=0.8f) {
+				myDecoder.ZoomMethod = 2;
+			}
+			else if (value>0.8f && value<=1.f) {
+				myDecoder.ZoomMethod = 3;
+			}
+			
+			break;
+		case kRearVerb :
+			fRearVerb = curProg->rearVerb = value;
+            if (value==0.0f) {
+                myDecoder.RearVerb=-100;
+            }
+            else {
+                myDecoder.RearVerb = -36+(double)value*36;
+            }
+			break;
+		case kHiVerb :
+			fHiVerb = curProg->hiVerb = value;
+            if (value==0.0f) {
+                myDecoder.HiVerb=-100;
+            }
+            else {
+                myDecoder.HiVerb= -36+(double)value*36;
+            }
+			break;
+        case kCentrePattern:
+            fCentrePattern = curProg->centrePattern = value;
+			myDecoder.centrePattern = (double)value;
+            break;
+        case kCentreGain:
+            fCentreGain = curProg->centreGain = value;
+			myDecoder.centreGain = ((double)value*24-18);
+            break;
+        case kSubGain:
+            fSubGain = curProg->subGain = value;
+			myDecoder.subGain = ((double)value*24-18);
+            break;
+        case kFc:
+            fFc = curProg->fc = value;
+			myDecoder.Fc = (int)((value*220)+20);
+            myDecoder.filterCoefs();
+            break;
+        case kSurroundMode:
+            fSurroundMode = curProg->surroundMode = value;
+            if (value<=0.5f) {
+				myDecoder.surMode = 0;
+			}
+			else {
+				myDecoder.surMode = 1;
+			}
+            break;
+        case kSurroundPattern:
+            fSurroundPattern = curProg->surroundPattern = value;
+			myDecoder.surPattern = (double)value;
+            break;
+        case kSurroundWidth:
+            fSurroundWidth = curProg->surroundWidth = value;
+			myDecoder.surWidth = (double)value*90;
+            break;
+        case kSurroundGain:
+            fSurroundGain = curProg->surroundGain = value;
+			myDecoder.surGain = ((double)value*24-18);
+            break;
+        case kDecoderMode:
+            fDecoderMode = value;
+            
+            if (value<=0.125f) {
+				myDecoder.decoderMode = 2; //Stereo
+			}
+			else if (value>0.125f && value<=0.375f) {
+				myDecoder.decoderMode = 3; //2.1
+			}
+			else if (value>0.375f && value<=0.625f) {
+				myDecoder.decoderMode = 4; //Quad
+			}
+			else if (value>0.625f && value<=0.875f) {
+				myDecoder.decoderMode = 5; //5.0
+			}
+            else if (value>0.875f) {
+				myDecoder.decoderMode = 6; //5.1
+			}
+            updateDisplay();
+            break;
+        case kChannelOrder:
+            fChannelOrder = value;
+			if (value<=0.5f) {
+				myDecoder.channelOrder = 0; //Natural Outputs
+			}
+			else {
+                myDecoder.channelOrder = 1; //5.1 Outputs
+			}
+            break;
+            
+        default:
+            break;
+	}
+    if (editor){
+        ((AEffGUIEditor*)editor)->setParameter (index, value);
+    }
+    if (index==kDecoderMode) {
+        setProgram(curProgram);
+    }
+}
+
+
+//------------------------------------------------------------------------
+float ClassicAmbiDec::getParameter (VstInt32 index) // GET the value of the parameter
+{
+	float returnFloat; 
+    
+	switch (index)
+	{
+        case kMode :
+			returnFloat = fMode;
+            break;
+		case kWidth:
+			returnFloat = fWidth;
+			break;
+		case kPattern:
+			returnFloat = fPattern;
+			break;
+		case kRotate :
+			returnFloat = fRotate;
+			break;
+		case kTilt:
+			returnFloat = fTilt;
+			break;
+		case kTumble:
+			returnFloat = fTumble;
+			break;
+		case kZoom:
+			returnFloat = fZoom;
+			break;
+		case kZoomMethod:
+			returnFloat = fZoomMethod;
+			break;
+		case kRearVerb :
+			returnFloat = fRearVerb;
+			break;
+		case kHiVerb :
+			returnFloat = fHiVerb;
+			break;
+        case kCentrePattern:
+            returnFloat = fCentrePattern;
+            break;
+        case kCentreGain:
+            returnFloat = fCentreGain;
+            break;
+        case kSubGain:
+            returnFloat = fSubGain;
+            break;
+        case kFc:
+            returnFloat = fFc;
+            break;
+        case kSurroundMode:
+            returnFloat = fSurroundMode;
+            break;
+        case kSurroundPattern:
+            returnFloat = fSurroundPattern;
+            break;
+        case kSurroundWidth:
+            returnFloat = fSurroundWidth;
+            break;
+        case kSurroundGain:
+            returnFloat = fSurroundGain;
+            break;
+        case kDecoderMode:
+            returnFloat = fDecoderMode;
+            break;
+        case kChannelOrder:
+            returnFloat = fChannelOrder;
+            break;
+            
+            
+        //HIDDEN PArameters for GUI Control
+        case 102: //Bit Mode for GUI display
+            returnFloat = bits;
+            break;
+        case 103:
+            returnFloat = myDecoder.mode5x;
+            break;
+            
+        default:
+            break;
+	}
+	return returnFloat; //Returns the chosen Parameters value
+}
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::getParameterName (VstInt32 index, char *label) //SET display value shown for Parameters
+{
+	switch (index)
+	{
+        case kMode :
+			switch (myDecoder.Mode) {
+				case 0 :
+					strcpy(label, "XY");
+					break;
+				case 1 :
+					strcpy(label, "MS");
+					break;
+			}
+            break;
+		case kWidth:
+			strcpy(label, "Width");
+			break;
+		case kPattern:
+			strcpy(label, "Pattern");
+			break;
+		case kRotate :
+			strcpy(label, "Rotate");
+			break;
+		case kTilt:
+			strcpy(label, "Tilt");
+			break;
+		case kTumble:
+			strcpy(label, "Tumble");
+			break;
+		case kZoom:
+			strcpy(label, "Zoom");
+			break;
+		case kZoomMethod:
+			strcpy(label, "Zoom Method");
+			break;
+		case kRearVerb :
+			strcpy(label, "RearVerb");
+			break;
+		case kHiVerb :
+			strcpy(label, "HiVerb");
+			break;
+        case kCentrePattern:
+            strcpy(label, "Ctr. Pattern");
+            break;
+        case kCentreGain:
+            strcpy(label, "Ctr. Gain");
+            break;
+        case kSubGain:
+            strcpy(label, "Sub. Gain");
+            break;
+        case kFc:
+            strcpy(label, "Sub. Xover");
+            break;
+        case kSurroundMode:
+            strcpy(label, "Sur. Mode");
+            break;
+        case kSurroundPattern:
+            strcpy(label, "Sur. Pattern");
+            break;
+        case kSurroundWidth:
+            strcpy(label, "Sur. Width");
+            break;
+        case kSurroundGain:
+            strcpy(label, "Sur. Gain");
+            break;
+        case kDecoderMode:
+            strcpy(label, "Dec. Mode");
+            break;
+        case kChannelOrder:
+            strcpy(label, "Ch. Order");
+            break;
+            
+        default:
+            break;
+	}
+}
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::getParameterDisplay (VstInt32 index, char *text)   //GET display value shown for Parameters
+{
+	switch (index)
+	{
+        case kMode :
+			switch (myDecoder.Mode) {
+				case 0 :
+					strcpy(text, "XY");
+					break;
+				case 1 :
+					strcpy(text, "MS");
+					break;
+			}
+            break;
+		case kWidth:
+			sprintf (text, "%.1f\u00B0", myDecoder.Width);
+			break;
+		case kPattern:
+			if (myDecoder.Pattern<=0.125) {
+				strcpy(text, "Fig-of-8");
+			}
+			else if (myDecoder.Pattern>0.125 && myDecoder.Pattern<=0.375) {
+				strcpy(text, "Hyper-Card.");
+			}
+			else if (myDecoder.Pattern>0.375 && myDecoder.Pattern<=0.625) {
+				strcpy(text, "Cardioid");
+			}
+			else if (myDecoder.Pattern>0.625 && myDecoder.Pattern<=0.875) {
+				strcpy(text, "Sub-Card.");
+			}
+			else {
+				strcpy(text, "Omni.");
+			}
+			break;
+		case kRotate :
+			sprintf (text, "%.1f\u00B0", myDecoder.Rotate);
+			break;
+		case kTilt:
+			sprintf (text, "%.1f\u00B0", myDecoder.Tilt);
+			break;
+		case kTumble:
+			sprintf (text, "%.1f\u00B0", myDecoder.Tumble);
+			break;
+		case kZoom:
+			sprintf (text, "%.1f%%", myDecoder.Zoom);
+			break;
+		case kZoomMethod:
+			switch (myDecoder.ZoomMethod) {
+				case 0:
+					strcpy(text, "Dominance");
+					break;
+				case 1:
+					strcpy(text, "Press");
+					break;
+				case 2:
+					strcpy(text, "Push");
+					break;
+				case 3:
+					strcpy(text, "Focus");
+					break;
+				default:
+					break;
+			}
+			break;
+		case kRearVerb :
+            if (myDecoder.RearVerb>-40) {
+                sprintf (text, "%.2fdB", myDecoder.RearVerb);
+            }
+			else {
+                strcpy(text, "Off");
+            }
+			break;
+		case kHiVerb :
+            if (myDecoder.HiVerb>-40) {
+                sprintf (text, "%.2fdB", myDecoder.HiVerb);
+            }
+            else {
+                strcpy(text, "Off");
+            }
+			break;
+        case kCentrePattern:
+            if (myDecoder.centrePattern<=0.125) {
+				strcpy(text, "Fig-of-8");
+			}
+			else if (myDecoder.centrePattern>0.125 && myDecoder.centrePattern<=0.375) {
+				strcpy(text, "Hyper-Card.");
+			}
+			else if (myDecoder.centrePattern>0.375 && myDecoder.centrePattern<=0.625) {
+				strcpy(text, "Cardioid");
+			}
+			else if (myDecoder.centrePattern>0.625 && myDecoder.centrePattern<=0.875) {
+				strcpy(text, "Sub-Card.");
+			}
+			else {
+				strcpy(text, "Omni.");
+			}
+            break;
+        case kCentreGain:
+            sprintf (text, "%.2fdB", myDecoder.centreGain);
+            break;
+        case kSubGain:
+            sprintf (text, "%.2fdB", myDecoder.subGain);
+            break;
+        case kFc:
+            sprintf (text, "%dHz", myDecoder.Fc);
+            break;
+        case kSurroundMode:
+            switch (myDecoder.surMode) {
+				case 0 :
+					strcpy(text, "XY");
+					break;
+				case 1 :
+					strcpy(text, "MS");
+					break;
+			}
+            break;
+        case kSurroundPattern:
+            if (myDecoder.surPattern<=0.125) {
+				strcpy(text, "Fig-of-8");
+			}
+			else if (myDecoder.surPattern>0.125 && myDecoder.surPattern<=0.375) {
+				strcpy(text, "Hyper-Card.");
+			}
+			else if (myDecoder.surPattern>0.375 && myDecoder.surPattern<=0.625) {
+				strcpy(text, "Cardioid");
+			}
+			else if (myDecoder.surPattern>0.625 && myDecoder.surPattern<=0.875) {
+				strcpy(text, "Sub-Card.");
+			}
+			else {
+				strcpy(text, "Omni.");
+			}
+            break;
+        case kSurroundWidth:
+            sprintf (text, "%.1f\u00B0", myDecoder.surWidth);
+            break;
+        case kSurroundGain:
+            sprintf (text, "%.2fdB", myDecoder.surGain);
+            break;
+        case kDecoderMode:
+            switch (myDecoder.decoderMode) {
+				case 2 :
+					strcpy(text, "Stereo");
+					break;
+				case 3 :
+					strcpy(text, "2.1");
+					break;
+                case 4 :
+					strcpy(text, "Quad");
+					break;
+                case 5 :
+					strcpy(text, "5.0");
+					break;
+                case 6 :
+					strcpy(text, "5.1");
+					break;
+			}
+            break;
+        case kChannelOrder:
+            switch (myDecoder.channelOrder) {
+				case 0 :
+					strcpy(text, "Natural");
+					break;
+				case 1 :
+					strcpy(text, "5.1");
+					break;
+			}
+            break;
+            
+        default:
+            break;
+	}
+}
+
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::getParameterLabel (VstInt32 index, char *label)    // Labels shown for Parameters
+{
+	switch (index)
+	{
+        case kMode :
+			strcpy(label, "Microphones");
+			break;
+		case kWidth:
+			strcpy(label, "Degrees");
+			break;
+		case kPattern:
+			strcpy(label, "Omni");
+			break;
+		case kRotate :
+			strcpy(label, "Degrees");
+			break;
+		case kTilt:
+			strcpy(label, "Degrees");
+			break;
+		case kTumble:
+			strcpy(label, "Degrees");
+			break;
+		case kZoom:
+			strcpy(label, "Percentage");
+			break;
+		case kZoomMethod:
+			strcpy(label, "Selection");
+			break;
+		case kRearVerb :
+			strcpy(label, "dB");
+			break;
+		case kHiVerb :
+			strcpy(label, "dB");
+			break;
+        case kCentrePattern:
+            strcpy(label, "Omni");
+            break;
+        case kCentreGain:
+            strcpy(label, "dB");
+            break;
+        case kSubGain:
+            strcpy(label, "dB");
+            break;
+        case kFc:
+            strcpy(label, "Hz");
+            break;
+        case kSurroundMode:
+            strcpy(label, "Microphones");
+            break;
+        case kSurroundPattern:
+            strcpy(label, "Omni");
+            break;
+        case kSurroundWidth:
+            strcpy(label, "Degrees");
+            break;
+        case kSurroundGain:
+            strcpy(label, "dB");
+            break;
+        case kDecoderMode:
+            strcpy(label, "Speakers");
+            break;
+        case kChannelOrder:
+            strcpy(label, "Output");
+            break;
+	}
+}
+
+
+
+//------------------------------------------------------------------------
+bool ClassicAmbiDec::getEffectName (char* name) // Tha NAME of the effect
+{
+	strcpy (name, "Classic Ambisonics Decoder");
+	return true;
+}
+
+
+
+//------------------------------------------------------------------------
+bool ClassicAmbiDec::getProductString (char* text)  // The PRODUCT name
+{
+	strcpy (text, "Classic Ambisonics Decoder");
+	return true;
+}
+
+
+
+//------------------------------------------------------------------------
+bool ClassicAmbiDec::getVendorString (char* text)   // Vendor (Creator/Publisher)
+{
+	strcpy (text, "Martin J. Morrell");
+	return true;
+}
+
+
+//------------------------------------------------------------------------
+VstInt32 ClassicAmbiDec::getVendorVersion () 
+{
+    return VERSION;
+}
+
+
+
+//------------------------------------------------------------------------
+void ClassicAmbiDec::setSampleRate(float sampleRate)
+{
+    myDecoder.Fs = (int)sampleRate;
+    myDecoder.filterCoefs();
+}
+
+
+
+//---------------------------------------------------------------------------
+void ClassicAmbiDec::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) //The part that does some actual DSP. This section takes the input audio and gives the output audio back.
+{
+	while (--sampleFrames >= 0) //Do this process if the audio is running
+	{
+		//Set the internal B-Format values as doubles.
+        double w, x, y, z;
+        switch (numberInputs) {
+            case 3:
+            {
+                w = (double) *inputs[0]++;
+                x = (double) *inputs[1]++;
+                y = (double) *inputs[2]++;
+                z = 0;
+                break;
+            }
+                
+            case 4:
+            {
+                w = (double) *inputs[0]++;
+                x = (double) *inputs[1]++;
+                y = (double) *inputs[2]++;
+                z = (double) *inputs[3]++;
+                break;
+            }
+                
+            default:
+            {
+                w = 0;
+                x = 0;
+                y = 0;
+                z = 0;
+                break;
+            }
+        }
+
+		
+        int numOut;
+        numOut = myDecoder.processDecoder(w, x, y, z); //Process B-Format
+
+        if (numOut<numberOutputs){  //Zero up extra outputs
+            for (int i=0; i<numOut; i++)    
+                *outputs[i]++ = float(myDecoder.output[i]);
+            for (int i=numOut; i<numberOutputs; i++)
+                *outputs[i]++ = 0.f;
+        }
+        else if (numOut==numberOutputs){    //Number of decoder outputs matches channel outputs
+            for (int i=0; i<numOut; i++)
+                *outputs[i]++ = float(myDecoder.output[i]);
+        }
+        else{   //Only use available outputs
+            for (int i=0; i<numberOutputs; i++)
+                *outputs[i]++ = float(myDecoder.output[i]);
+        }
+	}
+}
+
+
+//---------------------------------------------------------------------------
+void ClassicAmbiDec::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) //The part that does some actual DSP. This section takes the input audio and gives the output audio back.
+{
+	while (--sampleFrames >= 0) //Do this process if the audio is running
+	{
+		//Set the internal B-Format values as doubles.
+        double w, x, y, z;
+        switch (numberInputs) {
+            case 3:
+            {
+                w = *inputs[0]++;
+                x = *inputs[1]++;
+                y = *inputs[2]++;
+                z = 0;
+                break;
+            }
+                
+            case 4:
+            {
+                w = *inputs[0]++;
+                x = *inputs[1]++;
+                y = *inputs[2]++;
+                z = *inputs[3]++;
+                break;
+            }
+                
+            default:
+            {
+                w = 0;
+                x = 0;
+                y = 0;
+                z = 0;
+                break;
+            }
+        }
+        
+		
+        int numOut;
+        numOut = myDecoder.processDecoder(w, x, y, z); //Process B-Format
+        
+        if (numOut<numberOutputs){  //Zero up extra outputs
+            for (int i=0; i<numOut; i++)
+                *outputs[i]++ = myDecoder.output[i];
+            for (int i=numOut; i<numberOutputs; i++)
+                *outputs[i]++ = 0.0;
+        }
+        else if (numOut==numberOutputs){    //Number of decoder outputs matches channel outputs
+            for (int i=0; i<numOut; i++)
+                *outputs[i]++ = myDecoder.output[i];
+        }
+        else{   //Only use available outputs
+            for (int i=0; i<numberOutputs; i++)
+                *outputs[i]++ = myDecoder.output[i];
+        }
+	}
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/ClassicAmbiDec.h	Thu Sep 27 23:29:16 2012 +0100
@@ -0,0 +1,134 @@
+
+#define kNumPrograms 5 //Number of Programs
+#define MAX_CHANNELS 6 //Max Input/Output Count
+#define VERSION      1000 //Plugin Version
+#define kVstVersion  2400 //Plugin implemented in VST Version
+
+#ifndef __ClassicAmbiDec__
+#define __ClassicAmbiDec__
+
+//VST SDK Header(s)
+#include "audioeffectx.h"
+
+//Parameters Header
+#include "ClassicAmbiDecParameters.h"
+#include "Decoder.h"
+
+
+//------------------------------------------------------------------------
+struct ClassicAmbiDecProgram
+{
+	friend class ClassicAmbiDec;
+    
+public:
+	ClassicAmbiDecProgram ();
+	~ClassicAmbiDecProgram () {}
+	
+private:
+    char name[kVstMaxProgNameLen];
+    float mode;
+    float width;
+    float pattern;
+	float rearVerb;
+	float hiVerb;
+    float centrePattern;
+    float centreGain;
+    float subGain;
+    float surroundMode;
+    float surroundPattern;
+    float surroundWidth;
+    float surroundGain;
+    float fc;
+};
+
+
+
+
+
+//------------------------------------------------------------------------
+class ClassicAmbiDec : public AudioEffectX
+{
+	friend class MyEditor;
+public:
+	ClassicAmbiDec (audioMasterCallback audioMaster);
+	~ClassicAmbiDec ();
+	
+
+	//---from AudioEffect-----------------------
+    //Calls used from AudioEffectX
+    //
+    virtual void resume ();
+    virtual void suspend ();
+    virtual void close ();
+    virtual void open ();
+	virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
+    virtual void processDoubleReplacing (double ** 	inputs, double ** 	outputs, VstInt32 sampleFrames);
+    
+    virtual void setProgram(VstInt32 program);
+    virtual void setProgramName (char* name);
+	virtual void getProgramName (char* name);
+    virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text);
+    //virtual VstInt32 getProgram();
+	
+	virtual void setParameter (VstInt32 index, float value);
+	virtual float getParameter (VstInt32 index);
+	virtual void getParameterLabel (VstInt32 index, char* label);
+	virtual void getParameterDisplay (VstInt32 index, char* text);
+	virtual void getParameterName (VstInt32 index, char* text);
+	
+    virtual void setSampleRate (float sampleRate);
+    
+	virtual bool getEffectName (char* name);
+	virtual bool getVendorString (char* text);
+	virtual bool getProductString (char* text);
+	virtual VstInt32 getVendorVersion ();
+    virtual VstInt32 getVstVersion();
+
+	virtual VstPlugCategory getPlugCategory () { return kPlugCategSpacializer; }
+	virtual bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput);
+    virtual bool getSpeakerArrangement (VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput);
+    
+    
+    // Variables
+    char label[20];
+    int bits;
+	Decoder myDecoder;
+    VstSpeakerArrangement* myInputArrangement;
+	
+    
+    
+private:       
+    int     numberOutputs;
+    int     numberInputs;
+
+    ClassicAmbiDecProgram* programs_20;
+    ClassicAmbiDecProgram* programs_21;
+    ClassicAmbiDecProgram* programs_40;
+    ClassicAmbiDecProgram* programs_50;
+    ClassicAmbiDecProgram* programs_51;
+    
+    //Parameter float values
+    float fMode;
+    float fWidth;
+    float fPattern;
+    float fRotate;
+    float fTilt;
+	float fTumble;
+	float fZoom;
+	float fZoomMethod;
+	float fRearVerb;
+	float fHiVerb;
+    float fCentrePattern;
+    float fCentreGain;
+    float fSubGain;
+    float fSurroundMode;
+    float fSurroundPattern;
+    float fSurroundWidth;
+    float fSurroundGain;
+    float fFc;
+    float fDecoderMode;
+    float fChannelOrder;
+};
+
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/ClassicAmbiDecMain.cpp	Thu Sep 27 23:29:16 2012 +0100
@@ -0,0 +1,11 @@
+
+#ifndef __ClassicAmbiDec__
+#include "ClassicAmbiDec.h"
+#endif
+
+//-------------------------------------------------------------------------------------------------------
+AudioEffect* createEffectInstance (audioMasterCallback audioMaster) //Start a new instance of our effect
+{
+	return new ClassicAmbiDec (audioMaster);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Source/ClassicAmbiDecParameters.h	Thu Sep 27 23:29:16 2012 +0100
@@ -0,0 +1,39 @@
+//
+//  TutorialParameters.cpp
+//  ClassicAmbiDec//
+//  Created by Martin Morrell on 02/06/2012.
+//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
+//
+
+
+#ifndef __SoundFieldParameters__
+#define __SoundFieldParameters__
+
+enum
+{
+	// Parameters Tags
+    kRotate, //0
+    kTilt, //1
+	kTumble, //2
+	kZoom, //3
+	kZoomMethod, //4
+    kMode, //5
+    kWidth, //6
+    kPattern, //7
+	kRearVerb, //8
+	kHiVerb, //9
+    kCentrePattern, //10
+    kCentreGain, //11
+    kSubGain, //12
+    kFc, //13
+    kSurroundMode, //14
+    kSurroundPattern, //15
+    kSurroundWidth, //16
+    kSurroundGain, //17
+    kDecoderMode, //18
+    kChannelOrder, //19
+    
+    kNumParameters
+};
+
+#endif 
\ No newline at end of file
--- a/Source/Decoder.cpp	Thu Sep 27 12:33:46 2012 +0100
+++ b/Source/Decoder.cpp	Thu Sep 27 23:29:16 2012 +0100
@@ -1,6 +1,6 @@
 /*
  *  Decoder.cpp
- *  SoundField
+ *  ClassicAmbiDec
  *
  *  Created by Martin Morrell on 14/06/2012.
  *  Copyright 2012 Queen Mary University of London. All rights reserved.
@@ -18,6 +18,44 @@
 #define HiVerbPattern 0.5   //Hi Verb Microphone Pattern
 
 
+Decoder::Decoder()
+{
+ //  myDecoder parameters
+ Rotate=0.0;
+ Tilt=0.0;
+ Tumble=0.0;
+ Zoom=0.0;
+ ZoomMethod=0.0;
+ Width=45.0;
+ Pattern=0.5;
+ Mode=0;
+ RearVerb=-100;
+ HiVerb=-100;
+ surMode=0;
+ surPattern=0.5;
+ surWidth=60.0;
+ surGain = 0.0;
+ Fc = 120;
+ centrePattern=0.5;
+ centreGain=0.0;
+ subGain=0.0;
+ Fs = 44100;
+ filterCoefs();
+ decoderMode=2; //Default mode is Stereo
+ channelOrder=1;
+ mode5x=0;
+ 
+ // Zero up decoder outputs as a safety
+ outputL=0.0;
+ outputR=0.0;
+ outputC=0.0;
+ outputS=0.0;
+ outputSL=0.0;
+ outputSR=0.0;
+};
+
+
+//Conversion Functions
 double Decoder::degRad(double angle)
 {
 	return (angle/180*M_PI);
@@ -30,7 +68,7 @@
 };
 
 
-//Overall Functions
+//Overall Function
 int Decoder::processDecoder(double &w, double &x, double &y, double &z)
 {
     //Sound field rotations. Only called if the value is not 0
@@ -210,7 +248,7 @@
 };
 
 
-
+//Decoder Mode Functions
 void Decoder::monoDecoder(double &w, double &x, double &y, double &z)//NOT USED
 {
 	//Centre virtual mic
@@ -429,10 +467,7 @@
 
 
 
-
-
-
-//SoundField Rotations
+//Sound Field Rotations
 void Decoder::rotateField(double &x, double &y)
 {	
 	double temp = x;
@@ -518,7 +553,7 @@
 
 
 
-//Stereo Decoders
+//Stereo Microphone Pairs
 void Decoder::xyDecode(double &w, double &x, double &y, double &z)
 {	
     outputL = Pattern*sqrt(2.0)*w + (1-Pattern)*(cos(degRad(Width))*x + sin(degRad(Width))*y);
@@ -563,7 +598,7 @@
 };
 
 
-//Surround Decoders
+//Surround Microphone Pairs
 void Decoder::xySurDecode(double &w, double &x, double &y, double &z)
 {	
     outputSL = (surPattern*sqrt(2.0)*w + (1-surPattern)*(cos(degRad(surWidth))*-x + sin(degRad(surWidth))*y))*pow(10, surGain/20);
@@ -578,13 +613,14 @@
 };
 
 
+//Centre Microphone Pairs
 void Decoder::centreMic(double &w, double &x)
 {
     outputC = (centrePattern*sqrt(2.0)*w + (1-centrePattern)*x) * pow(10, centreGain/20);
 };
 
 
-
+//Heller 5.x Decoding
 void Decoder::heller1(double &w, double &x, double &y, double &z)
 {
     outputL = (0.28205165*w +0.24760232*x +0.18790454*y)*1.40171951577097;
@@ -605,7 +641,7 @@
 };
 
 
-
+//Second Order IIR Filter
 void Decoder::filterCoefs(){
     double k = tan((M_PI*Fc)/Fs);
     double denominator = pow(k, 2.0) + 2.0*k + 1;
--- a/Source/Decoder.h	Thu Sep 27 12:33:46 2012 +0100
+++ b/Source/Decoder.h	Thu Sep 27 23:29:16 2012 +0100
@@ -1,6 +1,6 @@
 /*
  *  Decoder.h
- *  SoundField
+ *  ClassicAmbiDec
  *
  *  Created by Martin Morrell on 14/06/2012.
  *  Copyright 2012 Queen Mary University of London. All rights reserved.
@@ -12,6 +12,8 @@
 {	
 	friend class MyEditor;
 public:
+    Decoder();
+    
     //Transforms & Zoom
 	double Rotate; //+/-180 degrees
 	double Tilt; //+/-180 degrees
@@ -30,60 +32,38 @@
 	int    Mode; //0 or 1 for xy or ms
 	double RearVerb; //0-24dB
 	double HiVerb; //0-24dB
-	double outputL; //Left output
-	double outputR; //Right output
 	
     //Centre Speaker Decoding
-    double outputC; //Centre output
     double centrePattern; //Centre mic pattern
     double centreGain; //Centre mic gain
     
     //Subwoofer Signal
-    double outputS; //Subwoofer output
     double subGain; //Subwoofer gain
     
     //Surround Speaker Decoding
-    double outputSL; //Surround Left output
-    double outputSR; //Surround Right output
     int    surMode; //Rear mics mode
     double surPattern; //Rear mics pattern
     double surWidth; //Rear mics width
     double surGain; //Rear mics gain
-    double output[6]; //Final Output
     
-
-    
-    
-    //Filter Code for subwoofer
+    //Filter Code
     int Fs; //Sample Rate
     int Fc; //Crossover Frequency
-    double bLF[3]; //b Coefficients for Lower Frequency Band
-    double bHF[3]; //b Coefficients for Higher Frequency Band
-    double a[3]; //a Coefficients
-    double prevInS[2]; //Previous Input LF Samples
-    double prevOutS[2]; //Previous Output LF Samples
-    double prevInw[2]; //Previous Input w Samples
-    double prevOutw[2]; //Previous Output w Samples
-    double prevInx[2]; //Previous Input x Samples
-    double prevOutx[2]; //Previous Output x Samples
-    double prevIny[2]; //Previous Input y Samples
-    double prevOuty[2]; //Previous Output y Samples
-    double prevInz[2]; //Previous Input z Samples
-    double prevOutz[2]; //Previous Output z Samples
-    
     void   clearFilter(); //Clears the previous filter values
-    
+    void filterCoefs(); //Calculates the filter coefficients
     
 	//Overall Decoding Functions
+    double output[6]; //Final Output
     int processDecoder(double &w, double &x, double &y, double &z); //Called fucntion to do the decoding
    
     
 	
-//private:
+private:
+    //Conversion Functions
 	double degRad(double angle); //Convert degreesto radians
 	double radDeg(double angle); //Convert radians to degrees
 	
-	//SoundField Rotations
+	//Sound Field Rotations
 	void rotateField(double &x, double &y);
 	void tiltField(double &x, double &y);
 	void tumbleField(double &x, double &y);
@@ -108,12 +88,24 @@
 	void msSurDecode(double &w, double &x, double &y, double &z);
     
     //Filter Code
-    void filterCoefs();
     void filterLF(double &w);
     void filterHF(double &w, double &x, double &y, double &z);
+    double bLF[3]; //b Coefficients for Lower Frequency Band
+    double bHF[3]; //b Coefficients for Higher Frequency Band
+    double a[3]; //a Coefficients
+    double prevInS[2]; //Previous Input LF Samples
+    double prevOutS[2]; //Previous Output LF Samples
+    double prevInw[2]; //Previous Input w Samples
+    double prevOutw[2]; //Previous Output w Samples
+    double prevInx[2]; //Previous Input x Samples
+    double prevOutx[2]; //Previous Output x Samples
+    double prevIny[2]; //Previous Input y Samples
+    double prevOuty[2]; //Previous Output y Samples
+    double prevInz[2]; //Previous Input z Samples
+    double prevOutz[2]; //Previous Output z Samples
     
     //Decoder Types
-    void monoDecoder(double &w, double &x, double &y, double &z); //Decode to mono
+    void monoDecoder(double &w, double &x, double &y, double &z); //Decode to mono, implemented but not used
 	void stereoDecoder(double &w, double &x, double &y, double &z); //Decode to stereo
     void twoOneDecoder(double &w, double &x, double &y, double &z); //Decode to stereo
     void quadDecoder(double &w, double &x, double &y, double &z); //Decode to LRCS
@@ -121,5 +113,10 @@
 	void fiveOneDecoder(double &w, double &x, double &y, double &z); //Decode to 5.1
     void heller1(double &w, double &x, double &y, double &z);
     void heller2(double &w, double &x, double &y, double &z);
-    void craven(double &w, double &x, double &y, double &z);
+    double outputL; //Left output
+    double outputR; //Right output
+    double outputC; //Centre output
+    double outputS; //Subwoofer output
+    double outputSL; //Surround Left output
+    double outputSR; //Surround Right output
 };
\ No newline at end of file
--- a/Source/GUI.cpp	Thu Sep 27 12:33:46 2012 +0100
+++ b/Source/GUI.cpp	Thu Sep 27 23:29:16 2012 +0100
@@ -134,12 +134,6 @@
 	knob_mode4->forget();
     knob_mode5->forget();
     
-    //myPlot->decoder_mode=-1;
-    //modeChange();
-    
-    
-    
-    
 	//-- on close we need to delete the frame object.
 	//-- once again we make sure that the member frame variable is set to zero before we delete it
 	//-- so that calls to setParameter won't crash.
@@ -600,16 +594,7 @@
 	controls[kWidth] = knobWidth;
 	controls[kPattern] = knobPattern;
 	controls[kRearVerb] = knobRearVerb;
-	controls[kHiVerb] = knobHiVerb;
-    //controls[kCentrePattern] = knobCentrePattern;
-    //controls[kCentreGain] =knobCentreGain;
-    //controls[kSubGain] = knobSubGain;
-    //controls[kFc] = knobFc;
-    //controls[kSurroundMode] = knobSurroundMode;
-    //controls[kSurroundPattern] = knobSurroundPattern;
-    //controls[kSurroundWidth] = knobSurroundWidth;
-    //controls[kSurroundGain] = knobSurroundGain;
-    
+	controls[kHiVerb] = knobHiVerb;    
     
     //Forget Label, Knobs etc.
     bControls->forget();
@@ -876,14 +861,9 @@
 	controls[kPattern] = knobPattern;
 	controls[kRearVerb] = knobRearVerb;
 	controls[kHiVerb] = knobHiVerb;
-    //controls[kCentrePattern] = knobCentrePattern;
-    //controls[kCentreGain] =knobCentreGain;
     controls[kSubGain] = knobSubGain;
     controls[kFc] = knobFc;
-    //controls[kSurroundMode] = knobSurroundMode;
-    //controls[kSurroundPattern] = knobSurroundPattern;
-    //controls[kSurroundWidth] = knobSurroundWidth;
-    //controls[kSurroundGain] = knobSurroundGain;
+    
     
     //Forget Label, Knobs etc.
     bControls->forget();
@@ -1136,12 +1116,6 @@
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
 	controls[kPattern] = knobPattern;
-	//controls[kRearVerb] = knobRearVerb;
-	//controls[kHiVerb] = knobHiVerb;
-    //controls[kCentrePattern] = knobCentrePattern;
-    //controls[kCentreGain] =knobCentreGain;
-    //controls[kSubGain] = knobSubGain;
-    //controls[kFc] = knobFc;
     controls[kSurroundMode] = knobSurroundMode;
     controls[kSurroundPattern] = knobSurroundPattern;
     controls[kSurroundWidth] = knobSurroundWidth;
@@ -1474,12 +1448,8 @@
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
 	controls[kPattern] = knobPattern;
-	//controls[kRearVerb] = knobRearVerb;
-	//controls[kHiVerb] = knobHiVerb;
     controls[kCentrePattern] = knobCentrePattern;
     controls[kCentreGain] =knobCentreGain;
-    //controls[kSubGain] = knobSubGain;
-    //controls[kFc] = knobFc;
     controls[kSurroundMode] = knobSurroundMode;
     controls[kSurroundPattern] = knobSurroundPattern;
     controls[kSurroundWidth] = knobSurroundWidth;
@@ -1872,8 +1842,6 @@
     controls[kMode] = knobMode;
 	controls[kWidth] = knobWidth;
 	controls[kPattern] = knobPattern;
-	//controls[kRearVerb] = knobRearVerb;
-	//controls[kHiVerb] = knobHiVerb;
     controls[kCentrePattern] = knobCentrePattern;
     controls[kCentreGain] =knobCentreGain;
     controls[kSubGain] = knobSubGain;
@@ -2440,24 +2408,23 @@
 	//-- VSTGUI will automaticly redraw changed controls in the next idle (as this call happens to be in the process thread).
 	if (frame && index < kNumParameters)
 	{
-        bool exists = false; //Checks if control exists, needed for outside automation
-
+        bool exists = true; //Checks if control exists, needed for outside automation
 
         switch (index) {
             case kRotate:
-                    exists = getFrame()->isChild(knobRotate);
+                    //exists = getFrame()->isChild(knobRotate);
                 break;
             case kTilt:
-                    exists = getFrame()->isChild(knobTilt);
+                    //exists = getFrame()->isChild(knobTilt);
                 break;
             case kTumble:
-                    exists = getFrame()->isChild(knobTumble);
+                    //exists = getFrame()->isChild(knobTumble);
                 break;
             case kZoom:
-                    exists = getFrame()->isChild(knobZoom);
+                    //exists = getFrame()->isChild(knobZoom);
                 break;
             case kZoomMethod:
-                    exists = getFrame()->isChild(knobZoomMethod);
+                    //exists = getFrame()->isChild(knobZoomMethod);
                 break;
             case kMode:
                 if (value<=0.5f) {
@@ -2544,24 +2511,22 @@
                 }
                 myPlot->setDirty();
                 modeChange();
-                    exists = getFrame()->isChild(knobDecoder);
+                    //exists = getFrame()->isChild(knobDecoder);
                 break;
             case kChannelOrder:
-                    exists = getFrame()->isChild(knobChannel);
+                    //exists = getFrame()->isChild(knobChannel);
             
             default:
                 break;
         }        
         if (exists) {
+            //ONLY set the objects that are on the screen
             //First write the value into the GUI value container
             controls[index]->setValue (value);
             
             //Call getParameterDisplay to get the char to display
             getParameterDisplay (index, &displayText);
         }
-        
-        
-        
 	}
     else if (frame && index == 100) {
         suspendDisplay();
@@ -2653,13 +2618,3 @@
 
 
 
-
-
-
-
-
-
-//------------------------------------------------------------------------
-//------------------------------------------------------------------------
-//------------------------------------------------------------------------
-
--- a/Source/GUI.h	Thu Sep 27 12:33:46 2012 +0100
+++ b/Source/GUI.h	Thu Sep 27 23:29:16 2012 +0100
@@ -48,8 +48,8 @@
 
 #include "aeffguieditor.h"
 #include <vstgui.h>
-#include "SoundField.h"
-#include "SoundFieldParameters.h"
+#include "ClassicAmbiDec.h"
+#include "ClassicAmbiDecParameters.h"
 #include "MyPlot.h"
 
 
@@ -217,10 +217,5 @@
 
 
 
-
-
-
-
-
 #endif // __MyEditor__
 
--- a/Source/MyPlot.cpp	Thu Sep 27 12:33:46 2012 +0100
+++ b/Source/MyPlot.cpp	Thu Sep 27 23:29:16 2012 +0100
@@ -1,6 +1,6 @@
 //
 //  MyPlot.cpp
-//  SoundField
+//  ClassicAmbiDec
 //
 //  Created by Martin Morrell on 25/06/2012.
 //  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
@@ -10,8 +10,6 @@
 
 
 
-
-
     
 polarPlot::polarPlot(const CRect &size): CView (size)
 {
@@ -113,14 +111,13 @@
             break;
     }
     
-    
     setDirty(false);
 };
 
 
 void polarPlot::circle(CDrawContext *context)
 {
-    //Plot Ellipse
+    //Plot Ellipse - Background Circle
     context->setLineWidth (3);
     CColor eclColor = CColor(120,120,120,125);
     context->setFrameColor(eclColor);
@@ -159,8 +156,7 @@
                 break;
         }
         
-        
-        
+
         x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
         y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
         
@@ -202,7 +198,6 @@
         }
 
         
-        
         x = size.getCenter().x - (sin(ang/180.0*M_PI)*radius);
         y = size.getCenter().y - (cos(ang/180.0*M_PI)*radius);
         
@@ -217,17 +212,15 @@
     
 
 
-void polarPlot::centreMicPattern(CDrawContext* context)//To finish updating
+void polarPlot::centreMicPattern(CDrawContext* context)
 {
     CColor yellowColor = CColor(255,215,0,255);
     double radius, x, y;
     int ang = 0;
     
-    
     while (ang<360) {
         radius = fabs(centre_pattern+(1-centre_pattern)*(cos((ang)/180.0*M_PI))) * size.getHeight()/2*0.8;
 
-
         x = size.getCenter().x - (sin(ang/180.0*M_PI)*(radius*(pow(10,centre_gain/gFactor/20))));
         y = size.getCenter().y - (cos(ang/180.0*M_PI)*(radius*(pow(10,centre_gain/gFactor/20))));
         
@@ -250,7 +243,6 @@
     double radius, x, y, ptA, ptB;
     int ang = 0;
     
-    
     while (ang<360) {
         switch (surround_mode) {
             case 0:
@@ -312,8 +304,6 @@
                 break;
         }
         
-        
-        
         x = size.getCenter().x + (sin(ang/180.0*M_PI)*(radius*(pow(10,surround_gain/gFactor/20))));
         y = size.getCenter().y - (cos(ang/180.0*M_PI)*(radius*(pow(10,surround_gain/gFactor/20))));
         
--- a/Source/MyPlot.h	Thu Sep 27 12:33:46 2012 +0100
+++ b/Source/MyPlot.h	Thu Sep 27 23:29:16 2012 +0100
@@ -1,20 +1,17 @@
 //
 //  MyPlot.h
-//  SoundField
+//  ClassicAmbiDec
 //
 //  Created by Martin Morrell on 25/06/2012.
 //  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
 //
 
-//#ifndef SoundField_MyPlot_h
-//#define SoundField_MyPlot_h
-
 
 // include VSTGUI
 #ifndef __vstgui__
 #include "vstgui.h"
 #endif
-#define gFactor 12
+#define gFactor 20//Scales the gain for use in the plot
 
 
 class polarPlot : public CView
--- a/Source/SoundField.cpp	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1496 +0,0 @@
-//-------------------------------------------------------------------------------------------------------
-// VST Plug-Ins SDK
-// Version 2.4		$Date: 2006/11/13 09:08:27 $
-//
-// Category     : VST 2.x SDK Samples
-// Filename     : adelay.cpp
-// Created by   : Steinberg Media Technologies
-// Description  : Simple Delay plugin (Mono->Stereo)
-//
-// © 2006, Steinberg Media Technologies, All Rights Reserved
-//-------------------------------------------------------------------------------------------------------
-
-
-#ifndef __SoundField__
-#include "SoundField.h"
-#include "Version.h"
-#endif
-//C++ Headers
-#include <stdio.h>
-#include <string.h>
-#include <cmath>
-
-//GUI Headers
-#include "aeffguieditor.h"
-
-
-//-----------------------------------------------------------------------------
-SoundFieldProgram::SoundFieldProgram()
-{
-    
-}
-
-
-
-//-----------------------------------------------------------------------------
-SoundField::SoundField (audioMasterCallback audioMaster)
-: AudioEffectX (audioMaster, kNumPrograms, kNumParameters)
-{	
-    
-    
-    //Set the number of input and output channels
-	setNumInputs (4);	// 4 Channel Classic B-Format Input
-	setNumOutputs (MAX_CHANNELS);	// MAX_CHANNELS 5.1 Output
-    numberInputs=4;
-    numberOutputs=MAX_CHANNELS;
-    
-	setUniqueID ('MMca');	// this should be unique, use the Steinberg web page for plugin Id registration
-    //canDoubleReplacing(); //Plugin can use process double replacing
-    canProcessReplacing(); //Plugin can use process replacing
-    noTail ();
-    
-    bool bit64 = setProcessPrecision(kVstProcessPrecision64);
-    
-    if (bit64==true) {
-        bits=64;
-    }
-    else{
-        bits=32;
-    }
-    
-    allocateArrangement (&myInputArrangement, 4);
-    myInputArrangement->type = kSpeakerArr31Cine;
-    
-
-    //  Declare any variables to their default values
-    //  Default Program Values if NOT using a bank of programs
-    fMode = 0.f;
-    fWidth = 0.5f;
-    fPattern = 0.5f;
-    fRotate = 0.5f;
-    fTilt = 0.5f;
-	fTumble = 0.5f;
-	fZoom = 0.5f;
-	fZoomMethod = 0.f;
-	fRearVerb = 0.f;
-	fHiVerb = 0.f;
-    fCentrePattern =0.5f;
-    fCentreGain = 0.75f;
-    fSubGain = 0.75f;
-    fFc = 5.0f/11.0f;
-    fSurroundMode = 0.f;
-    fSurroundPattern = 0.5;
-    fSurroundWidth = 2.f/3.f;
-    fSurroundGain = 0.75f;
-    fDecoderMode = 0.f;
-    fChannelOrder = 1.f;
-    
-	
-    //  myDecoder parameters
-	myDecoder.Rotate=0.0;
-	myDecoder.Tilt=0.0;
-	myDecoder.Tumble=0.0;
-	myDecoder.Zoom=0.0;
-	myDecoder.ZoomMethod=0.0;
-	myDecoder.Width=45.0;
-	myDecoder.Pattern=0.5;
-	myDecoder.Mode=0;
-	myDecoder.RearVerb=-100;
-	myDecoder.HiVerb=-100;
-    myDecoder.surMode=0;
-    myDecoder.surPattern=0.5;
-    myDecoder.surWidth=60.0;
-    myDecoder.surGain = 0.0;
-    myDecoder.Fc = 120;
-    myDecoder.centrePattern=0.5;
-    myDecoder.centreGain=0.0;
-    myDecoder.subGain=0.0;
-    myDecoder.Fs = sampleRate;
-    myDecoder.filterCoefs();
-    myDecoder.decoderMode=2; //Default mode is Stereo
-    myDecoder.channelOrder=1;
-    myDecoder.mode5x=0;
-    
-    // Zero up decoder outputs as a safety
-    myDecoder.outputL=0.0;
-    myDecoder.outputR=0.0;
-    myDecoder.outputC=0.0;
-    myDecoder.outputS=0.0;
-    myDecoder.outputSL=0.0;
-    myDecoder.outputSR=0.0;
-    
-
-    // init
-    //Initailise all the programs
-    //Stereo Mode
-        //Name
-        vst_strncpy (programs[0][0].name, "Stereo XY Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[0][1].name, "Stereo MS Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[0][2].name, "Stereo Blumlein Fig8s",kVstMaxProgNameLen);
-        vst_strncpy (programs[0][3].name, "Stereo XY with 'Verb",kVstMaxProgNameLen);
-        vst_strncpy (programs[0][4].name, "Stereo MS with 'Verb",kVstMaxProgNameLen);
-        //Mode
-        programs[0][0].mode = 0.f;
-        programs[0][1].mode = 1.f;
-        programs[0][2].mode = 0.f;
-        programs[0][3].mode = 0.f;
-        programs[0][4].mode = 1.f;
-        //Width
-        programs[0][0].width = (1.f/3.f);
-        programs[0][1].width = (1.f/3.f);
-        programs[0][2].width = 0.5f;
-        programs[0][3].width = (1.f/3.f);
-        programs[0][4].width = (1.f/3.f);
-        //Pattern
-        programs[0][0].pattern = 0.5f;
-        programs[0][1].pattern = 0.5f;
-        programs[0][2].pattern = 0.f;
-        programs[0][3].pattern = 0.5f;
-        programs[0][4].pattern = 0.5f;
-        //RearVerb
-        programs[0][0].rearVerb = 0.f;
-        programs[0][1].rearVerb = 0.f;
-        programs[0][2].rearVerb = 0.f;
-        programs[0][3].rearVerb = 0.75f;
-        programs[0][4].rearVerb = 0.75f;
-        //HiVerb
-        programs[0][0].hiVerb = 0.f;
-        programs[0][1].hiVerb = 0.f;
-        programs[0][2].hiVerb = 0.f;
-        programs[0][3].hiVerb = 0.25f;
-        programs[0][4].hiVerb = 0.25f;
-    
-    
-    //2.1 Mode
-        //Name
-        vst_strncpy (programs[1][0].name, "2.1 XY Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[1][1].name, "2.1 MS Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[1][2].name, "2.1 Blumlein Fig8s",kVstMaxProgNameLen);
-        vst_strncpy (programs[1][3].name, "2.1 XY with 'Verb",kVstMaxProgNameLen);
-        vst_strncpy (programs[1][4].name, "2.1 MS with 'Verb",kVstMaxProgNameLen);
-        //Mode
-        programs[1][0].mode = 0.f;
-        programs[1][1].mode = 1.f;
-        programs[1][2].mode = 0.f;
-        programs[1][3].mode = 0.f;
-        programs[1][4].mode = 1.f;
-        //Width
-        programs[1][0].width = (1.f/3.f);
-        programs[1][1].width = (1.f/3.f);
-        programs[1][2].width = 0.5f;
-        programs[1][3].width = (1.f/3.f);
-        programs[1][4].width = (1.f/3.f);
-        //Pattern
-        programs[1][0].pattern = 0.5f;
-        programs[1][1].pattern = 0.5f;
-        programs[1][2].pattern = 0.f;
-        programs[1][3].pattern = 0.5f;
-        programs[1][4].pattern = 0.5f;
-        //RearVerb
-        programs[1][0].rearVerb = 0.f;
-        programs[1][1].rearVerb = 0.f;
-        programs[1][2].rearVerb = 0.f;
-        programs[1][3].rearVerb = 0.75f;
-        programs[1][4].rearVerb = 0.75f;
-        //HiVerb
-        programs[1][0].hiVerb = 0.f;
-        programs[1][1].hiVerb = 0.f;
-        programs[1][2].hiVerb = 0.f;
-        programs[1][3].hiVerb = 0.25f;
-        programs[1][4].hiVerb = 0.25f;
-        //SubGain
-        programs[1][0].subGain = 0.75f;
-        programs[1][1].subGain = 0.75f;
-        programs[1][2].subGain = 0.75f;
-        programs[1][3].subGain = 0.75f;
-        programs[1][4].subGain = 0.75f;
-        //FC
-        programs[1][0].fc = 5.0f/11.0f;
-        programs[1][1].fc = 5.0f/11.0f;
-        programs[1][2].fc = 5.0f/11.0f;
-        programs[1][3].fc = 5.0f/11.0f;
-        programs[1][4].fc = 5.0f/11.0f;
-    
-    
-    
-    //Quad Mode
-        //Name
-        vst_strncpy (programs[2][0].name, "Quad XY Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[2][1].name, "Quad MS Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[2][2].name, "Quad Blumlein Fig8s",kVstMaxProgNameLen);
-        vst_strncpy (programs[2][3].name, "Quad XY with MS",kVstMaxProgNameLen);
-        vst_strncpy (programs[2][4].name, "Quad MS with XY",kVstMaxProgNameLen);
-        //Mode
-        programs[2][0].mode = 0.f;
-        programs[2][1].mode = 1.f;
-        programs[2][2].mode = 0.f;
-        programs[2][3].mode = 0.f;
-        programs[2][4].mode = 1.f;
-        //Width
-        programs[2][0].width = (1.f/3.f);
-        programs[2][1].width = (1.f/3.f);
-        programs[2][2].width = 0.5f;
-        programs[2][3].width = (1.f/3.f);
-        programs[2][4].width = (1.f/3.f);
-        //Pattern
-        programs[2][0].pattern = 0.5f;
-        programs[2][1].pattern = 0.5f;
-        programs[2][2].pattern = 0.f;
-        programs[2][3].pattern = 0.5f;
-        programs[2][4].pattern = 0.5f;
-        //Surround Mode
-        programs[2][0].surroundMode = 0.f;
-        programs[2][1].surroundMode = 1.f;
-        programs[2][2].surroundMode = 0.f;
-        programs[2][3].surroundMode = 1.f;
-        programs[2][4].surroundMode = 0.f;
-        //Surround Width
-        programs[2][0].surroundWidth = (5.5f/9.f);
-        programs[2][1].surroundWidth = (5.5f/9.f);
-        programs[2][2].surroundWidth = 0.5f;
-        programs[2][3].surroundWidth = (5.5f/9.f);
-        programs[2][4].surroundWidth = (5.5f/9.f);
-        //Surround Pattern
-        programs[2][0].surroundPattern = 0.5;
-        programs[2][1].surroundPattern = 0.5;
-        programs[2][2].surroundPattern = 0.0;
-        programs[2][0].surroundPattern = 0.25;
-        programs[2][0].surroundPattern = 0.75;
-        //Surround Gain
-        programs[2][0].surroundGain = 0.75f;
-        programs[2][1].surroundGain = 0.75f;
-        programs[2][2].surroundGain = 0.75f;
-        programs[2][3].surroundGain = 0.75f;
-        programs[2][4].surroundGain = 0.75f;
-
-    
-    //5.0 Mode
-        //Name
-        vst_strncpy (programs[3][0].name, "5.0 XY Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[3][1].name, "5.0 MS Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[3][2].name, "5.0 Blumlein Fig8s",kVstMaxProgNameLen);
-        vst_strncpy (programs[3][3].name, "5.0 Heller et. al. 1",kVstMaxProgNameLen);
-        vst_strncpy (programs[3][4].name, "5.0 Heller et. al. 2",kVstMaxProgNameLen);
-        //Mode
-        programs[3][0].mode = 0.f;
-        programs[3][1].mode = 1.f;
-        programs[3][2].mode = 0.f;
-        //Width
-        programs[3][0].width = (1.f/3.f);
-        programs[3][1].width = (1.f/3.f);
-        programs[3][2].width = 0.5f;
-        //Pattern
-        programs[3][0].pattern = 0.5f;
-        programs[3][1].pattern = 0.5f;
-        programs[3][2].pattern = 0.f;
-        //Centre Pattern
-        programs[3][0].centrePattern = 0.5f;
-        programs[3][1].centrePattern = 0.5f;
-        programs[3][2].centrePattern = 0.0f;
-        //Centre Gain
-        programs[3][0].centreGain = 0.75f;
-        programs[3][1].centreGain = 0.75f;
-        programs[3][2].centreGain = 0.75f;
-        //Surround Mode
-        programs[3][0].surroundMode = 0.f;
-        programs[3][1].surroundMode = 1.f;
-        programs[3][2].surroundMode = 0.f;
-        //Surround Width
-        programs[3][0].surroundWidth = (5.5f/9.f);
-        programs[3][1].surroundWidth = (5.5f/9.f);
-        programs[3][2].surroundWidth = 0.5f;
-        //Surround Pattern
-        programs[3][0].surroundPattern = 0.5;
-        programs[3][1].surroundPattern = 0.5;
-        programs[3][2].surroundPattern = 0.0;
-        //Surround Gain
-        programs[3][0].surroundGain = 0.75f;
-        programs[3][1].surroundGain = 0.75f;
-        programs[3][2].surroundGain = 0.75f;
-    
-    
-    //5.1 Mode
-        //Name
-        vst_strncpy (programs[4][0].name, "5.1 XY Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[4][1].name, "5.1 MS Microphones",kVstMaxProgNameLen);
-        vst_strncpy (programs[4][2].name, "5.1 Blumlein Fig8s",kVstMaxProgNameLen);
-        vst_strncpy (programs[4][3].name, "5.1 Heller et. al. 1",kVstMaxProgNameLen);
-        vst_strncpy (programs[4][4].name, "5.1 Heller et. al. 2",kVstMaxProgNameLen);
-        //Mode
-        programs[4][0].mode = 0.f;
-        programs[4][1].mode = 1.f;
-        programs[4][2].mode = 0.f;
-        //Width
-        programs[4][0].width = (1.f/3.f);
-        programs[4][1].width = (1.f/3.f);
-        programs[4][2].width = 0.5f;
-        //Pattern
-        programs[4][0].pattern = 0.5f;
-        programs[4][1].pattern = 0.5f;
-        programs[4][2].pattern = 0.f;
-        //Centre Pattern
-        programs[4][0].centrePattern = 0.5f;
-        programs[4][1].centrePattern = 0.5f;
-        programs[4][2].centrePattern = 0.0f;
-        //Centre Gain
-        programs[4][0].centreGain = 0.75f;
-        programs[4][1].centreGain = 0.75f;
-        programs[4][2].centreGain = 0.75f;
-        //SubGain
-        programs[4][0].subGain = 0.75f;
-        programs[4][1].subGain = 0.75f;
-        programs[4][2].subGain = 0.75f;
-        programs[4][3].subGain = 0.75f;
-        programs[4][4].subGain = 0.75f;
-        //FC
-        programs[4][0].fc = 5.0f/11.0f;
-        programs[4][1].fc = 5.0f/11.0f;
-        programs[4][2].fc = 5.0f/11.0f;
-        programs[4][3].fc = 5.0f/11.0f;
-        programs[4][4].fc = 5.0f/11.0f;
-        //Surround Mode
-        programs[4][0].surroundMode = 0.f;
-        programs[4][1].surroundMode = 1.f;
-        programs[4][2].surroundMode = 0.f;
-        //Surround Width
-        programs[4][0].surroundWidth = (5.5f/9.f);
-        programs[4][1].surroundWidth = (5.5f/9.f);
-        programs[4][2].surroundWidth = 0.5f;
-        //Surround Pattern
-        programs[4][0].surroundPattern = 0.5;
-        programs[4][1].surroundPattern = 0.5;
-        programs[4][2].surroundPattern = 0.0;
-        //Surround Gain
-        programs[4][0].surroundGain = 0.75f;
-        programs[4][1].surroundGain = 0.75f;
-        programs[4][2].surroundGain = 0.75f;
-
-    
-    //Load GUI
-    extern AEffGUIEditor* createEditor (AudioEffectX*);
-	setEditor (createEditor (this));
-    
-	resume ();		// flush buffer
-    
-    //Load Program0 default
-    setProgram(0);
-}
-
-
-void SoundField::suspend()
-{
-    myDecoder.clearFilter();
-    
-    if (editor){
-        ((AEffGUIEditor*)editor)->setParameter (100, 0);
-    }
-}
-
-void SoundField::close()
-{
-}
-
-
-void SoundField::open()
-{
-}
-
-
-
-
-
-//------------------------------------------------------------------------
-bool SoundField::setSpeakerArrangement (VstSpeakerArrangement* pluginInput,
-                                        VstSpeakerArrangement* pluginOutput)
-{
-    numberInputs = pluginInput->numChannels;
-    numberOutputs = pluginOutput->numChannels;
-    
-    
-
-    bool result;//What to return, true for acceptable speaker arrangement
-    
-    
-    switch (pluginOutput->type) {
-        case kSpeakerArr51://5.1 Output
-        {
-            if (pluginInput->type==kSpeakerArr31Cine) {
-                result = true;
-                }
-            else {
-                allocateArrangement (&myInputArrangement, 4);
-                myInputArrangement->type = kSpeakerArr31Cine;
-                result = false;
-            }
-            break;
-        }
-            
-//        case kSpeakerArr50://NOT WORKING AS INTENDED
-//        {
-//            if (pluginInput->numChannels==4) {
-//                result = true;
-//            }
-//            else {
-//                allocateArrangement (&myInputArrangement, 4);
-//                myInputArrangement->numChannels = 4;
-//                result = false;
-//            }
-//            break;
-//        }
-            
-        case kSpeakerArr40Cine://4.0 Output (LRCS)
-        {
-            if (pluginInput->type==kSpeakerArr40Cine) {
-                result = true;
-            }
-            else {
-                allocateArrangement (&myInputArrangement, 4);
-                myInputArrangement->type = kSpeakerArr40Cine;
-                result = false;
-            }
-            break;
-        }
-            
-        case kSpeakerArr40Music://4.0 Output (Music)
-        {
-            if (pluginInput->type==kSpeakerArr40Music) {
-                result = true;
-            }
-            else {
-                allocateArrangement (&myInputArrangement, 4);
-                myInputArrangement->type = kSpeakerArr40Music;
-                result = false;
-            }
-            break;
-        }
-            
-        case kSpeakerArrStereo:
-        {
-            if (pluginInput->type==kSpeakerArr40Music) {
-                result = true;
-            }
-            else {
-                result = false;
-            }
-            break;
-        }
-            
-            
-        default:
-        {
-            if (pluginInput->type==kSpeakerArr31Cine) {
-                result = true;
-            }
-            else {
-                allocateArrangement (&myInputArrangement, 4);
-                myInputArrangement->type = kSpeakerArr31Cine;
-                result = false;
-            }
-            break;
-        }
-    }
-    
-    return result;
-}
-
-
-//------------------------------------------------------------------------
-bool SoundField::getSpeakerArrangement(VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput)
-{
-	*pluginInput  = myInputArrangement;
-	//*pluginOutput = myOutputArrangement;
-    
-    return true;
-}
-
-
-
-////------------------------------------------------------------------------
-//bool SoundField::getInputProperties(VstInt32 index, VstPinProperties *properties)
-//{
-//    bool returnCode = false;
-//    if (index < numberInputs)
-//    {
-//        sprintf (properties->label, "My %1d In", index + 1);
-//        sprintf (properties->shortLabel, "%1d In", index + 1);
-//        properties->flags = kVstPinIsActive;
-//        returnCode = true;
-//    }
-//    return returnCode;
-//}
-//
-//
-////------------------------------------------------------------------------
-//bool SoundField::getOutputProperties(VstInt32 index, VstPinProperties *properties)
-//{
-//    bool returnCode = false;
-//    if (index < numberOutputs)
-//    {
-//        sprintf (properties->label, "My %1d Out", index + 1);
-//        sprintf (properties->shortLabel, "%1d Out", index + 1);
-//        properties->flags = kVstPinIsActive;
-//        returnCode = true;
-//    }
-//    return (returnCode);
-//}
-
-
-
-//------------------------------------------------------------------------
-VstInt32 SoundField::getVstVersion()
-{
-    return kVstVersion;
-}
-
-
-//------------------------------------------------------------------------
-SoundField::~SoundField () //clears protected variables
-{
-	deallocateArrangement (&myInputArrangement);
-    //deallocateArrangement (&myOutputArrangement);
-}
-
-
-//------------------------------------------------------------------------
-void SoundField::resume ()  //Do this on a resume from the host
-{
-	AudioEffectX::resume ();
-    if (editor){
-        ((AEffGUIEditor*)editor)->setParameter (101, 0);
-    }
-}
-
-
-//------------------------------------------------------------------------
-bool SoundField::getProgramNameIndexed(VstInt32 category, VstInt32 index, char *text)
-{
-    switch (myDecoder.decoderMode) {
-        case 2:
-            strcpy(text, programs[0][index].name);
-            break;
-        case 3:
-            strcpy(text, programs[1][index].name);
-            break;
-        case 4:
-            strcpy(text, programs[2][index].name);
-            break;
-        case 5:
-            strcpy(text, programs[3][index].name);
-            break;
-        case 6:
-            strcpy(text, programs[4][index].name);
-            break;
-            
-        default:
-            break;
-    }
-
-    
-
-    return true;
-}
-
-
-//------------------------------------------------------------------------
-void SoundField::setProgram(VstInt32 program)
-{
-    curProgram = program;
-    
-        switch (myDecoder.decoderMode) {
-            case 2:
-                setParameter(kMode, programs[0][program].mode);
-                setParameter(kWidth, programs[0][program].width);
-                setParameter(kPattern, programs[0][program].pattern);
-                setParameter(kRearVerb, programs[0][program].rearVerb);
-                setParameter(kHiVerb, programs[0][program].hiVerb);
-                break;
-            case 3:
-                setParameter(kMode, programs[1][program].mode);
-                setParameter(kWidth, programs[1][program].width);
-                setParameter(kPattern, programs[1][program].pattern);
-                setParameter(kRearVerb, programs[1][program].rearVerb);
-                setParameter(kHiVerb, programs[1][program].hiVerb);
-                setParameter(kSubGain, programs[1][program].subGain);
-                setParameter(kFc, programs[1][program].fc);
-                break;
-            case 4:
-                setParameter(kMode, programs[2][program].mode);
-                setParameter(kWidth, programs[2][program].width);
-                setParameter(kPattern, programs[2][program].pattern);
-                setParameter(kSurroundMode, programs[2][program].surroundMode);
-                setParameter(kSurroundWidth, programs[2][program].surroundWidth);
-                setParameter(kSurroundPattern, programs[2][program].surroundPattern);
-                setParameter(kSurroundGain, programs[2][program].surroundGain);
-                break;
-            case 5:
-                if (program<3) {
-                    myDecoder.mode5x=0;
-                    
-                    setParameter(kMode, programs[3][program].mode);
-                    setParameter(kWidth, programs[3][program].width);
-                    setParameter(kPattern, programs[3][program].pattern);
-                    setParameter(kCentrePattern, programs[3][program].centrePattern);
-                    setParameter(kCentreGain, programs[3][program].centreGain);
-                    setParameter(kSurroundMode, programs[3][program].surroundMode);
-                    setParameter(kSurroundWidth, programs[3][program].surroundWidth);
-                    setParameter(kSurroundPattern, programs[3][program].surroundPattern);
-                    setParameter(kSurroundGain, programs[3][program].surroundGain);
-                    if (editor){
-                        ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
-                    }
-                }
-                else if (program==3) {
-                    myDecoder.mode5x=1;
-                    if (editor){
-                        ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
-                    }
-                }
-                else if (program==4) {
-                    myDecoder.mode5x=2;
-                    if (editor){
-                        ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
-                    }
-                }
-                break;
-            case 6:
-                if (program<3) {
-                    myDecoder.mode5x=0;
-                    
-                    setParameter(kMode, programs[4][program].mode);
-                    setParameter(kWidth, programs[4][program].width);
-                    setParameter(kPattern, programs[4][program].pattern);
-                    setParameter(kCentrePattern, programs[4][program].centrePattern);
-                    setParameter(kCentreGain, programs[4][program].centreGain);
-                    setParameter(kSubGain, programs[4][program].subGain);
-                    setParameter(kFc, programs[4][program].fc);
-                    setParameter(kSurroundMode, programs[4][program].surroundMode);
-                    setParameter(kSurroundWidth, programs[4][program].surroundWidth);
-                    setParameter(kSurroundPattern, programs[4][program].surroundPattern);
-                    setParameter(kSurroundGain, programs[4][program].surroundGain);
-                    if (editor){
-                        ((AEffGUIEditor*)editor)->setParameter (103, 0.f);
-                    }
-                }
-                else if (program==3) {
-                    //Only set the sub
-                    setParameter(kSubGain, programs[4][program].subGain);
-                    setParameter(kFc, programs[4][program].fc);
-                    myDecoder.mode5x=1;
-                    if (editor){
-                        ((AEffGUIEditor*)editor)->setParameter (103, 0.5f);
-                    }
-                }
-                else if (program==4) {
-                    //Only set the sub
-                    setParameter(kSubGain, programs[4][program].subGain);
-                    setParameter(kFc, programs[4][program].fc);
-                    myDecoder.mode5x=2;
-                    if (editor){
-                        ((AEffGUIEditor*)editor)->setParameter (103, 1.f);
-                    }
-                }
-                break;
-                
-            default:
-                break;
-        }
-}
-
-
-
-//------------------------------------------------------------------------
-VstInt32 SoundField::getProgram()
-{
-    return curProgram;
-}
-
-
-
-
-
-
-
-//------------------------------------------------------------------------
-void SoundField::setParameter (VstInt32 index, float value) // SET Parameter value from host
-{
-	switch (index)
-	{
-        case kMode :
-			fMode = value;
-			if (value<=0.5f) {
-				myDecoder.Mode = 0;
-			}
-			else {
-				myDecoder.Mode = 1;
-			}
-            break;
-		case kWidth:
-			fWidth = value;
-			myDecoder.Width = (double)value*90;
-			break;
-		case kPattern:
-			fPattern = value;
-			myDecoder.Pattern = (double)value;
-			break;
-		case kRotate :
-			fRotate = value;
-			if (value==0.5f) {
-				myDecoder.Rotate=0.0;
-			}
-			else {
-				myDecoder.Rotate = (double)value*-360+180;
-			}
-			break;
-		case kTilt:
-			fTilt = value;
-			if (value==0.5f) {
-				myDecoder.Tilt=0.0;
-			}
-			else {
-				myDecoder.Tilt = (double)value*-360+180;
-			}
-			break;
-		case kTumble:
-			fTumble = value;
-			if (value==0.5f) {
-				myDecoder.Tumble=0.00;
-			}
-			else {
-				myDecoder.Tumble = (double)value*-360+180;
-			}
-			break;
-		case kZoom:
-			fZoom = value;
-			myDecoder.Zoom = (double)value*200-100;
-			break;
-		case kZoomMethod:
-			fZoomMethod = value;
-			if (value<=0.2f) {
-				myDecoder.ZoomMethod = 0;
-			}
-			else if (value>0.2f && value<=0.5f) {
-				myDecoder.ZoomMethod = 1;
-			}
-			else if (value>0.5f && value<=0.8f) {
-				myDecoder.ZoomMethod = 2;
-			}
-			else if (value>0.8f && value<=1.f) {
-				myDecoder.ZoomMethod = 3;
-			}
-			
-			break;
-		case kRearVerb :
-			fRearVerb = value;
-            if (value==0.0f) {
-                myDecoder.RearVerb=-100;
-            }
-            else {
-                myDecoder.RearVerb = -36+(double)value*36;
-            }
-			break;
-		case kHiVerb :
-			fHiVerb = value;
-            if (value==0.0f) {
-                myDecoder.HiVerb=-100;
-            }
-            else {
-                myDecoder.HiVerb= -36+(double)value*36;
-            }
-			break;
-        case kCentrePattern:
-            fCentrePattern = value;
-			myDecoder.centrePattern = (double)value;
-            break;
-        case kCentreGain:
-            fCentreGain = value;
-			myDecoder.centreGain = ((double)value*24-18);
-            break;
-        case kSubGain:
-            fSubGain = value;
-			myDecoder.subGain = ((double)value*24-18);
-            break;
-        case kFc:
-            fFc = value;
-			myDecoder.Fc = (int)((value*220)+20);
-            myDecoder.filterCoefs();
-            break;
-        case kSurroundMode:
-            fSurroundMode = value;
-            if (value<=0.5f) {
-				myDecoder.surMode = 0;
-			}
-			else {
-				myDecoder.surMode = 1;
-			}
-            break;
-        case kSurroundPattern:
-            fSurroundPattern = value;
-			myDecoder.surPattern = (double)value;
-            break;
-        case kSurroundWidth:
-            fSurroundWidth = value;
-			myDecoder.surWidth = (double)value*90;
-            break;
-        case kSurroundGain:
-            fSurroundGain = value;
-			myDecoder.surGain = ((double)value*24-18);
-            break;
-        case kDecoderMode:
-            fDecoderMode = value;
-            if (value<=0.125f) {
-//                if (myDecoder.channelOrder==0) {
-//                    setNumOutputs(2);
-//                    allocateArrangement (&myOutputArrangement, 2);
-//                    myOutputArrangement->type = kSpeakerArrStereo;
-//                    setNumInputs(4);
-//                    allocateArrangement (&myInputArrangement, 4);
-//                    myInputArrangement->type = kSpeakerArr31Cine;
-//                    ioChanged();
-//                }
-				myDecoder.decoderMode = 2; //Stereo
-			}
-			else if (value>0.125f && value<=0.375f) {
-//                if (myDecoder.channelOrder==0) {
-//                    setNumOutputs(3);
-//                    allocateArrangement (&myOutputArrangement, 3);
-//                    myOutputArrangement->type = kSpeakerArr30Music;
-//                    setNumInputs(4);
-//                    allocateArrangement (&myInputArrangement, 4);
-//                    myInputArrangement->type = kSpeakerArr31Cine;
-//                    ioChanged();
-//                }
-				myDecoder.decoderMode = 3; //2.1
-			}
-			else if (value>0.375f && value<=0.625f) {
-//                if (myDecoder.channelOrder==0) {
-//                    setNumOutputs(6);
-//                    allocateArrangement (&myOutputArrangement, 4);
-//                    myOutputArrangement->type = kSpeakerArr40Music;
-//                    setNumInputs(4);
-//                    allocateArrangement (&myInputArrangement, 4);
-//                    myInputArrangement->type = kSpeakerArr31Cine;
-//                    ioChanged();
-//                }
-				myDecoder.decoderMode = 4; //Quad
-			}
-			else if (value>0.625f && value<=0.875f) {
-//                if (myDecoder.channelOrder==0) {
-//                    setNumOutputs(5);
-//                    allocateArrangement (&myOutputArrangement, 5);
-//                    myOutputArrangement->type = kSpeakerArr50;
-//                    setNumInputs(4);
-//                    allocateArrangement (&myInputArrangement, 4);
-//                    myInputArrangement->type = kSpeakerArr31Cine;
-//                    ioChanged();
-//                }
-				myDecoder.decoderMode = 5; //5.0
-			}
-            else if (value>0.875f) {
-//                if (myDecoder.channelOrder==0) {
-//                    setNumOutputs(6);
-//                    allocateArrangement (&myOutputArrangement, 6);
-//                    myOutputArrangement->type = kSpeakerArr51;
-//                    setNumInputs(4);
-//                    allocateArrangement (&myInputArrangement, 4);
-//                    myInputArrangement->type = kSpeakerArr31Cine;
-//                    ioChanged();
-//                }
-				myDecoder.decoderMode = 6; //5.1
-			}
-            updateDisplay();
-            break;
-        case kChannelOrder:
-            fChannelOrder = value;
-			if (value<=0.5f) {
-				myDecoder.channelOrder = 0; //Natural Outputs
-//                setParameter(kDecoderMode, fDecoderMode);
-			}
-			else {
-//                setNumOutputs(6);
-//                allocateArrangement (&myOutputArrangement, 6);
-//                myOutputArrangement->type = kSpeakerArr51;
-//                setNumInputs(4);
-//                allocateArrangement (&myInputArrangement, 4);
-//                myInputArrangement->type = kSpeakerArr31Cine;
-//                ioChanged();
-                myDecoder.channelOrder = 1; //5.1 Outputs
-			}
-            break;
-            
-            
-        default:
-            break;
-	}
-    if (editor){
-        ((AEffGUIEditor*)editor)->setParameter (index, value);
-    }
-    if (index==kDecoderMode) {
-        setProgram(curProgram);
-    }
-}
-
-
-//------------------------------------------------------------------------
-float SoundField::getParameter (VstInt32 index) // GET the value of the parameter
-{
-	float returnFloat;    //Define a float to output
-    
-    // Use a switch when more than 1 parameter
-	switch (index)
-	{
-        case kMode :
-			returnFloat = fMode;
-            break;
-		case kWidth:
-			returnFloat = fWidth;
-			break;
-		case kPattern:
-			returnFloat = fPattern;
-			break;
-		case kRotate :
-			returnFloat = fRotate;
-			break;
-		case kTilt:
-			returnFloat = fTilt;
-			break;
-		case kTumble:
-			returnFloat = fTumble;
-			break;
-		case kZoom:
-			returnFloat = fZoom;
-			break;
-		case kZoomMethod:
-			returnFloat = fZoomMethod;
-			break;
-		case kRearVerb :
-			returnFloat = fRearVerb;
-			break;
-		case kHiVerb :
-			returnFloat = fHiVerb;
-			break;
-        case kCentrePattern:
-            returnFloat = fCentrePattern;
-            break;
-        case kCentreGain:
-            returnFloat = fCentreGain;
-            break;
-        case kSubGain:
-            returnFloat = fSubGain;
-            break;
-        case kFc:
-            returnFloat = fFc;
-            break;
-        case kSurroundMode:
-            returnFloat = fSurroundMode;
-            break;
-        case kSurroundPattern:
-            returnFloat = fSurroundPattern;
-            break;
-        case kSurroundWidth:
-            returnFloat = fSurroundWidth;
-            break;
-        case kSurroundGain:
-            returnFloat = fSurroundGain;
-            break;
-        case kDecoderMode:
-            returnFloat = fDecoderMode;
-            break;
-        case kChannelOrder:
-            returnFloat = fChannelOrder;
-            break;
-            
-            
-        //HIDDEN PArameters for GUI Control
-        case 102: //Bit Mode for GUI display
-            returnFloat = bits;
-            break;
-        case 103:
-            returnFloat = myDecoder.mode5x;
-            break;
-            
-        default:
-            break;
-	}
-	return returnFloat; //Returns the chosen Parameters value
-}
-
-
-//------------------------------------------------------------------------
-void SoundField::getParameterName (VstInt32 index, char *label) //SET display value shown for Parameters
-{
-	switch (index)
-	{
-        case kMode :
-			switch (myDecoder.Mode) {
-				case 0 :
-					strcpy(label, "XY");
-					break;
-				case 1 :
-					strcpy(label, "MS");
-					break;
-			}
-            break;
-		case kWidth:
-			strcpy(label, "Width");
-			break;
-		case kPattern:
-			strcpy(label, "Pattern");
-			break;
-		case kRotate :
-			strcpy(label, "Rotate");
-			break;
-		case kTilt:
-			strcpy(label, "Tilt");
-			break;
-		case kTumble:
-			strcpy(label, "Tumble");
-			break;
-		case kZoom:
-			strcpy(label, "Zoom");
-			break;
-		case kZoomMethod:
-			strcpy(label, "Zoom Method");
-			break;
-		case kRearVerb :
-			strcpy(label, "RearVerb");
-			break;
-		case kHiVerb :
-			strcpy(label, "HiVerb");
-			break;
-        case kCentrePattern:
-            strcpy(label, "Ctr. Pattern");
-            break;
-        case kCentreGain:
-            strcpy(label, "Ctr. Gain");
-            break;
-        case kSubGain:
-            strcpy(label, "Sub. Gain");
-            break;
-        case kFc:
-            strcpy(label, "Sub. Xover");
-            break;
-        case kSurroundMode:
-            strcpy(label, "Sur. Mode");
-            break;
-        case kSurroundPattern:
-            strcpy(label, "Sur. Pattern");
-            break;
-        case kSurroundWidth:
-            strcpy(label, "Sur. Width");
-            break;
-        case kSurroundGain:
-            strcpy(label, "Sur. Gain");
-            break;
-        case kDecoderMode:
-            strcpy(label, "Dec. Mode");
-            break;
-        case kChannelOrder:
-            strcpy(label, "Ch. Order");
-            break;
-            
-        default:
-            break;
-	}
-}
-
-
-//------------------------------------------------------------------------
-void SoundField::getParameterDisplay (VstInt32 index, char *text)   //GET display value shown for Parameters
-{
-	switch (index)
-	{
-        case kMode :
-			switch (myDecoder.Mode) {
-				case 0 :
-					strcpy(text, "XY");
-					break;
-				case 1 :
-					strcpy(text, "MS");
-					break;
-			}
-            break;
-		case kWidth:
-			sprintf (text, "%.1f\u00B0", myDecoder.Width);
-			break;
-		case kPattern:
-			if (myDecoder.Pattern<=0.125) {
-				strcpy(text, "Fig-of-8");
-			}
-			else if (myDecoder.Pattern>0.125 && myDecoder.Pattern<=0.375) {
-				strcpy(text, "Hyper-Card.");
-			}
-			else if (myDecoder.Pattern>0.375 && myDecoder.Pattern<=0.625) {
-				strcpy(text, "Cardioid");
-			}
-			else if (myDecoder.Pattern>0.625 && myDecoder.Pattern<=0.875) {
-				strcpy(text, "Sub-Card.");
-			}
-			else {
-				strcpy(text, "Omni.");
-			}
-			break;
-		case kRotate :
-			sprintf (text, "%.1f\u00B0", myDecoder.Rotate);
-			break;
-		case kTilt:
-			sprintf (text, "%.1f\u00B0", myDecoder.Tilt);
-			break;
-		case kTumble:
-			sprintf (text, "%.1f\u00B0", myDecoder.Tumble);
-			break;
-		case kZoom:
-			sprintf (text, "%.1f%%", myDecoder.Zoom);
-			break;
-		case kZoomMethod:
-			switch (myDecoder.ZoomMethod) {
-				case 0:
-					strcpy(text, "Dominance");
-					break;
-				case 1:
-					strcpy(text, "Press");
-					break;
-				case 2:
-					strcpy(text, "Push");
-					break;
-				case 3:
-					strcpy(text, "Focus");
-					break;
-				default:
-					break;
-			}
-			break;
-		case kRearVerb :
-            if (myDecoder.RearVerb>-40) {
-                sprintf (text, "%.2fdB", myDecoder.RearVerb);
-            }
-			else {
-                strcpy(text, "Off");
-            }
-			break;
-		case kHiVerb :
-            if (myDecoder.HiVerb>-40) {
-                sprintf (text, "%.2fdB", myDecoder.HiVerb);
-            }
-            else {
-                strcpy(text, "Off");
-            }
-			break;
-        case kCentrePattern:
-            if (myDecoder.centrePattern<=0.125) {
-				strcpy(text, "Fig-of-8");
-			}
-			else if (myDecoder.centrePattern>0.125 && myDecoder.centrePattern<=0.375) {
-				strcpy(text, "Hyper-Card.");
-			}
-			else if (myDecoder.centrePattern>0.375 && myDecoder.centrePattern<=0.625) {
-				strcpy(text, "Cardioid");
-			}
-			else if (myDecoder.centrePattern>0.625 && myDecoder.centrePattern<=0.875) {
-				strcpy(text, "Sub-Card.");
-			}
-			else {
-				strcpy(text, "Omni.");
-			}
-            break;
-        case kCentreGain:
-            sprintf (text, "%.2fdB", myDecoder.centreGain);
-            break;
-        case kSubGain:
-            sprintf (text, "%.2fdB", myDecoder.subGain);
-            break;
-        case kFc:
-            sprintf (text, "%dHz", myDecoder.Fc);
-            break;
-        case kSurroundMode:
-            switch (myDecoder.surMode) {
-				case 0 :
-					strcpy(text, "XY");
-					break;
-				case 1 :
-					strcpy(text, "MS");
-					break;
-			}
-            break;
-        case kSurroundPattern:
-            if (myDecoder.surPattern<=0.125) {
-				strcpy(text, "Fig-of-8");
-			}
-			else if (myDecoder.surPattern>0.125 && myDecoder.surPattern<=0.375) {
-				strcpy(text, "Hyper-Card.");
-			}
-			else if (myDecoder.surPattern>0.375 && myDecoder.surPattern<=0.625) {
-				strcpy(text, "Cardioid");
-			}
-			else if (myDecoder.surPattern>0.625 && myDecoder.surPattern<=0.875) {
-				strcpy(text, "Sub-Card.");
-			}
-			else {
-				strcpy(text, "Omni.");
-			}
-            break;
-        case kSurroundWidth:
-            sprintf (text, "%.1f\u00B0", myDecoder.surWidth);
-            break;
-        case kSurroundGain:
-            sprintf (text, "%.2fdB", myDecoder.surGain);
-            break;
-        case kDecoderMode:
-            switch (myDecoder.decoderMode) {
-				case 2 :
-					strcpy(text, "Stereo");
-					break;
-				case 3 :
-					strcpy(text, "2.1");
-					break;
-                case 4 :
-					strcpy(text, "Quad");
-					break;
-                case 5 :
-					strcpy(text, "5.0");
-					break;
-                case 6 :
-					strcpy(text, "5.1");
-					break;
-			}
-            break;
-        case kChannelOrder:
-            switch (myDecoder.channelOrder) {
-				case 0 :
-					strcpy(text, "Natural");
-					break;
-				case 1 :
-					strcpy(text, "5.1");
-					break;
-			}
-            break;
-            
-        default:
-            break;
-	}
-}
-
-
-//------------------------------------------------------------------------
-void SoundField::getParameterLabel (VstInt32 index, char *label)    // Labels shown for Parameters
-{
-	switch (index)
-	{
-        case kMode :
-			strcpy(label, "Microphones");
-			break;
-		case kWidth:
-			strcpy(label, "Degrees");
-			break;
-		case kPattern:
-			strcpy(label, "Omni");
-			break;
-		case kRotate :
-			strcpy(label, "Degrees");
-			break;
-		case kTilt:
-			strcpy(label, "Degrees");
-			break;
-		case kTumble:
-			strcpy(label, "Degrees");
-			break;
-		case kZoom:
-			strcpy(label, "Percentage");
-			break;
-		case kZoomMethod:
-			strcpy(label, "Selection");
-			break;
-		case kRearVerb :
-			strcpy(label, "dB");
-			break;
-		case kHiVerb :
-			strcpy(label, "dB");
-			break;
-        case kCentrePattern:
-            strcpy(label, "Omni");
-            break;
-        case kCentreGain:
-            strcpy(label, "dB");
-            break;
-        case kSubGain:
-            strcpy(label, "dB");
-            break;
-        case kFc:
-            strcpy(label, "Hz");
-            break;
-        case kSurroundMode:
-            strcpy(label, "Microphones");
-            break;
-        case kSurroundPattern:
-            strcpy(label, "Omni");
-            break;
-        case kSurroundWidth:
-            strcpy(label, "Degrees");
-            break;
-        case kSurroundGain:
-            strcpy(label, "dB");
-            break;
-        case kDecoderMode:
-            strcpy(label, "Speakers");
-            break;
-        case kChannelOrder:
-            strcpy(label, "Output");
-            break;
-	}
-}
-
-
-//------------------------------------------------------------------------
-bool SoundField::getEffectName (char* name) // Tha NAME of the effect
-{
-	strcpy (name, "Classic Ambisonics Decoder");
-	return true;
-}
-
-
-//------------------------------------------------------------------------
-bool SoundField::getProductString (char* text)  // The PRODUCT name
-{
-	strcpy (text, "Classic Ambisonics Decoder");
-	return true;
-}
-
-
-//------------------------------------------------------------------------
-bool SoundField::getVendorString (char* text)   // Vendor (Creator/Publisher)
-{
-	strcpy (text, "Martin J. Morrell");
-	return true;
-}
-
-
-//------------------------------------------------------------------------
-VstInt32 SoundField::getVendorVersion () 
-{
-    return VERSION;
-}
-
-
-
-//------------------------------------------------------------------------
-void SoundField::setSampleRate(float sampleRate)
-{
-    myDecoder.Fs = sampleRate;
-    myDecoder.filterCoefs();
-}
-
-
-
-//---------------------------------------------------------------------------
-void SoundField::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames) //The part that does some actual DSP. This section takes the input audio and gives the output audio back.
-{
-	while (--sampleFrames >= 0) //Do this process if the audio is running
-	{
-		//Set the internal B-Format values as doubles.
-        double w, x, y, z;
-        switch (numberInputs) {
-            case 3:
-            {
-                w = (double) *inputs[0]++;
-                x = (double) *inputs[1]++;
-                y = (double) *inputs[2]++;
-                z = 0;
-                break;
-            }
-                
-            case 4:
-            {
-                w = (double) *inputs[0]++;
-                x = (double) *inputs[1]++;
-                y = (double) *inputs[2]++;
-                z = (double) *inputs[3]++;
-                break;
-            }
-                
-            default:
-            {
-                w = 0;
-                x = 0;
-                y = 0;
-                z = 0;
-                break;
-            }
-        }
-
-		
-        int numOut;
-        numOut = myDecoder.processDecoder(w, x, y, z); //Process B-Format
-
-        if (numOut<numberOutputs){
-            for (int i=0; i<numOut; i++)
-                *outputs[i]++ = float(myDecoder.output[i]);
-            for (int i=numOut; i<numberOutputs; i++)
-                *outputs[i]++ = 0.f;
-        }
-        else if (numOut==numberOutputs){
-            for (int i=0; i<numOut; i++)
-                *outputs[i]++ = float(myDecoder.output[i]);
-        }
-        else{
-            for (int i=0; i<numberOutputs; i++)
-                *outputs[i]++ = float(myDecoder.output[i]);
-        }
-	}
-}
-
-
-//---------------------------------------------------------------------------
-void SoundField::processDoubleReplacing(double **inputs, double **outputs, VstInt32 sampleFrames) //The part that does some actual DSP. This section takes the input audio and gives the output audio back.
-{
-	while (--sampleFrames >= 0) //Do this process if the audio is running
-	{
-		//Set the internal B-Format values as doubles.
-        double w, x, y, z;
-        switch (numberInputs) {
-            case 3:
-            {
-                w = *inputs[0]++;
-                x = *inputs[1]++;
-                y = *inputs[2]++;
-                z = 0;
-                break;
-            }
-                
-            case 4:
-            {
-                w = *inputs[0]++;
-                x = *inputs[1]++;
-                y = *inputs[2]++;
-                z = *inputs[3]++;
-                break;
-            }
-                
-            default:
-            {
-                w = 0;
-                x = 0;
-                y = 0;
-                z = 0;
-                break;
-            }
-        }
-        
-		
-        int numOut;
-        numOut = myDecoder.processDecoder(w, x, y, z); //Process B-Format
-        
-        if (numOut<numberOutputs){
-            for (int i=0; i<numOut; i++)
-                *outputs[i]++ = myDecoder.output[i];
-            for (int i=numOut; i<numberOutputs; i++)
-                *outputs[i]++ = 0.0;
-        }
-        else if (numOut==numberOutputs){
-            for (int i=0; i<numOut; i++)
-                *outputs[i]++ = myDecoder.output[i];
-        }
-        else{
-            for (int i=0; i<numberOutputs; i++)
-                *outputs[i]++ = myDecoder.output[i];
-        }
-	}
-}
\ No newline at end of file
--- a/Source/SoundField.h	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,143 +0,0 @@
-//-------------------------------------------------------------------------------------------------------
-// VST Plug-Ins SDK
-// Version 2.4		$Date: 2006/11/13 09:08:27 $
-//
-// Category     : VST 2.x SDK Samples
-// Filename     : adelay.h
-// Created by   : Steinberg Media Technologies
-// Description  : Simple Delay plugin (Mono->Stereo)
-//
-// © 2006, Steinberg Media Technologies, All Rights Reserved
-//-------------------------------------------------------------------------------------------------------
-
-#define kNumPrograms 5 //Number of Programs
-#define MAX_CHANNELS 6 //Max Input/Output Count
-#define VERSION      1000 //Plugin Version
-#define kVstVersion  2400 //Plugin implemented in VST Version
-
-#ifndef __SoundField__
-#define __SoundField__
-
-//VST SDK Header(s)
-#include "audioeffectx.h"
-
-//Parameters Header
-#include "SoundFieldParameters.h"
-#include "Decoder.h"
-
-
-//------------------------------------------------------------------------
-struct SoundFieldProgram
-{
-	friend class SoundField;
-    
-public:
-	SoundFieldProgram ();
-	~SoundFieldProgram () {}
-	
-private:
-    char name[kVstMaxProgNameLen];
-    float mode;
-    float width;
-    float pattern;
-    float rotate;
-	float rearVerb;
-	float hiVerb;
-    float centrePattern;
-    float centreGain;
-    float subGain;
-    float surroundMode;
-    float surroundPattern;
-    float surroundWidth;
-    float surroundGain;
-    float fc;
-};
-
-
-
-
-
-//------------------------------------------------------------------------
-class SoundField : public AudioEffectX
-{
-	friend class MyEditor;
-public:
-	SoundField (audioMasterCallback audioMaster);
-	~SoundField ();
-	
-
-	//---from AudioEffect-----------------------
-    //Calls used from AudioEffectX
-    //
-    virtual void resume ();
-    virtual void suspend ();
-    virtual void close ();
-    virtual void open ();
-	virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);
-    virtual void processDoubleReplacing (double ** 	inputs, double ** 	outputs, VstInt32 sampleFrames);
-    
-    virtual bool getProgramNameIndexed (VstInt32 category, VstInt32 index, char *text);
-    virtual void setProgram(VstInt32 program);
-    virtual VstInt32 getProgram();
-	
-	virtual void setParameter (VstInt32 index, float value);
-	virtual float getParameter (VstInt32 index);
-	virtual void getParameterLabel (VstInt32 index, char* label);
-	virtual void getParameterDisplay (VstInt32 index, char* text);
-	virtual void getParameterName (VstInt32 index, char* text);
-	
-    virtual void setSampleRate (float sampleRate);
-    
-	virtual bool getEffectName (char* name);
-	virtual bool getVendorString (char* text);
-	virtual bool getProductString (char* text);
-	virtual VstInt32 getVendorVersion ();
-    virtual VstInt32 getVstVersion();
-
-	virtual VstPlugCategory getPlugCategory () { return kPlugCategSpacializer; }
-	virtual bool setSpeakerArrangement (VstSpeakerArrangement* pluginInput, VstSpeakerArrangement* pluginOutput);
-    virtual bool getSpeakerArrangement (VstSpeakerArrangement **pluginInput, VstSpeakerArrangement **pluginOutput);
-//    virtual bool getInputProperties	(VstInt32 index, VstPinProperties *properties);
-//    virtual bool getOutputProperties (VstInt32 index, VstPinProperties *properties);
-    
-    
-    // Variables
-    char label[20];
-    int bits;
-	Decoder myDecoder;
-    VstSpeakerArrangement* myInputArrangement;
-    //VstSpeakerArrangement* myOutputArrangement;
-	
-    
-    
-private:       
-    int     numberOutputs;
-    int     numberInputs;
-
-    SoundFieldProgram programs[5][kNumPrograms];
-    
-    //Parameter float values
-    float fMode;
-    float fWidth;
-    float fPattern;
-    float fRotate;
-    float fTilt;
-	float fTumble;
-	float fZoom;
-	float fZoomMethod;
-	float fRearVerb;
-	float fHiVerb;
-    float fCentrePattern;
-    float fCentreGain;
-    float fSubGain;
-    float fSurroundMode;
-    float fSurroundPattern;
-    float fSurroundWidth;
-    float fSurroundGain;
-    float fFc;
-    float fDecoderMode;
-    float fChannelOrder;
-};
-
-
-#endif
--- a/Source/SoundFieldMain.cpp	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-//-------------------------------------------------------------------------------------------------------
-// VST Plug-Ins SDK
-// Version 2.4		$Date: 2006/11/13 09:08:27 $
-//
-// Category     : VST 2.x SDK Samples
-// Filename     : adelaymain.cpp
-// Created by   : Steinberg Media Technologies
-// Description  : Simple Delay plugin (Mono->Stereo)
-//
-// © 2006, Steinberg Media Technologies, All Rights Reserved
-//-------------------------------------------------------------------------------------------------------
-
-#ifndef __SoundField__
-#include "SoundField.h"
-#endif
-
-//-------------------------------------------------------------------------------------------------------
-AudioEffect* createEffectInstance (audioMasterCallback audioMaster) //Start a new instance of our effect
-{
-	return new SoundField (audioMaster);
-}
-
--- a/Source/SoundFieldParameters.h	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +0,0 @@
-//
-//  TutorialParameters.cpp
-//  SoundField//
-//  Created by Martin Morrell on 02/06/2012.
-//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
-//
-
-
-#ifndef __SoundFieldParameters__
-#define __SoundFieldParameters__
-
-enum
-{
-	// Parameters Tags
-    kRotate, //0
-    kTilt, //1
-	kTumble, //2
-	kZoom, //3
-	kZoomMethod, //4
-    kMode, //5
-    kWidth, //6
-    kPattern, //7
-	kRearVerb, //8
-	kHiVerb, //9
-    kCentrePattern, //10
-    kCentreGain, //11
-    kSubGain, //12
-    kFc, //13
-    kSurroundMode, //14
-    kSurroundPattern, //15
-    kSurroundWidth, //16
-    kSurroundGain, //17
-    kDecoderMode, //18
-    kChannelOrder, //19
-    
-    kNumParameters
-};
-
-#endif 
\ No newline at end of file
--- a/Source/Version.h	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-//
-//  Version.h
-//  Classic Ambisonics Decoder VST
-//
-//  Created by momont on 06/09/2012.
-//
-//
-
-#ifndef Classic_Ambisonics_Decoder_VST_Version_h
-#define Classic_Ambisonics_Decoder_VST_Version_h
-
-#define MAJOR_VERSION_STR   "1"
-#define MAJOR_VERSION_INT   0
-
-#define MINOR_VERSION_STR   "2"
-#define MINOR_VERSION_INT   1
-
-#define MAINT_VERSION_STR   "4"
-#define MAINT_VERSION_INT   2
-
-#define BUILD_VERSION_STR   "279"
-#define BUILD_VERSION_INT   3
-
-#define FULL_VERSION_STR   MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MAINT_VERSION_STR "." BUILD_VERSION_STR
-#define VERSION_STR         MAJOR_VERSION_STR "." MINOR_VERSION_STR "." MAINT_VERSION_STR
-#define VERSION_INT         ((MAJOR_VERSION_INT*1000)+(MINOR_VERSION_INT*100)+(MAINT_VERSION_INT*10) + (BUILD_VERSION_INT/1))
-
-#endif
--- a/Source/modded_plot/PolarPlot.cpp	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,308 +0,0 @@
-/* VVMicVST - A VST plugin to derive virtual microphones from b-format.
- *
- * Copyright (c) 2005 David McGriffy <david@mcgriffy.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-// PolarPlot.cpp : implementation file
-//
-
-//#include "AVVMic.hpp"
-#include "GUI.h"
-#include <stdio.h>
-#include <vstgui.h>
-#include "PolarPlot.hpp"
-
-#include <stdio.h>
-#include <math.h>
-
-double tsin(double ang);
-double tcos(double ang);
-double trig[360];
-
-#define ln10 (2.302585092994)
-
-float inline db2level(float db)
-{
-	return  (float)exp(ln10 * ((double)db / 20.0));
-}
-
-float inline level2db(float level)
-{
-	return (float)(20.0f * log((double)level) / ln10);
-}
-
-//float inline parm2halfpi (float x)
-//{
-//	return (pie * x) - (piover2);
-//}
-//
-//float inline parm2pi (float x)
-//{
-//	return ((float)twopi * x) - (pie);
-//}
-
-enum {
-	kPolarElevX = 13,
-	kPolarElevY = 19,
-	kPolarAziX = 18,
-	kPolarAziY = 19,
-	kCircleSize = 90
-};
-
-
-//CColor darkColors[6] = {196,0,0}, {0,196,0}, {0,0,196}, {196,196,0},{196,0,196},{0,196,196}};
-//CColor lightColors [6] = {{128,0,0}, {0,128,0}, {0,0,128}, {128,128,0},{128,0,128},{0,128,128}};
-
-/////////////////////////////////////////////////////////////////////////////
-// CPolarPlot
-
-CPolarPlot::CPolarPlot(CRect& size, CControlListener* listener, int tag, 
-					   CBitmap* hBackground, CPoint &offset)
-	: CControl(size, listener, tag)
-{
-	//--initialize trig table - used for display only-----------------------
-	for (short ang = 0; ang < 360; ang++)
-		//trig[ang] = sin(ang * deg2rad);
-	this->hBackground = hBackground;
-	this->offset = offset;
-}
-
-CPolarPlot::~CPolarPlot()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-
-void CPolarPlot::draw(CDrawContext* context)
-{
-
-		//bool dispMics = effect->getParameter(1) != 0.0f;//kDispMics
-		//bool dispTotal = effect->getParameter(2) != 0.0f;//kDispTotal
-		//bool dispVU = effect->getParameter(3) != 0.0f;//kDispVU
-
-		// render to an offscreen context
-		// this must be local
-		//COffscreenContext *dc = new COffscreenContext (
-		//	getParent (), 300, 500, kBlackCColor);
-		//CDrawContext *dc = context;
-		//CBitmap *bg = new CBitmap(*getParent(),
-			//hBackground->getWidth(), hBackground->getHeight());
-		//COffscreenContext *dc = new COffscreenContext(context, bg);
-		CRect rect = CRect(0, 0, hBackground->getWidth(), hBackground->getHeight()/2);
-		CPoint off = CPoint(0, hBackground->getHeight()/2);
-		//if (dispVU)
-		//	hBackground->draw(dc, rect, off);
-		//else
-		//	hBackground->draw(dc, rect);
-
-		// create brushes & pens
-		//CColor backPen = {252,252,248};
-		//CColor blackPen = {0,0,0};
-		//CColor greyPen = {128,128,128};
-		//CColor redPen = {196,0,0};
-		//CColor bluePen = {0,0,196};
-		//CColor redDashedPen = {255,160,160};
-		//CColor blueDashedPen = {160,160,255};
-		//CColor *darkPen, *lightPen;
-
-		// draw elevation picture picture
-		int elevCenterX = kPolarElevX;
-		int elevCenterY = kPolarElevY+ kCircleSize;
-		//dc->setFrameColor(blackPen);
-		//dc->setFillColor(backPen);
-		//dc->setLineWidth(2);
-		CRect rectElev(kPolarElevX - kCircleSize, kPolarElevY,
-			kPolarElevX + kCircleSize, kPolarElevY + (kCircleSize * 2));
-		CPoint p1(kPolarElevX, kPolarElevY + (kCircleSize * 2));
-		CPoint p2(kPolarElevX, kPolarElevY);
-		//dc->fillArc(rectElev, p1, p2);
-		//dc->drawArc(rectElev, p1, p2);
-
-		// draw azimuth picture circle
-		int aziCenterX = kPolarAziX + (2 * kCircleSize);
-		int aziCenterY = kPolarAziY + kCircleSize;
-		CRect rectAzi(kPolarAziX + kCircleSize, kPolarElevY,
-			kPolarAziX + (3 * kCircleSize), kPolarAziY + (kCircleSize * 2));
-		int delta = kCircleSize / 2;
-		//dc->fillEllipse(rectAzi);
-		rectAzi(rectAzi.left + delta, rectAzi.top + delta, rectAzi.right - delta, rectAzi.bottom - delta);
-		//dc->setFrameColor(greyPen);
-		//dc->drawEllipse(rectAzi);
-		//dc->setLineWidth(2);
-
-
-		// draw response curves
-		// note that some effort was required to be fast enough to not disturb play
-		// probably have to implement a seperate display thread eventually
-		//dc->setFrameColor(redPen);
-		//dc->moveTo(CPoint(aziCenterX, aziCenterY - kCircleSize));
-		int x, y;
-		int inverted = false; // true while drawing negative response
-		// for each mic
-		double totalresp [37];  // total response at each point around the circle
-		for (int deg = 0; deg <= 360; deg += 10)
-			totalresp [deg / 10] = 0.0;
-		//int m_nNumOuts = (int)(effect->getParameter(kNumMics) * MICDIVISOR) + 1;
-		//int m_nCurOut  = (int)(effect->getParameter(kCurMic) * MICDIVISOR) + 1;
-		//int last = dispTotal ? m_nNumOuts : m_nNumOuts - 1;
-//		for (short mic = 0; mic <= last; mic++) // last one draws total
-//		{
-//			// select a color for this mic
-//			if (mic < m_nNumOuts)
-//			{
-//				darkPen = &darkColors[mic % 6];
-//				lightPen = &lightColors[mic % 6];
-//			}
-//			else
-//			{
-//				darkPen = &blackPen;
-//				lightPen = &greyPen;
-//			}
-//			dc->setFrameColor(*darkPen);
-//			// draw rect of selected mic
-//			/*if (mic == (m_nCurOut - 1))
-//			{
-//				CRect micBox (260, 265, 280, 290);
-//				dc->fillRect(micBox);
-//				dc->drawRect(micBox);
-//				char strMicNum[80];
-//				sprintf(strMicNum, "%d", m_nCurOut);
-//				micBox.top += 2;
-//				dc->drawString( strMicNum, micBox);
-//			}*/
-//
-//			// compute bass parameter index for the current mic
-//			int nMicOffset = kNumMasterParams + (mic * kNumMicParams);
-//
-//			// compute gain or vu
-//			float gain;
-//			if (dispVU)
-//				gain = max(0.0f, (level2db(effect->getVuMic(mic)) + 60.0f)) / 60.0f;
-//			else
-//				//gain = min(1.0f, db2level((effect->getParameter(nMicOffset + kGain) * 24.0f) - 12.0f));
-//				gain = db2level((effect->getParameter(nMicOffset + kGain) * 24.0f) - 12.0f);
-//
-//			// draw elevation line for this mic
-//			if (mic < m_nNumOuts) // no total elevation
-//			{
-//				dc->moveTo(CPoint(elevCenterX, elevCenterY));
-//				float elev = parm2halfpi(effect->getParameter (nMicOffset + kElevation));
-//				float r = (float)(gain * (kCircleSize-1));
-//				r = min(kCircleSize - 2, r);
-//				int x = elevCenterX + (int)(tcos(elev) * r);
-//				int y = elevCenterY - (int)(tsin(elev) * r);
-//				CPoint thePoint = CPoint(x, y);
-//				dc->lineTo(thePoint);
-//			}
-//
-//			// around the circle
-//			for (int deg = 0; deg <= 360; deg += 10)
-//			{
-//				if (mic == 0)
-//					totalresp [deg / 10] = 0.0;
-//				double rad = (deg * deg2rad);
-//				double resp;
-//				if (mic < m_nNumOuts)
-//				{
-//					// drawing one mic
-//					float width;
-////					if (m_bLinkPairs)
-////						width = m_width[mic] / 2 * (mic%2 ? -1 : 1);
-//					if (true)
-//						width = effect->getParameter(nMicOffset + kWidth) / 2 * (mic%2 ? -1 : 1);
-//					else
-//						width = 0.0f;
-//					float directivity = 2 * effect->getParameter(nMicOffset + kDirectivity);
-//					float azimuth = parm2pi(effect->getParameter(nMicOffset + kAzimuth));
-//					width = parm2pi(width);
-//					resp = gain * (2 - directivity 
-//						+ (directivity * tcos(rad + azimuth + width)))
-//						* (kCircleSize - 2) / 2;
-//					totalresp [deg / 10] += resp / (double)m_nNumOuts;
-//					resp = min(kCircleSize - 2, resp);
-//				}
-//				else
-//				{
-//					// drawing total
-//					resp = min(kCircleSize - 2, totalresp [deg / 10]);
-//				}
-//				if (resp > 0 && inverted)
-//				{
-//				
-//					// drawing normal polarity
-//					dc->setFrameColor(*darkPen);
-//					inverted = false;
-//				}
-//				if (resp < 0 && !inverted)
-//				{
-//					// drawing inverted polarity
-//					inverted = true;
-//					dc->setFrameColor(*lightPen);
-//				}
-//				if (inverted)
-//					resp = -resp;
-//				x = aziCenterX - (int)(tsin(rad) * resp);
-//				y = aziCenterY + (int)(tcos(rad) * resp);
-//				if (dispMics || (mic == m_nNumOuts))
-//					if (deg == 0)
-//						dc->moveTo(CPoint(x, y));
-//					else
-//						dc->lineTo(CPoint(x, y));
-//			}
-//		}
-//		dc->copyFrom(context, size);
-//		delete dc;
-//		delete bg;
-}
-
-// table driven trig for display purposes
-double tsin(double ang)
-{
-//	if (ang < 0)
-//		ang += twopi; // ms's mod doesn't do negatives right
-//	return trig[((int)(ang / deg2rad) % 360)];
-        return 0;
-}
-
-double tcos(double ang)
-{
-//	if (ang < 0)
-//		ang += twopi; // ms's mod doesn't do negatives right
-//	int tmp = (((int)(ang / deg2rad) + 90) % 360);
-//	double tmp2 = trig[tmp];
-//	return trig[(((int)(ang / deg2rad) + 90) % 360)];
-    return 0;
-}
-
-//void CPolarPlot::setEffect(AVVMic *newEffect)
-//{
-//	effect = newEffect;
-//}
-
-//AVVMic* CPolarPlot::getEffect()
-//{
-//	return this->effect;
-//}
-
-//CColor CPolarPlot::getColor(int i)
-//{
-//	return darkColors[i];
-//}
-
-//-----------------------------------------------------------------------------
--- a/Source/modded_plot/PolarPlot.hpp	Thu Sep 27 12:33:46 2012 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/* VVMicVST - A VST plugin to derive virtual microphones from b-format.
- *
- * Copyright (c) 2005 David McGriffy <david@mcgriffy.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library 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 Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#if !defined(AFX_POLARPLOT_H)
-#define AFX_POLARPLOT_H
-
-#if _MSC_VER > 1000
-#pragma once
-#endif // _MSC_VER > 1000
-// PolarPlot.h : header file
-//
-
-// include VSTGUI
-#ifndef __vstgui__
-#include <vstgui.h>
-#endif
-
-//#include "AVVMic.hpp"
-
-/////////////////////////////////////////////////////////////////////////////
-// CPolarPlot view
-
-class CPolarPlot : public CControl
-{
-public:
-	CPolarPlot(CRect& size, CControlListener* listener, int tag,
-			   CBitmap *hBackground, CPoint& offset);
-	virtual ~CPolarPlot();
-
-// Attributes
-public:
-	void draw(CDrawContext* dc);
-
-	//void setEffect(AVVMic *effect);
-	//AVVMic *getEffect();
-	CColor getColor(int i);
-
-protected:
-	//AVVMic *effect;
-	CBitmap *hBackground;
-	CPoint offset;
-
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-#endif // !defined(AFX_POLARPLOT_H)