/* ======================================== * Mastering - Mastering.h * Created 8/12/11 by SPIAdmin * Copyright (c) Airwindows, Airwindows uses the MIT license * ======================================== */ #ifndef __Mastering_H #define __Mastering_H #ifndef __audioeffect__ #include "audioeffectx.h" #endif #include #include #include enum { kParamA =0, kParamB =1, kParamC =2, kParamD =3, kParamE =4, kParamF =5, kNumParameters = 6 }; // const int kNumPrograms = 0; const int kNumInputs = 2; const int kNumOutputs = 2; const unsigned long kUniqueId = 'mast'; //Change this to what the AU identity is! class Mastering : public AudioEffectX { public: Mastering(audioMasterCallback audioMaster); ~Mastering(); virtual bool getEffectName(char* name); // The plug-in name virtual VstPlugCategory getPlugCategory(); // The general category for the plug-in virtual bool getProductString(char* text); // This is a unique plug-in string provided by Steinberg virtual bool getVendorString(char* text); // Vendor info virtual VstInt32 getVendorVersion(); // Version number virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames); virtual void processDoubleReplacing (double** inputs, double** outputs, VstInt32 sampleFrames); virtual void getProgramName(char *name); // read the name from the host virtual void setProgramName(char *name); // changes the name of the preset displayed in the host virtual VstInt32 getChunk (void** data, bool isPreset); virtual VstInt32 setChunk (void* data, VstInt32 byteSize, bool isPreset); virtual float getParameter(VstInt32 index); // get the parameter value at the specified index virtual void setParameter(VstInt32 index, float value); // set the parameter at index to value virtual void getParameterLabel(VstInt32 index, char *text); // label for the parameter (eg dB) virtual void getParameterName(VstInt32 index, char *text); // name of the parameter virtual void getParameterDisplay(VstInt32 index, char *text); // text description of the current value virtual VstInt32 canDo(char *text); private: char _programName[kVstMaxProgNameLen + 1]; std::set< std::string > _canDo; float A; float B; float C; float D; float E; float F; enum { pvAL1, pvSL1, accSL1, acc2SL1, pvAL2, pvSL2, accSL2, acc2SL2, pvAL3, pvSL3, accSL3, pvAL4, pvSL4, gndavgL, outAL, gainAL, pvAR1, pvSR1, accSR1, acc2SR1, pvAR2, pvSR2, accSR2, acc2SR2, pvAR3, pvSR3, accSR3, pvAR4, pvSR4, gndavgR, outAR, gainAR, air_total }; double air[air_total]; enum { prevSampL1, prevSlewL1, accSlewL1, prevSampL2, prevSlewL2, accSlewL2, prevSampL3, prevSlewL3, accSlewL3, kalGainL, kalOutL, kalAvgL, prevSampR1, prevSlewR1, accSlewR1, prevSampR2, prevSlewR2, accSlewR2, prevSampR3, prevSlewR3, accSlewR3, kalGainR, kalOutR, kalAvgR, kal_total }; double kalM[kal_total]; double kalS[kal_total]; long double lastSinewL; long double lastSinewR; //this is overkill, used to run both Zoom and Sinew stages as they are after //the summing in StoneFire, which sums three doubles to a long double. double lastSampleL; double intermediateL[16]; bool wasPosClipL; bool wasNegClipL; double lastSampleR; double intermediateR[16]; bool wasPosClipR; bool wasNegClipR; //Stereo ClipOnly2 int quantA; int quantB; float expectedSlew; float testA; float testB; double correction; double shapedSampleL; double shapedSampleR; double currentDither; double ditherL; double ditherR; bool cutbinsL; bool cutbinsR; int hotbinA; int hotbinB; double benfordize; double totalA; double totalB; double outputSample; int expon; //internal dither variables double NSOddL; //dither section! double NSEvenL; double prevShapeL; double NSOddR; double NSEvenR; double prevShapeR; bool flip; //VinylDither double darkSampleL[100]; double darkSampleR[100]; //Dark double previousDitherL; double previousDitherR; //PaulWide double bynL[13], bynR[13]; double noiseShapingL, noiseShapingR; //NJAD uint32_t fpdL; uint32_t fpdR; //default stuff }; #endif